• Базы данных
  • Oracle
  • Резервирование и восстановление данных Oracle с помощью программы RMAN

SQL Plus: Создание и выполнение сценариев - Взаимодействие SQL*Plus с пользователем

ОГЛАВЛЕНИЕ

Взаимодействие SQL*Plus с пользователем

Стандартный механизм запроса значений пользовательских переменных дает ограниченные средства взаимодействия с пользователем - ввод значений в ответ на стандартные приглашения. Утилита SQL*Plus позволяет управлять выдачей сообщений и запросом значений переменных.

Команда PROMPT

Для выдачи на экран произвольного текста используется команда PROMPT со следующим синтаксисом:

<команда PROMPT> ::=
PRO[MPT] [<текст>]

Она выдает указанный текст или пустую строку (при вызове без параметров). Если необходимо выдать несколько строк, для каждой строки выполняется отдельная команда PROMPT.

Команда ACCEPT

Считать строку и запомнить ее в указанной пользовательской переменной определенного типа (выдавая, при необходимости, приглашение) позволяет команда ACCEPT со следующим синтаксисом:

<команда ACCEPT> ::=
ACC[EPT] <имя переменной> [<тип переменной>]
  [FOR[MAT] <формат>] [DEF[AULT] <стандартное значение>]
  [<приглашение>] [HIDE]
<тип переменной> ::=
NUM[BER] / CHAR / DATE
<приглашение> ::=
PROMPT <текст> / NOPR[OMPT]

Если указанная в команде ACCEPT пользовательская переменная не существует, SQL*Plus создает ее. Опции команды ACCEPT описаны в табл. 14.

Таблица 14. Опции команды ACCEPT.

Опция  Назначение 
NUMBER  Задает переменной тип NUMBER. Если введенное значение не приводится к этому типу, команда ACCEPT выдает сообщение об ошибке и запрашивает значение снова.
CHAR  Задает переменной тип CHAR. Длина строки-значения не должна превышать 240 байтов.
DATE  Задает переменной тип DATE. Если введенное значение не преобразуется в тип DATE с учетом текущего формата даты в сеансе (NLS_DATE_FORMAT), команда ACCEPT выдает сообщение об ошибке и запрашивает значение снова.
FORMAT  Явно задает формат, которому должно соответствовать введенное значение. Формат задается так же, как для команды COLUMN. Если значение не соответствует формату, команда ACCEPT выдает сообщение об ошибке и запрашивает значение снова.
DEFAULT  Задает стандартное значение, если оно не будет введено. Стандартное значение должно соответствовать стандартному или указанному формату.
PROMPT  Выдает на экран указанный текст перед ожиданием ввода значения переменной.
NOPROMPT  Выдает перевод строки и ждет ввода значения, не выдавая приглашений.
HIDE  Подавляет выдачу вводимого значения на экран по ходу ввода.

Рассмотрим простой пример совместного использования команд PROMPT и ACCEPT. Пусть имеется командный файл splus1.sql со следующим содержимым:

REM splus1.sql - пример диалога с пользователем 
prompt prompt Input department number (10, 20, 30)
accept dept_number number prompt 'Dept. #: '

select * from dept where deptno = &dept_number;

Вот что происходит при его выполнении:

SQL> @f:\usr\doc\orasdev\splus1

Input department number (10, 20, 30)
Dept. #: q
SP2-0425: "q" не является допустимым числом
Dept. #: 10
прежний 2: where deptno = &dept_number
новый 2: where deptno = 10

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK

Команда PAUSE

Команда PAUSE позволяет дождаться подтверждения того, что пользователь прочитал сообщение на экране, выданное командой PROMPT. Для подтверждения необходимо нажать клавишу Enter, после чего выполнение сценария или сеанса SQL*Plus продолжится.

Команда PAUSE имеет следующий синтаксис:

<команда PAUSE> ::=
PAU[SE] [<текст>]

Эта команда выдает пустую строку, затем строку текста, если он указан, или еще одну пустую строку, и ждет подтверждения от пользователя. Ввод эта команда ожидает с терминала (при интерактивном запуске), даже если входной и выходной потоки перенаправлены. При работе в пакетном режиме для продолжения необходимо наличие новой строки в файле, откуда берется входной поток.

Рассмотрим простой пример. Изменим файл splus1.sql следующим образом:

set verify off 
prompt Input department number (10, 20, 30)
accept dept_number number prompt 'Dept. #: '
pause Press Enter to view results
select * from dept where deptno = &dept_number;

Вот что будет выдано при его выполнении:

SQL> @f:\splus1 
Input department number (10, 20, 30) Dept. #: 30
Press Enter to view results

DEPTNO DNAME LOC
---------- -------------- -------------
30 SALES CHICAGO

Для получения результатов пришлось нажать клавишу Enter после вывода соответствующего приглашения.