0defb3aa

Команда VARIABLE


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

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

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

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

NUMBER

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

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

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

CHAR | BYTE

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

Связываемые переменные можно использовать как параметры хранимых процедур или непосредственно, в анонимных PL/SQL-блоках. Их нельзя использовать в команде или присвоить им значение в 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.


Содержание раздела