SQL Plus: Создание и выполнение сценариев - Основные команды SQL*Plus

ОГЛАВЛЕНИЕ

Основные команды SQL*Plus

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

Некоторые команды, например, блоки PL/SQL, могут занимать несколько строк. Тогда SQL*Plus выдает дополнительные приглашения с номером строки, например, "2> ".

В командной строке SQL*Plus можно вводить команды трех видов:

  • SQL-операторы для работы с информацией в базе данных;
  • блоки PL/SQL для работы с информацией в базе данных;
  • команды SQL*Plus для форматирования результатов запроса, установки опций, редактирования команд и т.д.

От вида команды зависит способ продолжения ее на следующей строке, завершения и выполнения.

Выполнение команд

Буфер SQL

Последнюю введенную команду (SQL-оператор или блок PL/SQL) SQL*Plus хранит в области, которая называется буфер SQL . Оператор или блок остается в этом буфере пока не будет введен новый. В буфер SQL не попадает точка с запятой или косая, завершающая оператор или блок, соответственно. Содержимое буфера SQL можно редактировать и выполнять повторно.

Для повторного выполнения содержимого буфера SQL используется команда RUN или косая черта (/). Команда RUN выдает содержимое буфера в стандартный выходной поток, а затем выполняет. Косая черта вызывает просто выполнение команды из буфера.

Выполнение операторов SQL

Оператор SQL можно завершить тремя способами:

  • точкой с запятой (;)
  • строкой, содержащей только косую черту (/)
  • пустой строкой

Точка с запятой в конце строки означает выполнение оператора. Утилита SQL*Plus выполняет оператор и запоминает его в буфере SQL. Этот символ является признаком завершения команды и после него нельзя вводить комментарий.

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

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

Выполнение блоков PL/SQL

Для ввода блоков PL/SQL необходимо работать в режиме PL/SQL. Утилита SQL*Plus переходит в это режим, если:

  • в командной строке введено ключевое слово DECLARE или BEGIN;
  • введена одна из команд SQL, создающая хранимую программную единицу, например, CREATE PROCEDURE.

Утилита SQL*Plus обрабатывает блоки PL/SQL так же, как и операторы SQL, за исключением точки с запятой и пустой строки. В режиме PL/SQL их ввод не вызывает выполнения или завершения команды. Чтобы завершить и выполнить блок PL/SQL, необходимо ввести строку с единственным символом - косой чертой (/). Чтобы завершить ввод блока и просто поместить его в буфер SQL, не выполняя, введите строку с единственным символом точка (.).

Выполнение команд SQL*Plus

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

Если необходимо ввести длинную команду SQL*Plus, ее можно перенести на следующую строку. Для этого в конце строки необходимо ввести дефис (-) и только затем нажать клавишу Enter. Будет выдано приглашение, и ввод команды можно будет продолжить.

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

Прекращение команды по ходу работы

Для прекращения долго выполняющейся команды по ходу работы, необходимо ввести символ прерывания , обычно, Ctrl+C. При этом SQL*Plus прекратит выдачу результатов команды и выдаст приглашение.

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

Получение информации о времени выполнения команды

Для сбора и выдачи данных о вычислительных ресурсах, использованных для выполнения одной или нескольких команд или блоков, предназначена команда TIMING. Она имеет следующий синтаксис:

<команда TIMING> ::=
TIMI[NG] <команда таймера>
<команда таймера> ::=
START [<имя таймера>] / SHOW / STOP

Назначение команд таймера описано в табл. 3.

Таблица 3. Команды таймера SQL*Plus.

Команда  Назначение 
START  Запускает таймер и дает ему указанное имя. Можно использовать несколько активных таймеров, запуская дополнительные с помощью команды START прежде, чем останавливать исходный. Последний запущенный таймер становится текущим.
SHOW  Выдает имя и данные (время работы) текущего таймера.
STOP  Выдает имя и данные (время работы) текущего таймера, а затем останавливает и удаляет таймер. Если активно несколько таймеров, следующий, предпоследний по времени запуска, становится текущим.

Команда TIMING без параметров выдает количество активных таймеров.

Рассмотрим пример использования команды TIMING:

SQL> timing start first
SQL> select * from dept;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SQL> timing show
таймер для: first
Затрач.время: 00:00:16.74
SQL> timing stop
таймер для: first
Затрач.время: 00:00:21.20
SQL>

Для удаления всех таймеров используется команда CLEAR TIMING.

Можно также автоматически выдавать время работы каждой команды помощью установки SET AUTOTRACE. Подробнее см. далее в разделе "Настройка среды SQL*Plus".

Выполнение команд базовой операционной системы

Из командной строки SQL*Plus можно выполнять любые команды базовой операционной системы. Для этого используется команда HOST, за которой идет командная строка для операционной системы.

Команду HOST можно сокращать до первых двух букв. Если команда введена без параметров, открывается сеанс стандартного командного интерпретатора операционной системы. В нем можно выполнять любое количество команд. Для выхода из командного интерпретатора UNIX достаточно выполнить команду EXIT или ввести Ctrl+D.

Доступ к команде HOST можно запретить, запуская утилиту SQL*Plus с любым уровнем ограничения.

Получение оперативной справки

Утилита SQL*Plus позволяет получить справочную информацию по своим командам, а также основным объектам схем.

Команда HELP

Для получения справки по командам SQL*Plus используется команда HELP. Она может вызываться с одним необязательным аргументом. Если аргумент не указан, выдается справка по справочной системе SQL*Plus. Если аргумент указан, то выдается справка по всем командам SQL*Plus, начинающимся с указанного аргумента. Например, команда HELP EX выдает сначала справку по команде EXECUTE, а затем - по команде EXIT.

Команда HELP INDEX выдает список всех команд SQL*Plus. Команда HELP TOPICS выдает список команд вместе с однострочным описанием назначения.

Команда DESCRIBE

Команда DESCRIBE позволяет получить описание таблицы или представления, а также спецификацию типа, пакета, функции или процедуры:

<команда DESCRIBE> ::=
DESC[RIBE] [[<схема>.]<объект>[@<строка связи>]]

Описание таблицы, представления или синонима содержит следующую информацию:

  • имя каждого столбца;
  • допускаются ли в столбце значение NULL;
  • типы данных столбцов;
  • длина или точность (и масштаб, для числовых) столбцов.

Например:

SQL> desc emp
 Имя                                       Пусто?   Тип
 ----------------------------------------- -------- --------------------
 EMPNO                                     NOT NULL NUMBER(4)
 ENAME                                              VARCHAR2(10)
 JOB                                                VARCHAR2(9)
 MGR                                                NUMBER(4)
 HIREDATE                                           DATE
 SAL                                                NUMBER(7,2)
 COMM                                               NUMBER(7,2)
 DEPTNO                                             NUMBER(2)

Команда DESCRIBE позволяет описывать объекты рекурсивно, причем глубина задается командой SET DESCRIBE. Можно также выдавать номер строки и сдвигать имя столбца или атрибута, если объект содержит несколько объектных типов.

Длину выдаваемой строки описания можно контролировать с помощью команды SET LINESIZE.

Описание функций и процедур содержит следующую информацию:

  • тип программной единицы (процедура или функция);
  • имя функции или процедуры;
  • тип возвращаемого значения для функций;
  • имена, типы, режим передачи и стандартные значения аргументов.

Например:

PROCEDURE sys.subptxt
 Имя Аргумента                  Тип                     В/Из   По-умолч
 ------------------------------ ----------------------- ------ --------
 NAME                           VARCHAR2                IN
 SUBNAME                        VARCHAR2                IN
 USR                            VARCHAR2                IN
 TXT                            VARCHAR2                IN/OUT