Создание командных файлов в SQL*Plus

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

Набрав в приглашении команду edit (или ed), можно вызывать редактор по умолчанию (каковым в UNIX обычно является vi, а в Windows — Notepad (Блокнот)) и затем вводить желаемые команды и сохранять их файле, чтобы впоследствии выполнить их.

Имя редактора по умолчанию можно изменить, причем как в файле glogin.sql или login.sql, так и непосредственно после входа в SQL*Plus.

Сохранение содержимого буфера SQL в файл

Часто при написании довольно сложных сценариев бывает удобно сохранять содержимое буфера SQL в файле. Это позволяет извлекать этот файл и работать с ним позже или применять его для автоматизированного выполнения. Для сохранения содержимого буфера SQL служит команда SAVE. Ниже приведен простой пример:

SQL> SELECT username,process,sid,serial#
FROM v$session
WHERE status = 'ACTIVE'
.
SQL> SAVE status.sql
Created file status.sql
SQL>

После ввода кода SQL можно ввести в новой строке символ точки (.), который свидетельствует о завершении написания блока кода SQL. При вводе команды SAVE имя_файла все содержимое буфера SQL сохраняется в файле с указанным именем, каковым в данном случае является status.sql.

Обратите внимание, что вместе с командой SAVE, как было показано в предыдущем примере, по умолчанию используется параметр CREATE, указывающий, что требуется создать новый файл по имени status.sql. Однако если файл с именем status.sql уже существует, тогда команду SAVE нужно использовать с параметром REPLACE. Если же требуется добавить содержимое в существующий файл, тогда следует применять вместе с командой SAVE параметр APPEND. Ниже приведены соответствующие примеры: 

SQL> SAVE REPLACE status.sql
SQL> SAVE APPEND status.sql

Выполнение сценариев SQL в SQL*Plus

Выполнить сценарий SQL можно двумя способами.

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

В системах UNIX для указания SQL*Plus места, где следует искать сценарии, служит переменная ORACLE_PATH. Это позволяет размещать все стандартные сценарии SQL в одном месте и избавляться от необходимости указывать полный путь к ним всякий раз,когда требуется выполнить какой-то из них. Например, переменную ORACLE_PATH можно настроить следующим образом:

$ export $ORACLE_PATH=/u01/app/oracle/admin/dba/sql 

В системах Windows значение для переменной ORACLE_PATH устанавливается за счет редактирования системного реестра Windows.

В листинге ниже показан пример выполнения сценария status.sql, в котором предполагается, что сценарий расположен в том же каталоге, из которого был запущен сеанс SQL*Plus.


SQL> @status.sql
USERNAME    STATUS    PROCESS    SID      SERIAL#
-------------------------------------------------
            ACTIVE       2076     1          1
            ACTIVE       2080     2          1
            ACTIVE       2084     3          1
            ACTIVE       2088     4          1
            ACTIVE       2092     5          1
            ACTIVE       2096     6          1
SYSTEM      ACTIVE   1856:444     8         58
7 rows selected.
SQL> 

Сценарий status.sql в листинге 4.9 запускается без указания информации о пути,поскольку он находится в том же каталоге, из которого был запущен сеанс SQL*Plus.Запустить сценарий, расположенный в другом каталоге, можно путем ввода полного пути к тому месту, в котором он находится, например:

@/u01/app/oracle/admin/dba/sql/status.sql 

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


SQL> /
USERNAME  STATUS  PROCESS  SID  SERIAL#
------------------------------------------------------------
          ACTIVE     2076    1     1
. . .
7 rows selected.
SQL> 

В этом листинге вместо команды / можно также использовать команду RUN. В отличие от команды /, которая не предусматривает отображение выполняемого ею содержимого буфера SQL*Plus, RUN всегда выводит на экран содержимое сценария, который только что выполнила. Пример применения команды RUN приведен в листинге ниже.


SQL> RUN status.sql
1 SELECT username,status
2* FROM v$session
USERNAME                       STATUS
----------------------------- --------
                               ACTIVE
                               ACTIVE
                               ACTIVE
                               ACTIVE
                               ACTIVE
                               ACTIVE
SYSTEM                         ACTIVE
7 rows selected.
SQL> 


Внимание! При вызове сценария с помощью команды RUN перед выполнением содержимое SQL сначала отображается на экране. В случае применения команды / сценарий выполняется незамедлительно безо всякого предварительного отображения его SQL-содержимого. Из-за этого при использовании команды / необходимо соблюдать чрезвычайную осторожность, поскольку находящийся в буфере сценарий может оказаться совсем не тем, который требовалось выполнить.


Создание пакетного сценария в Windows

Для выполнения команд SQL*Plus в системе Windows можно создавать пакетные сценарии. Например, предположим, что имеется файл сценария по имени testscript.sql,который предоставляет информацию о пользователях базы данных, и требуется сделать так, чтобы этот сценарий выполнялся в определенное время. Для реализации такого поведения достаточно создать пакетный файл Windows, вызывающий файл сценария testscript.sql, а затем настроить график его выполнения с помощью специально предусмотренной для этого в Windows утилиты at.

Ниже приведен пример создания простого пакетного файла testbatch.bat со следующим содержимым (в котором предполагается, что вывод сценария testscript.sql должен записываться в файл output.txt):

sqlplus username/password@connect_identifier @C:\temp\testscript.sql
notepad.exe C:\temp\output.txt 

Этот пакетный файл будет запускать сеанс SQL*Plus, вызывать сценарий testscript.sql и помещать результаты его выполнения с файл output.txt с использованием исполняемого файла notepad.

 

Вас заинтересует / Intresting for you:

Использование комментариев в S...
Использование комментариев в S... 1916 просмотров Stas Belkov Tue, 21 Nov 2017, 13:18:46
Редактирование в SQL*Plus
Редактирование в SQL*Plus 3116 просмотров Ольга Потемкина Tue, 21 Nov 2017, 13:18:46
Задание имен файлов в Oracle S...
Задание имен файлов в Oracle S... 6834 просмотров Александров Попков Tue, 21 Nov 2017, 13:32:50
Команды DEFINE и UNDEFINE
Команды DEFINE и UNDEFINE 5473 просмотров Stas Belkov Tue, 21 Nov 2017, 13:18:46
Войдите чтобы комментировать