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

Команда 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.