- •Приложение. Утилита sql*Plus. Создание и выполнение сценариев Назначение sql*Plus
- •Базовые понятия
- •Расширенные формулы Бэкуса-Наура
- •Запуск sql*Plus и выход из него
- •Опции командной строки
- •Регистрационная информация
- •Начальный сценарий
- •Использование профилей сайта и пользователя
- •Выход из sql*Plus
- •Подключение к стандартной и удаленной базе данных
- •Использование команды connect
- •Формат строки связи для удаленной базы данных
- •Основные команды
- •Выполнение команд Буфер sql
- •Выполнение операторов sql
- •Выполнение блоков pl/sql
- •Выполнение команд sql*Plus
- •Прекращение команды по ходу работы
- •Получение информации о времени выполнения команды
- •Выполнение команд базовой операционной системы
- •Получение оперативной справки
- •Команда help
- •Команда describe
- •Редактирование команд
- •Форматирование результатов запросов
- •Стандартный формат столбцов
- •Команда column
- •Команда break
- •Команда compute
- •Команда clear
- •Команды btitle и ttitle
- •Команды repheader и repfooter
- •Копирование данных из одной базы данных в другую
- •Команды для работы с файлами
- •Создание командных файлов
- •Команда save
- •Команда edit
- •Загрузка командных файлов
- •Выполнение командных файлов
- •Передача параметров командных файлов при вызове
- •Сокращенные формы команды start (@, @@)
- •Коды возврата командных файлов
- •Комментарии в командных файлах
- •Запоминание установок среды sql*Plus
- •Запись в файл и печать результатов выполнения запросов
- •Параметры командных файлов
- •Команды define и undfefine
- •Использование подставляемых переменных
- •Подстановка без повторного запроса
- •Подстановка параметров командных файлов
- •Ограничения
- •Системные переменные, влияющие на подстановку
- •Взаимодействие с пользователем
- •Команда prompt
- •Команда accept
- •Команда pause
- •Связываемые переменные
- •Команда variable
- •Команда print
- •Трассировка операторов
- •Настройка среды sql*Plus
- •Команда set
- •Команда show
- •Другие полезные команды
- •Команда execute
- •Команда password
- •Команды администрирования базы данных
- •Запуск базы данных
- •Остановка базы данных
- •Управление архивированием журналов повторного выполнения
- •Восстановление базы данных
- •Дополнительные источники информации
Команда 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.