Считать строку и запомнить ее в указанной пользовательской переменной определенного типа (выдавая, при необходимости, приглашение) позволяет команда ACCEPT со следующим синтаксисом:
<команда ACCEPT> ::=
ACC[EPT] <имя переменной> [<тип переменной>]
[FOR[MAT] <формат>] [DEF[AULT] <стандартное значение>]
[<приглашение>] [HIDE]
<тип переменной> ::=
NUM[BER] | CHAR | DATE
<приглашение> ::=
PROMPT <текст> | NOPR[OMPT]
Если указанная в команде ACCEPT пользовательская переменная не существует, SQL*Plus создает ее. Опции команды ACCEPT описаны в .
Таблица 14. Опции команды ACCEPT.
Опция | Назначение |
NUMBER | Задает переменной тип NUMBER. Если введенное значение не приводится к этому типу, команда ACCEPT выдает сообщение об ошибке и запрашивает значение снова. |
CHAR | Задает переменной тип CHAR. Длина строки-значения не должна превышать 240 байтов. |
DATE | Задает переменной тип DATE. Если введенное значение не преобразуется в тип DATE с учетом текущего формата даты в сеансе (NLS_DATE_FORMAT), команда ACCEPT выдает сообщение об ошибке и запрашивает значение снова. |
FORMAT | Явно задает формат, которому должно соответствовать введенное значение. Формат задается так же, как для команды . Если значение не соответствует формату, команда 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