Вместо того чтобы применять одну команду каждый раз, можно выполнить сразу несколько команд вместе, записав их в отдельный файл и затем запустив его. При таком подходе все добавленные в файл команды 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.