Отправляет email-рассылки с помощью сервиса Sendsay

Открыто о СУБД Oracle на русском

  Все выпуски  

Открыто о СУБД Oracle на русском : Руководство по SQL*Plus. Часть III


Информационный Канал Subscribe.Ru

Выпуск 63

Уважаемые подписчики рассылки!

Это третий выпуск в серии, посвященной утилите SQL*Plus. Посетители моего сайта часто ищут информацию об SQL*Plus или вообще документацию по Oracle, так почему бы им не помочь. Сообщите мне, пожалуйста, свое мнение о данной публикации.


Параметры командных файлов

Утилита SQL*Plus позволяет создавать командные файлы, запрашивающие у пользователя параметры и подставляющие их значение в команды по ходу выполнения. Для этого используются т.н. пользовательские переменные. Такие переменные определяются в командном файле, в частности, с помощью команды DEFINE. На пользовательские переменные можно ссылаться в командах, предваряя их имя символами & или &&. Конструкцию &<имя переменной> называют подставляемой переменной.

Команды DEFINE и UNDFEFINE

Команда DEFINE позволяет определить пользовательскую переменную строкового типа и задать ей значение типа CHAR, либо получить значение определенной или всех пользовательских переменных. Эта команда имеет следующий синтаксис:

<команда DEFINE > ::=
DEF[INE] [<имя переменной> [= <текст>]]

Если текст, присваиваемый переменной, содержит пробелы или символы пунктуации, его надо брать в апострофы.

При вызове без значения, команда DEFINE выдает значение переменной. Команда DEFINE без параметров выдает значение всех пользовательских переменных SQL*Plus, включая системные. Рассмотрим пример:

 
SQL> define a=text 
SQL> define a 
DEFINE A               = "text" (CHAR) 
SQL> define b=5 
SQL> define 
DEFINE _SQLPLUS_RELEASE = "801060000" (CHAR) 
DEFINE _EDITOR         = "Notepad" (CHAR) 
DEFINE _O_VERSION      = "Oracle8i Enterprise Edition Release 8.1.6.0.0 -  
Production 
With the Partitioning option 
JServer Release 8.1.6.0.0 - Production" (CHAR) 
DEFINE _O_RELEASE      = "801060000" (CHAR) 
DEFINE A               = "text" (CHAR) 
DEFINE B               = "5" (CHAR) 
SQL> 

Как видите, утилита SQL*Plus автоматически определяет ряд системных пользовательских переменных.

Для удаления как явно определенной пользовательской переменной, так и параметра командной строки сценария (см. описание команды START выше) используется команда UNDEFINE. После применения этой команды к переменной значение переменной теряется, и она становится неопределенной. Команда UNDEFINE имеет следующий простой синтаксис:

<команда UNDEFINE> ::=
UNDEF[INE] <имя переменной>{ <имя переменной>}

Продолжая предыдущий пример:

 
SQL> undefine a b 
SQL> define a 
SP2-0135: символ a UNDEFINED 
SQL> 

Использование подставляемых переменных

Подставляемую переменную можно использовать в любом месте команды SQL*Plus или SQL-оператора, кроме первого слова в командной строке (по первому слову утилита SQL*Plus определяет тип команды). Когда SQL*Plus встречает в командной строке подставляемую переменную, она подставляет значение этой переменной (запрашивая его, если переменная не определена). Используются подставляемые переменные для получения более гибких, интерактивных сценариев SQL*Plus. Рассмотрим простой пример:

 
SQL> select &func.(&col.) from &tab; 
Введите значение для func: max 
Введите значение для col: sal 
Введите значение для tab: emp 
прежний 1: select &func.(&col.) from &tab 
новый 1: select max(sal) from emp 
 
  MAX(SAL) 
--------- 
     5000 

Как видите, если в команде встречается не определенная явно ранее подставляемая переменная, SQL*Plus запрашивает ее значение. Затем на экран выдается вид команды до и после подстановки всех значений (это можно отключить с помощью команды SET VERIFY OFF), и команда выполняется. В нашем примере мы подставили в команду конкретную функцию агрегирования, имя столбца, по которому выполняется агрегирование, и имя таблицы.

Обратите внимание, что если необходимо вставить значение подставляемой переменной перед не пробельным символом, необходимо указать точку (.) после имени переменной.

В ответ на запрос значения можно ввести любую строку, в том числе с пробелами. Если значение должно быть взято в апострофы и эти апострофы не указаны явно в команде с подставляемой переменной, необходимо будет ввести значение в апострофах.

SQL*Plus читает данные с клавиатуры, даже если входной и выходной потоки терминала перенаправлены в файлы. Если же сценарий запущен в пакетном режиме, данные читаются из соответствующего файла.

Если введенное значение совпадает с подставляемой переменной (начинается с &), то (по крайней мере, в версии 8.1.6) выдается сообщение об ошибке:

 
SQL> define emp = dept 
SQL> select * from &tab; 
Введите значение для tab: &emp 
прежний   1: select * from &tab 
новый   1: select * from &emp 
SP2-0552: Переменная привязки "EMP" не описана. 

Подстановка без повторного запроса

Если использовать одну и ту же подставляемую переменную с символом & в одной команде несколько раз, значение будет запрашиваться каждый раз заново:

 
SQL> select max(&col), avg(&col), min(&col) from &tab; 
Введите значение для col: sal 
Введите значение для col: sal 
Введите значение для col: sal 
Введите значение для tab: emp 
прежний 1: select max(&col), avg(&col), min(&col) from &tab 
новый 1: select max(sal), avg(sal), min(sal) from emp 
 
  MAX(SAL)   AVG(SAL)   MIN(SAL) 
---------- ---------- ---------- 
      5000 2073,21429        800 

Чтобы значение переменной запрашивалось только один раз, используется подстановка с двумя амперсантами (&&):

 
SQL> c /(&col/(&&col 
1* select max(&&col), avg(&col), min(&col) from &tab 
SQL> c /(&col/(&&col 
1* select max(&&col), avg(&&col), min(&col) from &tab 
SQL> c /(&col/(&&col 
1* select max(&&col), avg(&&col), min(&&col) from &tab 
SQL> / 
Введите значение для col: sal 
Введите значение для tab: emp 
прежний 1: select max(&&col), avg(&&col), min(&&col) from &tab 
новый 1: select max(sal), avg(sal), min(sal) from emp 
 
  MAX(SAL)   AVG(SAL)   MIN(SAL) 
---------- ---------- ---------- 
      5000 2073,21429        800 

Подстановка параметров командных файлов

Подстановка переменных выполняется и для позиционных параметров, переданных при вызове сценария. На эти параметры можно ссылаться как на &1, &2 и т.д. Если значение для них в командной строке не передано, SQL*Plus запрашивает значения при вызове сценария. Подстановка позиционных параметров выполняется только при вызове сценария командами START (или ее сокращенными формами @, @@).

Рассмотрим пример:

 
SQL> clear buffer 
buffer очищена 
SQL> input 
  1 select &1 from &2 
  2 . 
SQL> save f:\subst.sql 
Создано файл f:\subst.sql 
SQL> @f:\subst max(sal) emp 
прежний   1: select &1 from &2 
новый   1: select max(sal) from emp 
 
  MAX(SAL) 
---------- 
      5000 
SQL> @f:\subst 
прежний 1: select &1 from &2 
новый 1: select max(sal) from emp 
 
  MAX(SAL) 
---------- 
      5000 
SQL> undef 1 2 
SQL> @f:\subst 
Введите значение для 1: min(sal) 
Введите значение для 2: emp 
прежний   1: select &1 from &2 
новый   1: select min(sal) from emp 
 
  MIN(SAL) 
---------- 
       800 

Ограничения

Подставляемые переменные нельзя использовать в командах редактирования буфера SQL (APPEND, CHANGE, DEL, INPUT) и в других командах, где эта подстановка "не имеет смысла", в частности, в комментариях. Команды редактирования буфера считают символ & обычным и используют его буквально (см. пример выше).

Системные переменные, влияющие на подстановку

В табл. 13 представлены системные установки, влияющие на подстановку пользовательских переменных.

Таблица 13. Системные установки, влияющие на подстановку переменных.

Установка Описание
SET DEFINE Задает символ подстановки (вместо стандартного - &) и позволяет включать и отключать подстановку.
SET ESCAPE Задает символ маскировки, позволяющий маскировать символ подстановки. Стандартным символом маскировки является обратная косая (\).
SET VERIFY Позволяет включать и отключать выдачу каждой строки команды до и после подстановки пользовательских переменных.
SET CONCAT Задает символ, отделяющий имя подставляемой переменной от следующей непосредственно за ним строки. По умолчанию используется точка (.).

Взаимодействие с пользователем

Стандартный механизм запроса значений пользовательских переменных дает ограниченные средства взаимодействия с пользователем - ввод значений в ответ на стандартные приглашения. Утилита SQL*Plus позволяет управлять выдачей сообщений и запросом значений переменных.

Команда PROMPT

Для выдачи на экран произвольного текста используется команда PROMPT со следующим синтаксисом:

<команда PROMPT> ::=
PRO[MPT] [<текст>]

Она выдает указанный текст или пустую строку (при вызове без параметров). Если необходимо выдать несколько строк, для каждой строки выполняется отдельная команда PROMPT.

Команда ACCEPT

Считать строку и запомнить ее в указанной пользовательской переменной определенного типа (выдавая, при необходимости, приглашение) позволяет команда ACCEPT со следующим синтаксисом:

<команда ACCEPT> ::=
ACC[EPT] <имя переменной> [<тип переменной>]
  [FOR[MAT] <формат>] [DEF[AULT] <стандартное значение>]
  [<приглашение>] [HIDE]
<тип переменной> ::=
NUM[BER] | CHAR | DATE
<приглашение> ::=
PROMPT <текст> | NOPR[OMPT]

Если указанная в команде ACCEPT пользовательская переменная не существует, SQL*Plus создает ее. Опции команды ACCEPT описаны в табл. 14.

Таблица 14. Опции команды ACCEPT.

Опция Назначение
NUMBER Задает переменной тип NUMBER. Если введенное значение не приводится к этому типу, команда ACCEPT выдает сообщение об ошибке и запрашивает значение снова.
CHAR Задает переменной тип CHAR. Длина строки-значения не должна превышать 240 байтов.
DATE Задает переменной тип DATE. Если введенное значение не преобразуется в тип DATE с учетом текущего формата даты в сеансе (NLS_DATE_FORMAT), команда ACCEPT выдает сообщение об ошибке и запрашивает значение снова.
FORMAT Явно задает формат, которому должно соответствовать введенное значение. Формат задается так же, как для команды COLUMN. Если значение не соответствует формату, команда 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 
 

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

Команда PRINT

Команда PRINT имеет следующий синтаксис:

<команда PRINT> ::=
PRI[NT] { <имя переменной>}

Эта команда выдает текущее значение перечисленных связываемых переменных. При вызове без параметров выдаются значения всех связываемых переменных.

Продолжая предыдущий пример:

 
SQL> print a 
SP2-0625: Ошибка печати переменной "a" 
SQL> print 
 
       DEP 
---------- 
        10 
 
 
      DEP2 
---------- 
 
 
SP2-0625: Ошибка печати переменной "a" 
SQL> set autoprint off 
SQL> exec open :a for select ename,sal,comm from emp where deptno=:dep; 
 
Процедура PL/SQL успешно завершена. 
 
SQL> print dep a 
 
       DEP 
---------- 
        10 
 
ENAME             SAL       COMM 
---------- ---------- ---------- 
CLARK            2450 
KING             5000 
MILLER           1300 

Трассировка операторов

Утилита SQL*Plus позволяет автоматически получать отчет о способе выполнения оператора, выбранном оптимизатором SQL, а также статистическую информацию о выполнении. Этот отчет выдается после успешного выполнения операторов SELECT, INSERT, UPDATE и DELETE. Такой отчет полезен для контроля и настройки производительности этих операторов.

Для управления данным отчетом используется команда SET AUTOTRACE. Эта команда имеет пять опций:

OFF Отчет не выдается. Это стандартный режим работы SQL*Plus.
ON EXPLAIN Выдается только выбранный оптимизатором план выполнения оператора.
ON STATISTICS Выдается только статистическая информация о выполнении оператора.
ON Выдается план выполнения запроса и статистическая информация о выполнении оператора.
TRACEONLY Выдается отчет о статистике, но не выдаются результаты выполнения оператора. Используется для трассировки запросов, возвращающих большие объемы данных.

Для использования этой возможности SQL*Plus необходимо создать в схеме пользователя таблицу PLAN_TABLE и получить роль PLUSTRACE (предоставить ее может только DBA). Выполним следующие действия:

 
SQL> set autotrace on 
SP2-0613: Невозможно проверить формат или существование PLAN_TABLE 
SP2-0611: Ошибка разблокирования EXPLAIN report 
SP2-0618: Невозможно найти Идентификатор Сеанса.        Проверьте,  
разрешена ли роль PLUSTRACE 
SP2-0611: Ошибка разблокирования STATISTICS report 

Как видите, по умолчанию эта возможность не поддерживается. Создадим таблицу с помощью сценария $ORACLE_HOME/rdbs/admin/utlxplan.sql:

 
SQL> @g:\oracle\ora81\rdbms\admin\utlxplan 
 
Таблица создана. 

Затем создадим роль PLUSTRACE, дадим ей необходимые привилегии, а затем предоставим ее роли DBA (с помощью сценария $ORACLE_HOME/sqlplus/admin/plustrce.sql):

 
SQL> connect system/manager as sysdba 
Соединено. 
SQL> @g:\oracle\ora81\sqlplus\admin\plustrce 
SQL>  
SQL> drop role plustrace; 
drop role plustrace 
          * 
ошибка в строке 1: 
ORA-01919: роль 'PLUSTRACE' не существует 
 
 
SQL> create role plustrace; 
 
Роль создана. 
 
SQL>  
SQL> grant select on v_$sesstat to plustrace; 
 
Привилегии предоставлены. 
 
SQL> grant select on v_$statname to plustrace; 
 
Привилегии предоставлены. 
 
SQL> grant select on v_$session to plustrace; 
 
Привилегии предоставлены. 
 
SQL> grant plustrace to dba with admin option; 
 
Привилегии предоставлены. 
 
SQL> set echo off 

Теперь предоставим роль PLUSTRACE пользователю, который будет использовать трассировку:

 
SQL> grant plustrace to scott; 
 
Привилегии предоставлены. 

Проверяем, что трассировочный отчет теперь выдается:

 
SQL> connect scott/tiger 
Соединено. 
SQL> set autotrace on 
SQL> set pagesize 25 
SQL> select ename, dname, sal 
  2  from emp, dept 
  3  where emp.deptno = dept.deptno; 
 
ENAME      DNAME                 SAL 
---------- -------------- ---------- 
SMITH      RESEARCH              800 
ALLEN      SALES                1600 
WARD       SALES                1250 
JONES      RESEARCH             2975 
MARTIN     SALES                1250 
BLAKE      SALES                2850 
CLARK      ACCOUNTING           2450 
SCOTT      RESEARCH             3000 
KING       ACCOUNTING           5000 
TURNER     SALES                1500 
ADAMS      RESEARCH             1100 
JAMES      SALES                 950 
FORD       RESEARCH             3000 
MILLER     ACCOUNTING           1300 
 
14 строк выбрано. 
 
 
План выполнения 
---------------------------------------------------------- 
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=3 Card=2 Bytes=88) 
   1    0   HASH JOIN (Cost=3 Card=2 Bytes=88) 
   2    1     TABLE ACCESS (FULL) OF 'DEPT' (Cost=1 Card=4 Bytes=44) 
   3    1     TABLE ACCESS (FULL) OF 'EMP' (Cost=1 Card=41 Bytes=1353) 
 
 
Статистика 
---------------------------------------------------------- 
         62  recursive calls 
          8  db block gets 
          6  consistent gets 
          0  physical reads 
          0  redo size 
       1267  bytes sent via SQL*Net to client 
        424  bytes received via SQL*Net from client 
          2  SQL*Net roundtrips to/from client 
          2  sorts (memory) 
          0  sorts (disk) 
         14  rows processed 

Подробнее использование возможностей трассировки в SQL*Plus рассмотрено в отдельном модуле, посвященном настройке производительности.

Настройка среды SQL*Plus

Среда SQL*Plus - очень гибкая и имеет широкие возможности настройки по требованиям пользователя. Эти настройки выполняются, в основном, с помощью команды SET. Мы неоднократно использовали команду SET в примерах данного модуля. В следующем разделе представлено ее формальное описание.

Команда SET

Команда SET позволяет установить системную переменную, изменяющую свойства среды SQL*Plus для текущего сеанса. Она имеет следующий синтаксис:

<команда SET> ::=
SET <системная переменная> <значение>

Имена, описания и возможные значения основных системных переменных для команды SET представлены в табл. 15.

Таблица 15. Основные системные переменные SQL*Plus

Переменная Значения Назначение
APPI[NFO] ON | OFF | <текст> Устанавливает автоматическую регистрацию командных файлов с помощью пакета DBMS_APPLICATION_INFO. Это позволяет контролировать производительность и использование ресурсов каждым командным файлом. При отключенной регистрации файлов в качестве имени модуля используется строка "SQL*Plus" или заданный в этой переменной текст. По умолчанию регистрация отключена.
ARRAY[SIZE] <размер пакета> Устанавливает размер пакета строк, извлекаемых утилитой SQL*Plus из базы данных за один прием. Диапазон допустимых значений - от 1 до 5000. По умолчанию извлекается по 15 строк.
AUTO[COMMIT] ON | OFF | IMM[EDIATE] | <к-во операторов> Управляет фиксацией изменений в базе данных. По умолчанию (OFF) изменения необходимо фиксировать явно. Изменения могут фиксироваться немедленно после успешного выполнения оператора или блока (ON, IMM), или после успешного выполнения указанного количества операторов или блоков PL/SQL. Значение должно быть в диапазоне от 0 до 2000000000.
AUTOP[RINT] ON | OFF Устанавливает автоматическую выдачу значений использованных в команде связываемых переменных.
AUTORECOVERY ON | OFF При установке значения ON команда RECOVER будет автоматически использовать стандартные имена файлов архивных журналов повторного выполнения. По умолчанию, имена файлов при восстановлении придется вводить вручную, в ответ на запросы SQL*Plus.
AUTOT[RACE] ON | OFF | TRACE[ONLY] [EXP[LAIN]] [STAT[ISTICS]] Управляет выдачей отчета о выполнении успешного оператора SELECT, INSERT, UPDATE или DELETE. В отчет может включаться план выполнения и статистическая информация о выполненных действиях.
BLO[CKTERMINATOR] . | <символ> Задает не алфавитно-цифровой символ, используемый для завершения блока PL/SQL. По умолчанию используется точка.
CMDS[EP] ; | ON | OFF | <символ> Задает не алфавитно-цифровой символ, используемый для разделения нескольких команд SQL*Plus в одной строке. ON/OFF управляет возможностью обработки нескольких команд в строке. Значение ON означает, кроме того, установку стандартного разделителя - точки с запятой.
COLSEP <текст> Задает текст, который будет выдаваться между выбранными столбцами. Если текст содержит пробелы или символы пунктуации, его необходимо брать в апострофы. По умолчанию используется один пробел.
COM[PATIBILITY] V7 | V8 | NATIVE Задает версию Oracle, к которой подключена утилита SQL*Plus. Значение NATIVE, принятое по умолчанию, указывает, что версия определяется базой данных.
CON[CAT] . | ON | OFF | <символ> Задает символ, который позволяет отделить имя подставляемой переменной от остальной части строки. Стандартный символ - точка.
COPYC[OMMIT] <к-во пакетов> Задает количество пакетов (размер задается системной переменной ARRAYSIZE), после копирования которых команда COPY фиксирует изменения в базе данных. Значение должно быть в диапазоне от 0 до 5000. При использовании стандартного значения, 0, фиксация выполняется только по завершении копирования.
DEF[INE] & | ON | OFF | <символ> Задает символ-префикс подставляемой переменной. При указании значения ON используется стандартный префикс - &.
DESC[RIBE] [DEPTH 1 | ALL | <глубина>]
[LINENUM ON | OFF]
[INDENT ON | OFF]
Задает количество уровней рекурсивного описания объекта. Допустимы значения от 1 до 50. ALL означает максимальное количество уровней, 50. Можно также указывать номер строки и отступы для имени столбца или атрибута, когда объект содержит несколько компонентов объектных типов.
ECHO ON | OFF Управляет выдачей на экран каждой команды в командном файле, выполняемом с помощью START.
EDITF[ILE] <имя файла>[.<расширение>] Устанавливает стандартное имя файла для команды EDIT.
EMB[EDDED] ON | OFF Задает выдачу каждого нового отчета с новой страницы (стандартное значение, OFF) или как продолжение на текущей странице (ON).
ESC[APE] \ | ON | OFF | <символ> Задает маскирующий символ. Значение ON задает стандартный маскирующий символ, обратную косую.
FEED[BACK] ON | OFF | <к-во строк> Управляет выдачей количества строк, возвращенных запросом. Информация выдается, если возвращено не менее указанного количества строк. Значение ON эквивалентно 1.
FLU[SH] ON | OFF Управляет буферизацией результатов. При стандартном значении ON результаты выдаются клиенту немедленно.
HEA[DING] ON | OFF Управляет выдачей заголовков столбцов в результатах.
HEADS[EP] | | ON | OFF | <символ> Задает символ перевода строки для команд, задающих колонтитулы. Можно задавать любой символ, кроме алфавитно-цифровых и пробела. По умолчанию используется вертикальная черта.
LIN[ESIZE] <длина строки> Задает количество символов в выдаваемой строке. Если выдаваемая строка длиннее, остаток переносится на новую строку. Это значение также используется для выравнивания колонтитулов и заголовков отчетов.
LOGSOURCE [<путь>] Задает местонахождение архивных файлов журнала повторного выполнения для восстановления. Если значение не указано, будет использоваться путь, указанный в файле параметров инициализации.
LONG <ширина столбца> Задает максимальную ширину (в байтах) для выдачи значений типа LONG, CLOB и NCLOB (а также для копирования значений типа LONG). Значение не может превосходить 2 Гбайта.
NEWP[AGE] NONE | <к-во строк> Задает количество пустых строк, выдаваемых в начале страницы отчета, перед верхним колонтитулом. Стандартное значение - 1 строка. Если указано значение NONE, пустые строки не выдаются. Если же указано значение 0, при печати пропускается страница, а при выдаче на экран он очищается.
NULL <текст> Задает текст, представляющий пустое значение в результатах выполнения оператора SELECT.
NUMF[ORMAT] <формат> Задает стандартный формат выдачи чисел (о форматах см. в описании команды COLUMN)
NUM[WIDTH] <ширина> Задает стандартную ширину числовых столбцов.
PAGES[IZE] <к-во строк> Задает количество строк на странице. Если установить значение 0, подавляется выдача заголовков, колонтитулов и начальных пустых строк.
PAU[SE] ON | OFF | <текст> Позволяет управлять прокруткой при показе отчетов. При установке значения ON, утилита SQL*Plus приостанавливает работу перед выводом каждой страницы отчета, ожидая нажатия клавиши Enter. Можно также задать текст, который будет при этом выводиться.
RECSEP WR[APPED] | EA[CH] | OFF Устанавливает выдачу разделителей между записями (после перенесенных на несколько строк, после всех или никогда).
RECSEPCHAR <символ> Задает символ, из которого состоит разделитель записей. По умолчанию используется пробел. Разделитель записей представляет собой строку символов RECSEPCHAR, повторенных LINESIZE раз.
SERVEROUT[PUT] ON | OFF
[SIZE <к-во строк>]
[FOR[MAT] WRA[PPED] | WOR[D_WRAPPED] | TRU[NCATED]]
Управляет показом результатов хранимых процедур или анонимных блоков PL/SQL (выданных с помощью пакета DBMS_OUTPUT), размером буфера и переносом строк. Размер буфера должен быть в пределах от 2000 (стандартное значение) до 1000000.
SHOW[MODE] ON | OFF Управляет выдачей значений системных переменных при изменении. Если задано значение ON, при изменении выдается старое и новое значение.
SQLBL[ANKLINES] ON | OFF Разрешает или запрещает использование пустых строк в сценариях и командах SQL.
SQLC[ASE] MIX[ED] | LO[WER] | UP[PER] Управляет изменением регистра символов в команде перед выполнением. По умолчанию (MIXED) регистр символов остается неизменным. Иначе все символы, включая литералы в кавычках, переводятся в соответствующий регистр. Содержимое буфера SQL при этом не меняется.
SQLCO[NTINUE] <текст> Задает текст, выдаваемый утилитой SQL*Plus в качестве приглашения для продолжения ввода команды. По умолчанию используется символ >.
SQLN[UMBER] ON | OFF Управляет выдачей приглашения для ввода второй и последующих строк команды или блока PL/SQL. Если указано значение ON, в качестве приглашения выдается номер строки, если OFF - значение системной переменной SQLPROMPT.
SQLPRE[FIX] <символ> Задает префиксный символ SQL*Plus (по умолчанию - #). Если по ходу ввода команды или блока PL/SQL ввести в отдельной строке команду, начинающуюся префиксным символом, эта команда немедленно выполнится. Префиксный символ должен быть не алфавитно-цифровым.
SQLP[ROMPT] <текст> Задает приглашение командной строки SQL*Plus (по умолчанию - "SQL> ").
SQLT[ERMINATOR] <символ> | ON | OFF Задает символ, завершающий и посылающий на выполнение команду SQL. По умолчанию используется точка с запятой. Если задать значение OFF, то для завершения придется вводить пустую строку или BLOCKTERMINATOR, если установлена системная переменная SQLBLANKLINES.
SUF[FIX] <текст> Задает стандартное расширение командного файла. По умолчанию используется sql.
TAB ON | OFF Управляет использованием символа табуляции для форматирования результатов запросов в SQL*Plus.
TERM[OUT] ON | OFF Управляет выдачей результатов команд на экран. Если задать значение OFF, результат выполнения команд (кроме интерактивных) не будет выдаваться на экран, но будет записываться в файл, указанный в команде SPOOL.
TI[ME] ON | OFF Управляет выдачей текущего времени. При установке значения ON в приглашении выдается текущее время.
TIMI[NG] ON | OFF Управляет выдачей статистики о времени. При установке значения ON после выполнения команды или командного файла выдается время выполнения с точностью до сотых долей секунды.
TRIM[OUT] ON | OFF Управляет усечением хвостовых пробелов в выдаваемых строках. При установке значения ON (принято по умолчанию), хвостовые пробелы усекаются. Эта переменная учитывается только при выводе на экран.
TRIMS[POOL] ON | OFF Управляет усечением хвостовых пробелов в строках, сбрасываемых в файл или на принтер, аналогично TRIMOUT.
UND[ERLINE] ON | OFF | <символ> Задает символ, используемый для подчеркивания заголовков столбцов. По умолчанию используется символ дефиса. Значение OFF отключает подчеркивание заголовков.
VER[IFY] ON | OFF Управляет выдачей текста SQL-операторов и PL/SQL-блоков до и после замены подставляемых переменных значениями.
WRA[P] ON | OFF Управляет усечением слишком длинных строк результатов. По умолчанию, остатки строк переносятся на следующую строку. При задании значения OFF - усекаются.

Рассмотрим пример задания некоторых системных переменных SQL*Plus:

 
SQL> set time on 
16:43:39 SQL> set timing on 
16:43:43 SQL> set underline off 
16:43:55 SQL> set pagesize 1000 
16:44:02 SQL> set linesize 128 
16:44:12 SQL> select * from dept 
16:44:18   2  ; 
 
    DEPTNO DNAME          LOC 
        10 ACCOUNTING     NEW YORK 
        20 RESEARCH       DALLAS 
        30 SALES          CHICAGO 
        40 OPERATIONS     BOSTON 
        50 TRAINING       KIEV 
 
Затрач.время: 00:00:00.80 
16:44:20 SQL> 

Copyleft (no c) 2001-2004 В. Кравчук, OpenXS Initiative, Cоставление, перевод, дополнения, упражнения и примеры


Прежние выпуски

Все вышедшие выпуски рассылки можно найти на сайте рассылки. Там же реализована возможность поиска материалов по ключевым словам (с помощью Google. Работает.)

Интересные материалы на сайте автора

Обновленная (до версии 3.0 от 2 февраля 2004 года) версия перевода культовой статьи Эрика Реймонда "Как правильно задавать вопросы". Кто не читал или читал давно - (пере)читайте обязательно!

Заметно пополнилась также страница со списком замеченных опечаток и неточностей в моем переводе книги Тома Кайта "Expert one-on-one: Oracle". Не забывайте сообщать мне о всех "проблемах", которые вы обнаружили в этой книге.

Обратите внимание также на новые переводы страниц справочного руководства ОС FreeBSD.

В следующем выпуске

Завершающая часть руководства по SQL*Plus.

С наилучшими пожеланиями,

  В.К.



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное