|
|
|||||||||||||||||||||||||||||
|
Утилита SQL*Plus. Создание и выполнение сценариев.Часть 1Источник: lncom
Назначение SQL*PlusУтилита SQL*Plus позволяет выполнять команды SQL и блоки PL/SQL, а также решать ряд других задач. С помощью SQL*Plus можно:
Базовые понятияПри работе с SQL*Plus используются следующие базовые понятия:
Расширенные формулы Бэкуса-НаураПри описании синтаксиса команд SQL*Plus использованы расширенные формулы Бэкуса- Наура (БНФ). Расширенные БНФ являются способом сокращенной записи контекстно- свободных грамматик. Нетерминальные символы (определяемые понятия, конструкции и команды SQL*Plus) взяты в угловые скобки. Терминальные символы выделены жирным шрифтом. Учтите, что команды SQL*Plus не зависят от регистра терминальных символов. Метасимвол ::= означает "по определению есть". Метасимвол / обозначает, что данная формула является сокращенной записью нескольких формул с одинаковыми левыми частями и различными цепочками в правой части (т.е. возможен один из разделенных этим символом вариантов). Пара метасимволов [ ] используется для обозначения того, что находящаяся между ними цепочка может содержаться, а может и не содержаться в правой части формулы. Пара метасимволов { } означает, что содержащаяся между ними цепочка может повторяться ноль или более раз. Приоритет метасимвола / выше, чем у пар [ ] и { }. Запуск SQL*Plus и выход из негоДля запуска утилиты SQL*Plus используется команда операционной системы, обычно - sqlplus. Запуск выполняется из командного интерпретатора или окна командной строки. В версиях для операционных систем Microsoft использовались другие имена команды для вызова SQL*Plus, например, sqlplus30. В настоящее время (начиная с версии 8.1.5) в этих операционных системах имеется две версии этой утилиты: sqlplus, работающая в окне командной строки, и оконная версия, sqlplusw. Общий синтаксис вызова SQL*Plus имеет вид:
где:
Опции командной строкиКак следует из синтаксиса, при вызове SQL*Plus можно указать ряд опций. Они кратко описаны в табл. 1. Таблица 1. Опции командной строки утилиты SQL*Plus.
Таблица 2. Команды, отключаемые уровнями ограничения.
Регистрационная информацияПри запуске SQL*Plus необходимо ввести регистрационную информацию . Если эта информация не указана, но указан начальный сценарий , предполагается, что регистрационная информация указана в первой строке сценария. Если регистрационная информация не указана ни в командной строке, ни в начальном сценарии, SQL*Plus запросит ее. Если указано имя пользователя и не указан пароль, SQL*Plus запросит только пароль. При установке опции SILENT, приглашения для ввода имени пользователя и пароля не выдаются, введенное имя пользователя отображается, а пароль, как обычно, нет. Если вместо имени пользователя и пароля указана косая (/), предполагается стандартная регистрация от имени пользователя операционной системы (аутентификация операционной системой). При этом нельзя указывать строку связи. Cервер регистрирует пользователя OPS$ name , где name - регистрационное имя текущего пользователя операционной системы. Префикс "OPS$" можно заменить любым другим с помощью соответствующего параметра инициализации сервера (OS_AUTHENT_PREFIX). Назначение роли позволяет получить привилегированное подключение пользователям, имеющим системные привилегии SYSOPER или SYSDBA. Такое привилегированное подключение можно получить и при запуске с опциями / или /NOLOG. При указании роли пользователя во многих операционных системах (например, в NT) необходимо взять все аргументы команды в кавычки: SQLPLUS "/ AS SYSDBA" SQLPLUS "SYSTEM/MANAGER AS SYSOPER" Опция /NOLOG позволяет запустить утилиту SQL*Plus без регистрации. Прежде, чем выполнять любые SQL-операторы, придется выполнить команду CONNECT для подключения. Эта опция обычно используется при запуске сценариев, явно подключающихся к базе данных с помощью команды CONNECT. Начальный сценарийПри запуске можно выполнить начальный сценарий (файл с командами SQL*Plus, операторами SQL и анонимными PL/SQL-блоками) и передать ему аргументы. Этот файл может находиться в локальной файловой системе или (только в версии 9.0.1 для Windows) на Web-сервере. Начальный сценарий запускается так же, как если бы он был передан в качестве аргумента команде START. Если для начального сценария не указан суффикс в имени файла, используется суффикс. заданный командой SET SUFFIX (по умолчанию, .sql). Использование профилей сайта и пользователяУтилита SQL*Plus поддерживает использование профиля сайта - командного файла, создаваемого администратором базы даных и автоматически выполняемого при регистрации любого пользователя. Этот файл обычно называется glogin.sql и находится в каталоге $ORACLE_HOME/sqlplus/admin.
Утилита SQL*Plus поддерживает также использование профиля пользователя - командного файла, выполняемого автоматически при регистрации пользователя после профиля сайта. Утилита SQL*Plus ищет файл профиля, login.sql, в текущем каталоге или, если не находит его там, в каталогах поиска файлов SQL-сценариев, задаваемых обычно переменной среды SQLPATH. В случае неудачной регистрации (после трехкратного запроса имени пользователя и пароля), утилита SQL*Plus завершает работу с кодом возврата, аналогичным получаемому по команде EXIT FAILURE. Выход из SQL*PlusДля выхода из SQL*Plus необходимо ввести команду EXIT. Будет выдана информация о версии сервера, к которому была подключена утилита, и о версии SQL*Plus. Затем работа программы завершается и либо закрывается окно, либо вы получаете приглашение командной строки операционной системы. Команда EXIT имеет следующий синтаксис:
По умолчанию при выполнении команды EXIT SQL*Plus фиксирует текущую транзакцию и завершает работу с кодом возврата 0 (SUCCESS). Подключение к стандартной и удаленной базе данныхДля доступа к данным необходимо сначала подключиться к базе данных. При запуске SQL*Plus обычно происходит подключение к стандартной базе данных с указанным именем пользователя и паролем. После запуска и успешной регистрации можно в любой момент подключиться к схеме другого пользователя или к другой базе данных. Для этого используется команда CONNECT. Стандартная база данных конфигурируется на уровне операционной системы, путем установки переменной среды или редактирования файла конфигурации Oracle. Использование команды CONNECTКоманда CONNECT имеет следующий синтаксис:
Информация о пользователе и базе данных, к которым необходимо подключиться, вводится в том же формате, что и при запуске (см. синтаксис вызова утилиты SQL*Plus выше). При подключении, как и при запуске, можно указать роль пользователя, от имени которого оно выполняется. Если пароль пользователя устарел, при подключении придется ввести новый пароль. Если же учетная запись заблокирована, то выдается сообщение об этом и подключение не происходит, пока администратор не разблокирует учетную запись. В случае если подключение по любой причине не удалось, вы остаетесь отключенными от базы данных, о чем будет сообщено. Можно также явно отключиться от схемы текущего пользователя с помощью команды DISCONNECT. Базы данных на других компьютерах или просто отличающиеся от стандартной называются удаленными . К удаленной базе данных можно подключиться, если для нее сконфигурированы сетевые службы Oracle Net и драйверы сетевых служб удаленной базы данных и локального клиента SQL*Plus совместимы. Формат строки связи для удаленной базы данныхК удаленной базе данных можно подключиться двумя способами:
В обоих случаях необходимо указать строку связи , задающую сетевую службу, к которой необходимо подключиться. Формат строки связи зависит от версии сетевых служб Oracle на машине, с которой выполняется подключение. При использовании Net8 обычно строка связи соответствует имени сетевой службы из файла tnsnames.ora, находящегося (в версиях 8.1.x и выше) в каталоге $ORACLE_HOME/network/admin/. Пусть в файле tnsnames.ora имеется следующая запись для сетевой службы Oracle: TRAINING = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = creator)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = training) ) ) Тогда для подключения к соответствующей базе данных при запуске SQL*Plus необходимо ввести, например, следующую команду в окне командной строки операционной системы: sqlplus scott/tiger@training Для подключения к соответствующей базе данных из SQL*Plus необходимо выполнить команду вида: CONNECT scott/tiger@training Основные командыПосле запуска утилита SQL*Plus выдает приглашение командной строки (обычно, это строка "SQL> "), после которого можно вводить команды. Команды состоят из одного или нескольких слов, разделенных произвольным количеством пробелов и/или символов табуляции. Регистр символов в командах обычно не имеет значения. При нажатии клавиши Enter команда (при выполнении определенных условий по ее завершению) выполняется. После выполнения команды снова выдается приглашение. Некоторые команды, например, блоки PL/SQL, могут занимать несколько строк. Тогда SQL*Plus выдает дополнительные приглашения с номером строки, например, "2> ". В командной строке SQL*Plus можно вводить команды трех видов:
От вида команды зависит способ продолжения ее на следующей строке, завершения и выполнения. Выполнение командБуфер SQLПоследнюю введенную команду (SQL-оператор или блок PL/SQL) SQL*Plus хранит в области, которая называется буфер SQL . Оператор или блок остается в этом буфере пока не будет введен новый. В буфер SQL не попадает точка с запятой или косая, завершающая оператор или блок, соответственно. Содержимое буфера SQL можно редактировать и выполнять повторно. Для повторного выполнения содержимого буфера SQL используется команда RUN или косая черта (/). Команда RUN выдает содержимое буфера в стандартный выходной поток, а затем выполняет. Косая черта вызывает просто выполнение команды из буфера. Выполнение операторов SQLОператор SQL можно завершить тремя способами:
Точка с запятой в конце строки означает выполнение оператора. Утилита SQL*Plus выполняет оператор и запоминает его в буфере SQL. Этот символ является признаком завершения команды и после него нельзя вводить комментарий. Косая черта в качестве первого и единственного символа очередной строки означает, что оператор надо выполнить. Утилита SQL*Plus выполняет оператор и запоминает его в буфере SQL. Пустая строка в операторе SQL или сценарии SQL*Plus обычно означает, что ввод команды завершен, но выполнять ее пока не надо (это поведение можно изменить с помощью команды SQL*Plus SET SQLBLANKLINES). Команда помещается в буфер SQL и остается там, пока не будет введена другая команда. Выполнение блоков PL/SQLДля ввода блоков PL/SQL необходимо работать в режиме PL/SQL. Утилита SQL*Plus переходит в это режим, если:
Утилита SQL*Plus обрабатывает блоки PL/SQL так же, как и операторы SQL, за исключением точки с запятой и пустой строки. В режиме PL/SQL их ввод не вызывает выполнения или завершения команды. Чтобы завершить и выполнить блок PL/SQL, необходимо ввести строку с единственным символом - косой чертой (/). Чтобы завершить ввод блока и просто поместить его в буфер SQL, не выполняя, введите строку с единственным символом точка (.). Выполнение команд SQL*PlusКоманды SQL*Plus выполняются сразу и в буфер SQL не попадают. Завершать команды SQL*Plus точкой с запятой можно, но не обязательно. Большинство команд SQL*Plus можно сокращать до одной или нескольких первых букв, достаточных для однозначного определения команды. Если необходимо ввести длинную команду SQL*Plus, ее можно перенести на следующую строку. Для этого в конце строки необходимо ввести дефис (-) и только затем нажать клавишу Enter. Будет выдано приглашение, и ввод команды можно будет продолжить. Точно так же интерпретируется дефис и в операторах SQL - если это последний не пробельный символ в строке, он не попадет в буфер и считается просто признаком продолжения команды на следующей строке. Прекращение команды по ходу работыДля прекращения долго выполняющейся команды по ходу работы, необходимо ввести символ прерывания , обычно, Ctrl+C. При этом SQL*Plus прекратит выдачу результатов команды и выдаст приглашение. Прекратить таким способом команду, выдающую результаты в файл с помощью команды SPOOL, нельзя. Придется прекратить работу утилиты SQL*Plus, в которой была выдана команда, средствами операционной системы. Получение информации о времени выполнения командыДля сбора и выдачи данных о вычислительных ресурсах, использованных для выполнения одной или нескольких команд или блоков, предназначена команда TIMING. Она имеет следующий синтаксис:
Назначение команд таймера описано в табл. 3. Таблица 3. Команды таймера SQL*Plus.
Команда TIMING без параметров выдает количество активных таймеров. Рассмотрим пример использования команды TIMING: SQL> timing start first SQL> select * from dept; DEPTNO DNAME LOC ---------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON SQL> timing show таймер для: first Затрач.время: 00:00:16.74 SQL> timing stop таймер для: first Затрач.время: 00:00:21.20 SQL> Для удаления всех таймеров используется команда CLEAR TIMING. Можно также автоматически выдавать время работы каждой команды помощью установки SET AUTOTRACE. Подробнее см. далее в разделе "Настройка среды SQL*Plus". Выполнение команд базовой операционной системыИз командной строки SQL*Plus можно выполнять любые команды базовой операционной системы. Для этого используется команда HOST, за которой идет командная строка для операционной системы. Команду HOST можно сокращать до первых двух букв. Если команда введена без параметров, открывается сеанс стандартного командного интерпретатора операционной системы. В нем можно выполнять любое количество команд. Для выхода из командного интерпретатора UNIX достаточно выполнить команду EXIT или ввести Ctrl+D. Доступ к команде HOST можно запретить, запуская утилиту SQL*Plus с любым уровнем ограничения. Получение оперативной справкиУтилита SQL*Plus позволяет получить справочную информацию по своим командам, а также основным объектам схем. Команда HELPДля получения справки по командам SQL*Plus используется команда HELP. Она может вызываться с одним необязательным аргументом. Если аргумент не указан, выдается справка по справочной системе SQL*Plus. Если аргумент указан, то выдается справка по всем командам SQL*Plus, начинающимся с указанного аргумента. Например, команда HELP EX выдает сначала справку по команде EXECUTE, а затем - по команде EXIT. Команда HELP INDEX выдает список всех команд SQL*Plus. Команда HELP TOPICS выдает список команд вместе с однострочным описанием назначения. Команда DESCRIBEКоманда DESCRIBE позволяет получить описание таблицы или представления, а также спецификацию типа, пакета, функции или процедуры:
Описание таблицы, представления или синонима содержит следующую информацию:
Например: SQL> desc emp Имя Пусто? Тип ----------------------------------------- -------- -------------------- EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2) Команда DESCRIBE позволяет описывать объекты рекурсивно, причем глубина задается командой SET DESCRIBE. Можно также выдавать номер строки и сдвигать имя столбца или атрибута, если объект содержит несколько объектных типов. Длину выдаваемой строки описания можно контролировать с помощью команды SET LINESIZE. Описание функций и процедур содержит следующую информацию:
Например: PROCEDURE sys.subptxt Имя Аргумента Тип В/Из По-умолч ------------------------------ ----------------------- ------ -------- NAME VARCHAR2 IN SUBNAME VARCHAR2 IN USR VARCHAR2 IN TXT VARCHAR2 IN/OUT Редактирование командКоманды SQL*Plus не попадают в буфер, поэтому редактировать их можно только по ходу ввода с помощью клавиши Backspace. Утилита SQL*Plus поддерживает несколько команд редактирования текста в буфере. Они представлены в табл. 4. Таблица 4. Команды редактирования SQL*Plus.
Рассмотрим пример: SQL> select ename, salary from emp; select ename, salary from emp * ошибка в строке 1: ORA-00904: неверно имя столбца SQL> c /salary/sal 1* select ename, sal from emp SQL> i where deptno=30; SQL> / ENAME SAL ---------- ---------- ALLEN 1600 WARD 1250 MARTIN 1250 BLAKE 2850 TURNER 1500 JAMES 950 6 строк выбрано. SQL> list 1 select ename, sal from emp 2* where deptno=30 Форматирование результатов запросовРезультаты запросов в SQL*Plus можно дополнительно сформатировать. Утилита SQL*Plus позволяет управлять форматом столбцов, количеством строк на странице и дополнительными пустыми строками, заголовками страниц и т.д. В следующих разделах подробно рассмотрены наиболее часто используемые команды форматирования. Их применяют, если стандартный формат представления столбцов не подходит. Стандартный формат столбцовШирина числовых столбцов соответствует максимуму из ширины заголовка столбца, ширины, заданной с помощью опции COLUMN FORMAT, плюс один символ для знака, и ширины, заданной командой SET NUMWIDTH (по умолчанию, 10 символов). Если количество значащих цифр в числе больше, чем допускается шириной числового столбца, утилита SQL*Plus округляет число. Для столбцов других типов ширина столбца соответствует его ширине в базе данных. Все эти столбцы по умолчанию выравниваются влево. Для столбцов типа DATE формат определяется соответствующими NLS-параметрами. Если они не заданы, предполагается формат A9 (см. табл. 6). Команда COLUMNКоманда COLUMN для управления форматом выдачи столбца имеет следующий синтаксис:
Назначение опций форматирования столбца кратко описано в табл. 5. Таблица 5. Основные опции команды COLUMN.
Таблица 6. Основные элементы формата опции FORMAT.
Рассмотрим простой пример использования команды COLUMN для форматирования значений и заголовков столбцов: SQL> col sal format 9,999.99 SQL> select sal, ename from emp; SAL ENAME --------- ---------- 800.00 SMITH 1,600.00 ALLEN 1,250.00 WARD 2,975.00 JONES 1,250.00 MARTIN 2,850.00 BLAKE 2,450.00 CLARK 3,000.00 SCOTT 5,000.00 KING 1,500.00 TURNER 1,100.00 ADAMS 950.00 JAMES 3,000.00 FORD 1,300.00 MILLER 14 строк выбрано. SQL> col sal clear SQL> col ename heading "Зарплата/товарища" SQL> a where deptno=30 1* select sal, ename from empwhere deptno=30 SQL> / select sal, ename from empwhere deptno=30 * ошибка в строке 1: ORA-00933: неверное завершение SQL-предложения SQL> c/where/ where/ 1* select sal, ename from emp where deptno=30 SQL> / Зарплата SAL товарища ---------- ---------- 1600 ALLEN 1250 WARD 1250 MARTIN 2850 BLAKE 1500 TURNER 950 JAMES 6 строк выбрано. Команда COLUMN с единственным параметром - ссылкой на столбец, выдает все атрибуты форматирования указанного столбца. Команда COLUMN без параметров выдает все атрибуты форматирования для всех столбцов, для которых они явно устанавливались. Продолжая предыдущий пример: SQL> col ename COLUMN ename ON HEADING 'Зарплата/товарища' headsep '/' Команда BREAKКоманда BREAK позволяет разбить выдаваемые строки на группы по значению столбца, разделяя группы пустыми строками, а также управлять выдачей дублирующихся значений и значений, подсчитанных с помощью команды COMPUTE. Она имеет следующий синтаксис:
Команда BREAK без параметров выдает свои текущие параметры (параметры разрыва). Каждый последующий вызов BREAK с параметрами отменяет предыдущий. Для отмены параметров разрыва используется команда CLEAR BREAKS. Назначение опций команды BREAK описано в табл. 7. Таблица 7. Основные варианты вызова команды BREAK.
Конструкцию ON <столбец> можно задавать в одной команде BREAK несколько раз. При этом столбцы проверяются в порядке указания. Действия же выполняются в обратном порядке, от самого внутреннего разрыва. Если при вводе необходимо перенести опции на следующую строку, укажите дефис (-) в конце первой строки. Обычно команда используется с операторами SELECT, содержащими конструкцию ORDER BY. Рассмотрим пример (обратите внимание на пустые строки): SQL> break on deptno skip on sal skip 1 SQL> break break on deptno пропустить 1 nodup on sal пропустить 1 nodup SQL> select deptno, ename, sal from emp order by deptno; DEPTNO ENAME SAL ---------- ---------- ---------- 10 CLARK 2450 KING 5000 MILLER 1300 20 SMITH 800 ADAMS 1100 FORD 3000 SCOTT JONES 2975 30 ALLEN 1600 BLAKE 2850 MARTIN 1250 JAMES 950 DEPTNO ENAME SAL ---------- ---------- ---------- 30 TURNER 1500 WARD 1250 14 строк выбрано. Команда COMPUTEКоманда COMPUTE позволяет вычислять и выдавать итоговые значения. При вызове без параметров выдает все заданные вычисления. Команда COMPUTE имеет следующий синтаксис:
Функции, которые можно использовать при вычислении в команде COMPUTE, представлены в табл. 8. Таблица 8. Функции в команде COMPUTE.
Назначение основных конструкций команды COMPUTE описано в табл. 9. Таблица 9. Основные конструкции команды COMPUTE.
Для удаления всех определений COMPUTE используется команда CLEAR COMPUTES. Рассмотрим простой пример вычисления итоговых значений и редактирования SQL-операторов в SQL*Plus: SQL> set pagesize 55 SQL> break on deptno skip 1 SQL> compute avg label 'Средняя' of sal on deptno SQL> select deptno, ename, sal 2 from emp 3 order by deptno; DEPTNO ENAME SAL ---------- ---------- ---------- 10 CLARK 2450 KING 5000 MILLER 1300 ********** ---------- Средняя 2916,66667 20 SMITH 800 ADAMS 1100 FORD 3000 SCOTT 3000 JONES 2975 ********** ---------- Средняя 2175 30 ALLEN 1600 BLAKE 2850 MARTIN 1250 JAMES 950 TURNER 1500 WARD 1250 ********** ---------- Средняя 1566,66667 14 строк выбрано. SQL> compute sum of sal on report SQL> / ... тот же результат, поскольку не изменили условие BREAK SQL> break on deptno skip 1 on report SQL> list 2 2* from emp SQL> list * 2* from emp SQL> i where deptno in (10, 20) SQL> / DEPTNO ENAME SAL ---------- ---------- ---------- 10 CLARK 2450 KING 5000 MILLER 1300 ********** ---------- Средняя 2916,66667 20 SMITH 800 ADAMS 1100 FORD 3000 SCOTT 3000 JONES 2975 ********** ---------- Средняя 2175 ---------- sum 19625 8 строк выбрано. Команда CLEARКоманда CLEAR позволяет сбросить значение ряда опций утилиты SQL*Plus, в частности, связанных с форматированием результатов. Она имеет следующий синтаксис:
Ссылки по теме
|
|