Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
05 приложение - SQL Plus - win.doc
Скачиваний:
28
Добавлен:
17.08.2019
Размер:
763 Кб
Скачать
☆

Команда 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 после вывода соответствующего приглашения.

Связываемые переменные

Связываемые переменные - это создаваемые в SQL*Plus переменные, на которые можно ссылаться (как на хост-переменные) в блоках PL/SQL. Таким переменным можно, например, присваивать значения в блоках PL/SQL или использовать их значения во включенных в блоки SQL-операторах. Значения связываемых переменных можно затем выдавать в SQL*Plus.

Команда variable

Для создания связываемой переменной используется команда VARIABLE со следующим синтаксисом:

<команда VARIABLE> ::=

VAR[IABLE] [<имя переменной> [<тип данных>]]

<тип данных> ::=

NUMBER   | CHAR [(<количество> [<единица измерения>])]   | NCHAR [(<количество>)]   | VARCHAR2 (<количество> [<единица измерения>])   | NVARCHAR2 (<количество>)   | CLOB   | NCLOB   | REFCURSOR

<единица измерения> ::=

CHAR | BYTE

При вызове без параметров команда VARIABLE выдает список всех переменных, созданных в сеансе. Если указать только имя переменной, выдается информация только об этой переменной.

Связываемые переменные можно использовать как параметры хранимых процедур или непосредственно, в анонимных PL/SQL-блоках. Их нельзя использовать в команде COPY или присвоить им значение в SQL-операторах, не входящих в PL/SQL-блоки. Вместо связанной переменной, не получившей явно значения, при необходимости подставляется значение NULL.

Рассмотрим простой пример использования связываемых переменных:

SQL> var

SP2-0568: Не объявлены переменные привязки.

SQL> var dep number

SQL> begin

2 select deptno into :dep from emp

3 where sal = (select max(sal) from emp);

4 end;

SQL> /

Процедура PL/SQL успешно завершена.

SQL> select * from dept where deptno = :dep;

DEPTNO DNAME LOC

---------- -------------- -------------

10 ACCOUNTING NEW YORK

SQL> var dep2 number

SQL> c /:dep/:dep2

1* select * from dept where deptno = :dep2

SQL> /

строки не выбраны

SQL> var

переменная dep

тип данных NUMBER

переменная dep2

тип данных NUMBER

Мы использовали связываемую переменную для передачи значения из одного оператора SQL в другой, так и не выдав его на экран. Чтобы значения используемых в команде связываемых переменных выдавались автоматически, необходимо выполнить команду SET AUTOPRINT ON.

Типы данных для связываемых переменных аналогичны соответствующим типам данных PL/SQL. Переменные типа REFCURSOR позволяют работать с курсорными переменными PL/SQL. Утилита SQL*Plus обрабатывает связываемые переменные такого типа особым образом. Курсор, соответствующий курсорной переменной, открывается явно, а закрывается после выдачи значения или при завершении сеанса. При выдаче значения на экран выдается результирующее множество соответствующего запроса. Рассмотрим пример:

SQL> set autoprint on

SQL> var a refcursor;

SQL> begin

2 open :a for select * from dept;

3 end;

4 /

Процедура PL/SQL успешно завершена.

DEPTNO DNAME LOC

---------- -------------- -------------

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

50 TRAINING KIEV

SQL> exec open :a for select ename, sal from emp where deptno = :dep;

Процедура PL/SQL успешно завершена.

DEP

----------

10

ENAME SAL

---------- ----------

CLARK 2450

KING 5000

MILLER 1300

Результаты, выдаваемые при показе значений связываемой переменной типа REFCURSOR можно форматировать так же, как и результаты выполнения SQL-оператора SELECT. Значение такой переменной выдается только один раз, - затем результирующее множество надо выбирать повторно.

Для явной выдачи на экран значения связываемой переменной используется команда PRINT.