Использование SQL*Plus для написания и запуск кода PL/SQL в Oracle

Стас Белков

Стас Белков

Автор статьи. Известный специалист в мире IT. Консультант по продуктам и решениям Oracle. Практикующий программист и администратор баз данных. Подробнее.

Разработка кода PL/SQL в в SQL*Plus?Предок всех клиентских интерфейсов Oracle — приложение SQL*Plus — представляет собой интерпретатор для SQL и PL/SQL, работающий в режиме командной строки. Таким образом, приложение принимает от пользователя инструкции для доступа к базе данных, передает их серверу Oracle и отображает результаты на экране.

При всей примитивности пользовательского интерфейса SQL*Plus является одним из самых удобных средств выполнения кода SQL и PL/SQL в Oracle. Здесь нет замысловатых «примочек» и сложных меню, и лично мне это нравится. Когда я только начинал работать с Oracle (примерно в 1986 году), предшественник SQL*Plus гордо назывался UFI — User Friendly Interface (дружественный пользовательский интерфейс). И хотя в наши дни даже самая новая версия SQL*Plus вряд ли завоюет приз за дружественный интерфейс, она, по крайней мере, работает достаточно надежно.

В предыдущие годы компания Oracle предлагала версии приложения SQL*Plus с разными вариантами запуска:

  • Консольная программа. Программа выполняется из оболочки или командной строки (окружения, которое иногда называют консолью)1.
  • Программа с псевдографическим интерфейсом. Эта разновидность SQL*Plus доступна только в Microsoft Windows. Я называю этот интерфейс «псевдографическим», потому что он практически не отличается от интерфейса консольной программы, хотя и использует растровые шрифты. Учтите, что Oracle собирается свернуть поддержку данного продукта, и после выхода Oracle8i он фактически не обновлялся.
  • Запуск через iSQL*Plus. Программа выполняется из браузера машины, на которой работает HTTP-сервер Oracle и сервер iSQL*Plus.

Начиная с Oracle11g, Oracle поставляет только консольную версию программы (sqlplus. exe).

Главное окно консольной версии SQL*Plus показано на рис. 1.

Консольная версия SQL*Plus 

Рис. 1. Окно приложения SQL*Plus в консольном сеансе

Лично я предпочитаю консольную программу остальным по следующим причинам:

  • она быстрее перерисовывает экран, что важно при выполнении запросов с большим объемом выходных данных;

Oracle называет это «версией SQL*Plus с интерфейсом командной строки», но мы полагаем, что это определение не однозначно, поскольку интерфейс командной строки предоставляют два из трех способов реализации SQL*Plus.

  • у нее более полный журнал команд, вводившихся ранее в командной строке (по крайней мере на платформе Microsoft Windows);
  • в ней проще менять такие визуальные характеристики, как шрифт, цвет текста и размер буфера прокрутки;
  • она доступна практически на любой машине, на которой установлен сервер или клиентские средства Oracle.

 

Запуск SQL*Plus

Чтобы запустить консольную версию SQL*Plus, достаточно ввести команду sqlplus в приглашении операционной системы OS>:

OS> sqlplus

Этот способ работает как в операционных системах на базе Unix, так и в операционных системах Microsoft. SQL*Plus отображает начальную заставку, а затем запрашивает имя пользователя и пароль: 

SQL*Plus: Release 11.1.0.6.0 - Production on Fri Nov 7 10:28:26 2008
Copyright (c) 1982, 2007, Oracle. All rights reserved.
Enter user-name: bob
Enter password: swordfish
Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit
SQL>

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

OS> sqlplus bob/swordfish

Однако так поступать не рекомендуется, потому что в некоторых операционных системах пользователи могут просматривать аргументы вашей командной строки, что позволит им воспользоваться вашей учетной записью. Ключ /NOLOG в многопользовательских системах позволяет запустить SQL*Plus без подключения к базе данных. Имя пользователя и пароль задаются в команде CONNECT:

OS> sqlplus /nolog
SQL*Plus: Release 11.1.0.6.0 - Production on Fri Nov 7 10:28:26 2008
Copyright (c) 1982, 2007, Oracle. All rights reserved.
SQL> CONNECT bob/swordfish
SQL> Connected.

Если компьютер, на котором работает SQL*Plus, также содержит правильно сконфигурированное приложение Oracle Net1 и вы авторизованы администратором для подключения к удаленным базам данных (то есть серверам баз данных, работающим на других компьютерах), то сможете подключаться к ним из SQL*Plus. Для этого наряду с именем пользователя и паролем необходимо ввести идентификатор подключения Oracle Net, называемый также именем сервиса. Идентификатор подключения может выглядеть так: 

hqhr.WORLD 

Oracle Net — современное название продукта, который ранее назывался Net8 или SQL*Net.

Идентификатор вводится после имени пользователя и пароля, отделяясь от них символом «@»:

SQL> CONNECT bob/Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.
SQL> Connected. 

При запуске псевдографической версии SQL*Plus идентификационные данные вводятся в поле Host String (рис. 2.2). Если вы подключаетесь к серверу базы данных, работающему на локальной машине, оставьте поле пустым.

Рис. 2. Окно ввода идентификационных данных в SQL*Plus

После запуска SQL*Plus в программе можно делать следующее:

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

Рассмотрим поочередно каждую из перечисленных возможностей.

 

Выполнение SQL-инструкции

По умолчанию команды SQL в SQL*Plus завершаются символом «;» (точка с запятой), но вы можете сменить этот символ.

В консольной версии SQL*Plus запрос

SELECT isbn, author, title FROM books;

выдает результат, подобный тому, который показан на рис. 1.

 

Запуск программы на языке PL/SQL

Итак, приступаем. Введите в SQL*Plus небольшую программу на PL/SQL: 

SQL> BEGIN
2 DBMS_OUTPUT.PUT_LINE('У меня получилось!');
3 END;
4 /

После ее выполнения экран выглядит так:

PL/SQL procedure successfully completed.
SQL> 

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

Странно — наша программа должна была вызвать встроенную программу PL/SQL, которая выводит на экран заданный текст. Однако SQL*Plus по умолчанию почему-то подавляет такой вывод. Чтобы увидеть выводимую программой строку, необходимо выполнить специальную команду SQL*Plus — SERVEROUTPUT:

SQL> SET SERVEROUTPUT ON
SQL> BEGIN
2 DBMS_OUTPUT.PUT_LINE('У меня получилось!');
3 END;
4 /

И только теперь на экране появляется ожидаемая строка:

У меня получилось!
PL/SQL procedure successfully completed.
SQL> 

Обычно я включаю команду SERVEROUTPUT в свой файл запуска (см. раздел «Автоматическая загрузка пользовательского окружения при запуске»). В таком случае она остается активной до тех пор, пока не произойдет одно из следующих событий:

  • разрыв соединения, выход из системы или завершение сеанса с базой данных по иной причине;
  • явное выполнение команды SERVEROUTPUT с атрибутом OFF;
  • удаление состояния сеанса Oracle по вашему запросу или из-за ошибки компиляции;
  • в версиях до Oracle9i Database Release 2 — ввод новой команды CONNECT. В последующих версиях SQL*Plus автоматически заново обрабатывает файл запуска после каждой команды CONNECT.

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

  • Косая черта означает, что введенную команду следует выполнить независимо от того, была это команда SQL или PL/SQL.
  • Косая черта — это команда SQL*Plus; она не является элементом языка SQL или PL/SQL.
  • Она должна находиться в отдельной строке, не содержащей никаких других команд.
  • В большинстве версий SQL*Plus до Oracle9i косая черта, перед которой стоял один или несколько пробелов, не работала! Начиная с Oracle9i, среда SQL*Plus правильно интерпретирует начальные пробелы, то есть попросту игнорирует их. Завершающие пробелы игнорируются во всех версиях.

Для удобства SQL*Plus предлагает пользователям PL/SQL применять команду EXECUTE, которая позволяет не вводить команды BEGIN, END и завершающую косую черту. Таким образом, следующая строка эквивалентна приведенной выше программе: 

SQL> EXECUTE DBMS_OUTPUT.PUT_LINE('У меня получилось!')

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

SQL> EXEC dbms_output.put_line('У меня получилось!')

 

Запуск сценария

Практически любую команду, которая может выполняться в интерактивном режиме SQL*Plus, можно сохранить в файле для повторного выполнения. Для выполнения сценария проще всего воспользоваться командой SQL*Plus @1. Например, следующая конструкция выполняет все команды в файле abc.pkg: 

SQL> @abc.pkg

Файл сценария должен находиться в текущем каталоге (или быть указанным в переменной SQLPATH).

Если вы предпочитаете имена команд, используйте эквивалентную команду START

SQL> START abc.pkg

и вы получите идентичные результаты. В любом случае команда заставляет SQL*Plus выполнить следующие операции:

  1. Открыть файл с именем abc.pkg.
  2. Последовательно выполнить все команды SQL, PL/SQL и SQL*Plus, содержащиеся в указанном файле.
  3. Закрыть файл и вернуть управление в приглашение SQL*Plus (если в файле нет команды EXIT, выполнение которой завершает работу SQL*Plus).

Например:

SQL> @abc.pkg
Package created.
Package body created.
SQL>

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

SET ECHO ON.

В приведенном примере используется файл с расширением pkg. Если указать имя файла без расширения, произойдет следующее:

SQL> @abc
SP2-0310: unable to open file "abc.sql" 

Как видите, по умолчанию предполагается расширение sql. Здесь «SP2-0310» — код ошибки Oracle, а «SP2» означает, что ошибка относится к SQL*Plus. (За дополнительной информацией о сообщениях ошибок SQL*Plus обращайтесь к руководству Oracle «SQL*Plus User’s Guide and Reference».)

Команды START, @ и @@ доступны в небраузерной версии SQL *Plus. В iSQL*Plus для получения аналогичных результатов используются кнопки Browse и Load Script.

Написание программ PL/SQL для баз данных Oracle в в SQL*Plus? 

Что такое «текущий каталог»?

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

C:\BOB\FILES> sqlplus

все операции с файлами в SQL*Plus (такие, как открытие файла или запуск сценария) по умолчанию будут выполняться с файлами каталога C:\BOB\FILES. Если SQL*Plus запускается ярлыком или командой меню, то текущим каталогом будет каталог, который ассоциируется операционной системой с механизмом запуска. Как же сменить текущий каталог из SQL*Plus? Ответ зависит от версии. В консольной программе это просто невозможно: вы должны выйти из программы, изменить каталог средствами операционной системы и перезапустить SQL*Plus. В версии с графическим интерфейсом у команды меню FileOpen или FileSave имеется побочный эффект: она меняет текущий каталог. Если файл сценария находится в другом каталоге, то перед именем файла следует указать путь к нему: 

SQL> @/files/src/release/1.0/abc.pkg

С запуском сценария из другого каталога связан интересный вопрос: что, если файл abc.pkg расположен в другом каталоге и, в свою очередь, запускает другие сценарии? Например, он может содержать такие строки: 

REM имя файла: abc.pkg
@abc.pks
@abc.pkb

(Любая строка, начинающаяся с ключевого слова REM, является комментарием, и SQL*Plus ее игнорирует.) Предполагается, что сценарий abc.pkg будет вызывать сценарии abc.pks и abc.pkb. Но если информация о пути отсутствует, где же SQL*Plus будет их искать? 

C:\BOB\FILES> sqlplus
...
SQL> @/files/src/release/1.0/abc.pkg
SP2-0310: unable to open file "abc.pks"
SP2-0310: unable to open file "abc.pkb"

Оказывается, поиск выполняется только в каталоге, из которого был запущен исходный сценарий. Для решения данной проблемы существует команда @@. Она означает, что в качестве текущего каталога должен временно рассматриваться каталог, в котором находится выполняемый файл. Таким образом, команды запуска в сценарии abc.pkg следует записывать так: 

REM имя файла: abc.pkg
@@abc.pks
@@abc.pkb

Теперь результат выглядит иначе:

C:\BOB\FILES> sqlplus
...
SQL> @/files/src/release/1.0/abc.pkg
Package created.
Package body created.

...как, собственно, и было задумано.

Косая черта может использоваться в качестве разделителей каталогов как в Unix/Linux, так и в операционных системах Microsoft. Это упрощает перенос сценариев между операционными системами.

 

Другие задачи SQL*Plus

SQL*PLus поддерживает десятки команд, но мы остановимся лишь на некоторых из них, самых важных или особенно малопонятных для пользователя. Для более обстоятельного изучения продукта следует обратиться к книге Джонатана Генника Oracle SQL*Plus: The Definitive Guide (издательство O’Reilly), а за краткой справочной информацией — к книге Oracle SQL*Plus Pocket Reference того же автора.

 

Пользовательские установки

Многие аспекты поведения SQL*Plus могут быть изменены при помощи встроенных переменных и параметров. Один из примеров такого рода уже встречался нам при применении выражения SET SERVEROUTPUT. Команда SQL*Plus SET также позволяет задавать многие другие настройки. Так, выражение SET SUFFIX изменяет используемое по умолчанию расширение файла, а SET LINESIZE n — задает максимальное количество символов в строке (символы, не помещающиеся в строке, переносятся в следующую). Сводка всех SET-установок текущего сеанса выводится командой 

SQL> SHOW ALL

Приложение SQL*Plus также позволяет создавать собственные переменные в памяти и задавать специальные переменные, посредством которых можно управлять его настройками. Переменные SQL*Plus делятся на два вида: DEFINE и переменные привязки. Значение DEFINE-переменной задается командой DEFINE

SQL> DEFINE x = "ответ 42"

Чтобы просмотреть значение x, введите следующую команду:

SQL> DEFINE x
DEFINE X = "ответ 42" (CHAR) 

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

SELECT '&x' FROM DUAL;

Переменная привязки объявляется командой VARIABLE. В дальнейшем ее можно будет использовать в PL/SQL и вывести значение на экран командой SQL*Plus PRINT:

SQL> VARIABLE x VARCHAR2(10)
SQL> BEGIN
2 :x := 'hullo';
3 END;
4 /
PL/SQL procedure successfully completed.
SQL> PRINT :x
X
--------------------------------
hullo

Ситуация немного запутывается, потому что у нас теперь две разные переменные x: одна определяется командой DEFINE, а другая — командой VARIABLE

SQL> SELECT :x, '&x' FROM DUAL;
old 1: SELECT :x, '&x' FROM DUAL
new 1: SELECT :x, 'ответ 42' FROM DUAL
:X                               'ОТВЕТ42'
-------------------------------- ----------------
hullo                            ответ 42

Запомните, что DEFINE-переменные всегда представляют собой символьные строки, которые SQL*Plus заменяет их текущими значениями, а VARIABLE-переменные используются в SQL и PL/SQL как настоящие переменные привязки.

 

Сохранение результатов в файле

Выходные данные сеанса SQL*Plus часто требуется сохранить в файле — например, если вы строите отчет, или хотите сохранить сводку своих действий на будущее, или динамически генерируете команды для последующего выполнения. Все эти задачи легко решаются в SQL*Plus командой SPOOL:

SQL> SPOOL report
SQL> @run_report
...выходные данные выводятся на экран и записываются в файл report.lst...
SQL> SPOOL OFF

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

SQL> SPOOL report.txt 

Вторая команда SPOOL приказывает SQL*Plus прекратить сохранение результатов и закрыть файл.

 

Выход из SQL*Plus

Чтобы выйти из SQL*Plus и вернуться в операционную систему, выполните команду EXIT

SQL> EXIT 

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

А что произойдет, если в ходе сеанса вы внесли изменения в данные некоторых таблиц, а затем вышли из SQL*Plus без явного завершения транзакции? По умолчанию SQL*Plus принудительно закрепляет незавершенные транзакции, если только сеанс не завершился с ошибкой SQL или если вы не выполнили команду SQL*Plus WHENEVER SQLERROR EXIT ROLLBACK (см. далее раздел «Обработка ошибок в SQL*Plus»).

Чтобы разорвать подключение к базе данных, но остаться в SQL*Plus, следует выполнить команду CONNECT. Результат ее выполнения выглядит примерно так: 

SQL> DISCONNECT
Disconnected from Personal Oracle Database 10g Release 10.1.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL>

Для смены подключений команда DISCONNECT не обязательна — достаточно ввести команду CONNECT, и SQL*Plus автоматически разорвет первое подключение перед созданием второго. Тем не менее команда DISCONNECT вовсе не лишняя — при использовании средств аутентификации операционной системы сценарий может автоматически восстановить подключение... к чужой учетной записи. Я видел подобные примеры.

 

Редактирование инструкции

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

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

Команда EDIT сохраняет буфер в файле, временно приостанавливает выполнение SQL*Plus и передает управление редактору:

SQL> EDIT

По умолчанию файл будет сохранен под именем afiedt.buf, но вместо этого имени можно выбрать другое (команда SET EDITFILE). Если же вы хотите отредактировать существующий файл, укажите его имя в качестве аргумента EDIT

SQL> EDIT abc.pkg 

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

По умолчанию Oracle использует следующие внешние редакторы:

  • ed в Unix, Linux и других системах этого семейства;
  • Блокнот в системах Microsoft Windows.

Хотя выбор редактора по умолчанию жестко запрограммирован в исполняемом файле sqlplus, его легко изменить, присвоив переменной_EDITOR другое значение. Например, я часто использую следующую команду: 

SQL> DEFINE _EDITOR = /bin/vi 

Здесь /bin/vi — полный путь к редактору, хорошо известному в среде «технарей». Я рекомендую задавать полный путь к редактору по соображениям безопасности.

Если же вы хотите работать со встроенным строковым редактором SQL*Plus (иногда это в самом деле бывает удобно), вам необходимо знать следующие команды:

  • L — вывод последней команды.
  • n — сделать текущей строкой n-ю строку команды.
  • DEL — удалить текущую строку.
  • C /old/new/ — заменить первое вхождение old в текущей строке на new (разделителем может быть произвольный символ, в данном случае это косая черта).
  • n text — сделать text текущим текстом строки n.
  • I — вставить строку после текущей. Чтобы вставить новую строку перед первой, используйте команду с нулевым номером строки (например, 0 text).

Автоматическая загрузка пользовательского окружения при запуске

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

  1. ищет в корневом каталоге Oracle файл sqlplus/admin/glogin.sql и выполняет содержащиеся в нем команды (этот «глобальный» сценарий реализуется независимо от того, кто запустил SQL*Plus из корневого каталога Oracle и какой каталог был при этом текущим);
  2. находит и выполняет файл login.sql в текущем каталоге, если он существует. Начальный сценарий может содержать те же типы команд, что и любой другой сценарий SQL*Plus: команды SET, SQL-инструкции, команды форматирования столбцов и т. д.

Ни один из файлов не является обязательным. Если присутствуют оба файла, то сначала выполняется glogin.sql, а затем login.sql; в случае конфликта настроек или переменных преимущество получают установки последнего файла, login.sql.

А если не существует, но переменная SQLPATH содержит один или несколько каталогов, разделенных двоеточиями, SQL*Plus просматривает эти каталоги и выполняет первый обнаруженный файл login.sql.

Несколько полезных установок в файле login.sql: 

REM Количество строк выходных данных инструкции SELECT
REM перед повторным выводом заголовков
SET PAGESIZE 999
REM Ширина выводимой строки в символах
SET LINESIZE 132
REM Включение вывода сообщений DBMS_OUTPUT.
REM В версиях, предшествующих Oracle Database 10g Release 2,
REM вместо UNLIMITED следует использовать значение 1000000.
SET SERVEROUTPUT ON SIZE UNLIMITED FORMAT WRAPPED
REM Замена внешнего текстового редактора
DEFINE _EDITOR = /usr/local/bin/vim
REM Форматирование столбцов, извлекаемых из словаря данных
COLUMN segment_name FORMAT A30 WORD_WRAP
COLUMN object_name FORMAT A30 WORD_WRAP
REM Настройка приглашения (работает в SQL*Plus Oracle9i и выше)
SET SQLPROMPT "_USER'@'_CONNECT_IDENTIFIER > " 

 

Обработка ошибок в SQL*Plus

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

Если ошибка содержится в команде SQL или PL/SQL, SQL*Plus по умолчанию сообщает о ней и продолжает работу. Это удобно в интерактивном режиме, но при выполнении сценария желательно, чтобы при возникновении ошибки работа SQL*Plus прерывалась. Для этого применяется команда 

SQL> WHENEVER SQLERROR EXIT SQL.SQLCODE 

SQL*Plus прекратит работу, если после выполнения команды сервер базы данных в ответ на команду SQL или PL/SQL вернет сообщение об ошибке. Часть приведенной выше команды, SQL.SQLCODE, означает, что при завершении работы SQL*Plus установит ненулевой код завершения, значение которого можно проверить на стороне вызова. В противном случае SQL*Plus всегда завершается с кодом 0, что может быть неверно истолковано как успешное выполнение сценария. Другая форма указанной команды: 

SQL> WHENEVER SQLERROR SQL.SQLCODE EXIT ROLLBACK

означает, что перед завершением SQL*Plus будет произведен откат всех несохраненных изменений данных.

 

Достоинства и недостатки SQL*Plus

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

  • С помощью SQL*Plus можно запускать пакетные программы, задавая в командной строке аргументы и обращаясь к ним по   ссылкам вида &1 (первый аргумент), &2 (второй аргумент) и т. д.

Например, с помощью системной переменной $? в Unix и %ERRORLEVEL% в Microsoft Windows.

  • SQL*Plus обеспечивает полную поддержку всех команд SQL и PL/SQL. Это обычно имеет значение при использовании специфических возможностей Oracle. В средах сторонних разработчиков отдельные элементы указанных языков могут поддерживаться не в полном объеме. Например, некоторые из них до сих пор не поддерживают объектные типы Oracle, введенные несколько лет назад.
  • SQL*Plus работает на том же оборудовании и в тех же операционных системах, что и сервер Oracle.

Как и любые другие инструментальные средства, SQL*Plus имеет свои недостатки:

  • В консольных версиях SQL*Plus буфер команд содержит только последнюю из ранее использовавшихся команд. Журнала команд эта программа не ведет.
  • SQL*Plus не имеет таких возможностей, характерных для современных интерпретаторов команд, как автоматическое завершение ключевых слов и подсказки о доступных объектах базы данных, появляющиеся при вводе команд.
  • Электронная справка содержит минимальную информацию о наборе команд SQL*Plus. (Для получения справки по конкретной команде используется команда HELP.)
  • После запуска SQL*Plus сменить текущий каталог невозможно, что довольно неудобно, если вы часто открываете и сохраняете сценарии и при этом не хотите постоянно указывать полный путь к файлу. Если вы обнаружили, что находитесь не в том каталоге, вам придется выйти из SQL*Plus, сменить каталог и снова запустить программу.
  • Если не использовать механизм SQLPATH, который я считаю потенциально опасным, SQL*Plus ищет файл login.sql только в каталоге запуска; было бы лучше, если бы программа продолжала поиск файла в домашнем каталоге стартового сценария.

Итак, SQL*Plus не отличается удобством в работе и изысканностью интерфейса. Но данное приложение используется повсеместно, работает надежно и наверняка будет поддерживаться до тех пор, пока существует Oracle Corporation.

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

Встроенные методы коллекций PL...
Встроенные методы коллекций PL... 14837 просмотров sepia Tue, 29 Oct 2019, 09:54:01
Управление приложениями PL/SQL...
Управление приложениями PL/SQL... 4651 просмотров Stas Belkov Thu, 16 Jul 2020, 06:20:48
Основы языка PL/SQL: использов...
Основы языка PL/SQL: использов... 4700 просмотров Ирина Светлова Tue, 06 Feb 2018, 14:04:03
Работа с числами в PL/SQL на п...
Работа с числами в PL/SQL на п... 45194 просмотров Antoniy Mon, 28 May 2018, 16:45:11
Войдите чтобы комментировать

Oracle_Admin аватар
Oracle_Admin ответил в теме #9462 4 года 6 мес. назад
Хорошее руководство. Спасибо.