Предок всех клиентских интерфейсов 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.
Рис. 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 выполнить следующие операции:
- Открыть файл с именем abc.pkg.
- Последовательно выполнить все команды SQL, PL/SQL и SQL*Plus, содержащиеся в указанном файле.
- Закрыть файл и вернуть управление в приглашение 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.
Что такое «текущий каталог»?
При запуске SQL*Plus из командной строки операционной системы SQL*Plus использует текущий каталог операционной системы в качестве своего текущего каталога. Иначе говоря, если запустить SQL*Plus командой
C:\BOB\FILES> sqlplus
все операции с файлами в SQL*Plus (такие, как открытие файла или запуск сценария) по умолчанию будут выполняться с файлами каталога C:\BOB\FILES. Если SQL*Plus запускается ярлыком или командой меню, то текущим каталогом будет каталог, который ассоциируется операционной системой с механизмом запуска. Как же сменить текущий каталог из SQL*Plus? Ответ зависит от версии. В консольной программе это просто невозможно: вы должны выйти из программы, изменить каталог средствами операционной системы и перезапустить SQL*Plus. В версии с графическим интерфейсом у команды меню FileOpen или FileSave имеется побочный эффект: она меняет текущий каталог. Если файл сценария находится в другом каталоге, то перед именем файла следует указать путь к нему:
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 при запуске выполняет две основные операции:
- ищет в корневом каталоге Oracle файл sqlplus/admin/glogin.sql и выполняет содержащиеся в нем команды (этот «глобальный» сценарий реализуется независимо от того, кто запустил SQL*Plus из корневого каталога Oracle и какой каталог был при этом текущим);
- находит и выполняет файл 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.