Основные “рабочие” команды SQL*Plus

Основные команды SQL*PlusДля работы в SQL*Plus, как для выполнения простых команд, так и для разработки сценариев по сбору информации из базы данных, необходимо уметь пользоваться командами SQL*Plus двух основных видов. К первому относятся команды, которые на самом деле что-то делают и потому могут называться рабочими (как, например, RECOVER, которая выполняет восстановление базы данных), а ко второму — команды, которые позволяют получать удобный для прочтения вывод от запросов и потому называются командами форматирования.

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


Оглавление статьи[Показать]


 

Команда SQLPROMPT

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

Для настройки приглашения SQL*Plus так, чтобы в нем отображалось имя базы данных, служит приведенная ниже команда, в которой используется специальная предопределенная переменная _CONNECT_IDENTIFIER (предопределенные переменные подробно рассматриваются в разделе “Предопределенные переменные SQL*Plus” далее в главе): 

SQL> SET SQLPROMPT '_CONNECT_IDENTIFIER > '
nick >

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

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

SQL> SET SQLPROMPT "_USER > "
APPOWNER >

Применив одновременно переменные _USER и _CONNECT_IDENTIFIER, можно сделать так, чтобы в приглашении отображалось и имя базы данных, и имя текущего пользователя:

SQL> SET SQLPROMPT "_USER'@'_CONNECT_IDENTIFIER > "
APPOWNER@nick >

Используя переменные _USER и _PRIVILEGE, в приглашении можно отображать не только имя текущего пользователя, но и привилегии, которыми он обладает: 

SQL> SET SQLPROMPT "_USER _PRIVILEGE> "
SYS AS SYSDBA>

С помощью переменных _USER, _DATE и _CONNECT_IDENTIFIER в приглашении можно отобразить имя пользователя, текущую дату и имя базы данных:

SQL> SET SQLPROMPT "_USER 'on' _DATE 'at' _CONNECT_IDENTIFIER > "
SYS on 20-JUN-09 at nick> 

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

 

Команда DESCRIBE

Команда DESCRIBE описывает или выводит список столбцов таблицы вместе с их спецификациями. Кроме того, она позволяет получать описание процедур или пакетов Oracle. Эта команда чрезвычайно полезна при выполнении рутинных обязанностей администратора баз данных. Если, например, нет уверенности в том, какой столбец нужно выбрать в определенной таблице, но точно известно, к какой именно таблице следует выполнить запрос, с помощью команды DESCRIBE можно получить список всех столбцов, которые имеются в данной таблице. Поскольку команда DESCRIBE может применяться даже в отношении метаданных (словаря данных), с ее помощью можно также очень легко знакомиться с информацией о таблицах и столбцах и их применении, которая является критически важной для работы с базой данных.

В листинге ниже показано, как команда DESCRIBE позволяет отображать столбцы и типы столбцов таблицы. 


SQL> DESCRIBE employees
Name                     Null?            Type
---------------------- -------- ---------------------
EMPLOYEE_ID            NOT NULL          NUMBER(6)
FIRST_NAME                            VARCHAR2(20)
LAST_NAME              NOT NULL       VARCHAR2(25)
EMAIL                  NOT NULL       VARCHAR2(25)
PHONE_NUMBER                          VARCHAR2(20)
HIRE_DATE              NOT NULL               DATE
JOB_ID                 NOT NULL       VARCHAR2(10)
SALARY                                 NUMBER(8,2)
COMMISSION_PCT                         NUMBER(2,2)
MANAGER_ID                               NUMBER(6)
DEPARTMENT_ID                            NUMBER(4)
SQL>

 

Команда HOST

Команда HOST позволяет выполнять в SQL*Plus команды операционной системы.Например, может возникнуть необходимость посмотреть, существует ли некий файл в определенном каталоге, или выдать команды cp или tar на уровне UNIX, а затем вернуться в сеанс SQL*Plus и возобновить взаимодействие с базой данных Oracle.

Ниже приведен пример применения команды HOST

SQL> HOST cp /u01/app/oracle/new.sql /tmp

В этом примере команда HOST помогает скопировать файл new.sql из указанного каталога в каталог tmp.

С помощью команды HOST можно выполнять практически все те же команды, которые доступны на уровне операционной системы. Слово HOST можно заменять восклицательным знаком (!): 

SQL> ! cp /u01/app/oracle/new.sql /tmp

На заметку! В случае ввода команды HOST без параметров вы попадаете в каталог операционной системы, из которого изначально запускали сеанс SQL*Plus.


По завершении работы с операционной системой достаточно ввести в командной строке exit и на экране снова появится приглашение покинутого ранее сеанса SQL*Plus.

Например: 

SQL> HOST
$ exit
SQL> 

 

Команда SPOOL

Команда SPOOL позволяет сохранять вывод одного и более SQL-операторов в файлах операционной системы, как в UNIX, так и в Windows: 

SQL> SET LINESIZE 180
SQL> SPOOL employee.lst
SQL> SELECT emp_id, last_name, salary, manager FROM employee;
SQL> SPOOL OFF; 

По умолчанию создаваемые этой командой буферные (spooled) текстовые файлы сохраняются как имя_файла.lst. Хотя по умолчанию принято сохранять вывод в файле,его также можно отправлять и на принтер. Буферизация файлов является очень полезным приемом при использовании SQL для оказания помощи в написании SQL-сценариев, и некоторые примеры его применения можно найти в приложении.

С помощью команды SPOOL можно добавлять данные в существующий буферный файл, а также полностью заменять его (по умолчанию происходит замена). Ниже приведен весь синтаксис этой команды: 

SPOOL { имя_файла[.расширение] [CRE[ATE]|REP[LACE]|APP[END]]| OFF | OUT }

Ниже описаны параметры команды SPOOL.

  • имя_файла. Специфицирует имя буферного файла. Расширение может выглядеть по-разному, но в большинстве случаев используется предлагаемое по умолчанию расширение .lst.
  • CREATE. Указывает, что требуется создать новый файл.
  • REPLACE. Указывает на необходимость замены содержимого существующего файла или создания нового файла, если он не существует. Это поведение по умолчанию.
  • APPEND. Указывает на необходимость добавить содержимое буфера в конец указанного файла.
  • OFF. Указывает, что требуется остановить процесс буферизации.
  • OUT: Указывает, что требуется остановить процесс буферизации и отправить файл на принтер по умолчанию. В некоторых операционных системах этот параметр не поддерживается.

У команды SPOOL имеет множество способов применения. Например, она легко экспортируется для перехвата результатов оператора SELECT. Перед этим, однако, должен обязательно задаваться формат вывода путем определения значений для переменных HEADING, FEEDBACK и LINESIZE. Ниже приведен пример:

SQL> SPOOL /u01/app/oracle/data/employees.txt;
SQL> SELECT * FROM hr.employees;
SQL> SPOOL OFF; 

В этом примере файл employees.txt служит для перехвата всех данных из таблицы HR.EMPLOYEES. Далее его можно будет использовать для загрузки данных в другую таблицу с помощью утилиты SQL*Loader.

 

Команды ACCEPT и PROMPT

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

Что касается команды PROMPT, то она полезна при создании интерактивных сценариев. Она умеет отправлять от SQL*Plus на экран сообщение или просто пустую строку,и обычно применяется для получения входных данных от пользователя или вывода комментариев. Например, включение в сценарий строки PROMPT "Тестирование" приведет к получению следующего вывода: 

SQL> "Тестирование"

Команды ACCEPT и PROMPT в SQL-сценарии обычно используются вместе и служат,как правило, для запроса у пользователя входных данных и сохранения этих данных в переменных для дальнейшей работы с ними в программе. Ниже приведен пример, иллюстрирующий использование этих команд:

SQL> PROMPT 'Пожалуйста, введите свою фамилию'
SQL> ACCEPT lastname CHAR FORMAT a20 alapati

 

Команда EXECUTE

При использовании сценариев, которые вызывают PL/SQL-код в форме процедур и пакетов, для фактического запуска отдельных процедур в пакете необходимо применять команду EXECUTE. Ниже приведен пример:

SQL> EXECUTE add_data
PL/SQL procedure successfully completed
SQL>

Обратите внимание, что для выполнения процедуры или функции можно специфицировать как ключевое слово EXECUTE, так и ключевое слово EXEC.

 

Команда PAUSE

Часто бывает так, что сценарии при выполнении генерируют вывод, который не умещается на экране. Этот вывод быстро пролетает перед глазами на экране и исчезает до того, как его удается прочитать. Разумеется, можно воспользоваться командой SPOOL для перехвата всего вывода целиком, но делать так постоянно не выгодно, поскольку тогда придется тратить на создание и прочтение файлов с выводом сценариев целый день. Поэтому лучше использовать другую предлагаемую в SQL*Plus команду, а именно — PAUSE, которая позволяет приостанавливаться после отображения каждого целого экрана вывода. Переход к следующему экрану вывода осуществляется просто нажатием клавиши <Enter>.

Приведенный ниже пример демонстрирует использование команды PAUSE для замедления отображения вывода на экране терминала:

SQL> SHOW PAUSE
PAUSE is OFF
SQL> SET PAUSE ON
SQL> SHOW PAUSE
PAUSE is ON and set to ""

После настройки команды PAUSE вывод больше не будет быстро проскакивать на экране при каждом выполнении SQL-команды. Вместо этого SQL*Plus будет отображать один экран вывода, и ожидать нажатия клавиши <Enter>. При запуске запросов с командой PAUSE для просмотра первого экрана вывода тоже необходимо нажимать клавишу <Enter>.

 

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

Использование SQL*Plus и Oracl...
Использование SQL*Plus и Oracl... 13338 просмотров aleksandr Tue, 21 Nov 2017, 13:19:25
Административные команды в SQL...
Административные команды в SQL... 4140 просмотров Antoniy Tue, 21 Nov 2017, 13:18:46
Фиксация изменений DML-команд ...
Фиксация изменений DML-команд ... 2030 просмотров Дэйзи ак-Макарова Tue, 21 Nov 2017, 13:18:46
Команды SQL*Plus и SQL
Команды SQL*Plus и SQL 1768 просмотров Дэн Tue, 21 Nov 2017, 13:19:25
Войдите чтобы комментировать

Oracle_Admin аватар
Oracle_Admin ответил в теме #9044 5 года 10 мес. назад
Команды действительно "ходовые". Начинать программировать с SQL*Plus начинал наверное каждый кодер под базы данных Oracle, да?