Текст
                    2-е издание
Oracle SQLTlus
Карманный справочник
Джонатан Тённик
Москва • Санкт-Петербург - Нижний Новгород - Воронеж
Ростов-на-Дону * Екатеринбург - Самара - Новосибирск
; Киев ¦ Харьков • Минск
i 2004


Second Edition Oracle SQL'Plus Pocket Reference Jonathan Gennick O'REILLT Beijing * Cambridge • Farnham • Kdln Paris • Sebastopol * Taipei • Tokyo
ББК 32.973.233-018.2Я22 УДК 681.3.016@3) Г34 Ген ник Дж. Г34 Oracle SQL*Plus. Карманный справочник. 2-е издание. — СПб.: Питер, 2004. — 189 с: ил. ISBN 5-469-00214-4 В книге очень подробно рассказано, почему имеет смысл решать все свои задачи с помощью SQL*Plus. Вы узнаете, как писать и выполнять файлы сценариев, генерировать и форматировать отчеты, получать информацию из баз данных, запрашивать таблицы словарных данных, настраивать для своих целей среду SQL*Plus, применять механизмы администрирования SQL*Plus. ББК 32.973.233-018,2я22 УДК 681.3.016@3) Права на издание получены по соглашению с OReHly. Все права защищены. Никакая часть данной книги не может быть воспроизведена в ка- какой бы то ни было форме без письменного разрешения владельцев авторских прав. Информация, содержащаяся в данной книге, получена из источников, рассматри- рассматриваемых издательством как надежные. Тем не менее, имея в виду возможные челове- человеческие или технические ошибки, издательство не может гарантировать абсолютную точность и полноту приводимых сведений и не несет ответственности за возможные ошибки, связанные с использованием книги. © 2003, 2000 O'Reilly & Associates, Inc. ISBN 0596004419 (ангп.) © Перевод на русский язык, ЗАО Издательский дом «Питер». 2004 ISBN 5-469-00214-4 © Издание на русском языке, оформление, ЗАО Издательский дом «Питер», 2004
Содержание Введение 11 Благодарности 11 Соглашения 11 От издателя перевода 13 Взаимодействие с SQL*Plus 14 Запуск SQL*Plus 14 Синтаксис команды sqlplus 15 Ввод команд 19 Ввод команд SQL*Plus 19 Ввод SQL-инструкций 21 Ввод блоков PL/SQL 22 Строки в командах SQL*Plus 22 Задание имен файлов 23 Именование переменных 24 Выборка данных 25 Инструкция SELECT 25 Выборка столбцов из таблицы 25 Сортировка результатов запроса 26 Ограничение резул ьтатов запроса 27 Использование псевдонимов столбцов 27
6 Содержание Значения NULL 28 Использование функции NVL 30 Использование функции COALESCE 30 Выражения CASE ¦.,. 32 Простые выражения CASE 32 Поисковые выражения CASE 34 Объединение таблиц (Oracle8i) 34 Внешние и внутренние объединения 36 Объединение таблиц (Oracle9i) л 37 Примеры таблиц 37 Внутренние объединения 39 Порядок объединения 39 Левое и правое внешние объединения 40 Полное внешнее объединение 41 Задание условий объединения 43 Итоговые запросы 45 Использование агрегатных функций 46 Использование предложения GROUP BY 47 Ограничение на вывод итоговых результатов 48 Ключевые слова ALL и DISTINCT 50 Объединения ¦ ¦ ¦ 51 Операции с разделами 52 Вставка данных 54 Вставка строки ¦ 54 Вставка результатов запроса 55 Многотабличные вставки (Oracle9i) 56
Содержание 7 Обновление данных 59 Простые обновления 59 Некоррелированные вложенные запросы в предложении SET 59 Коррелированные вложенные запросы в предложении SET 60 Удаление данных 62 Простые удаления 62 Удаление всех строк (TRUNCATE) 62 Удаление дубликатов строк 63 Слияние данных (Oracle9i) 65 Управление транзакциями 69 Инструкция SET TRANSACTION 69 Инструкция SAVEPOINT 71 Инструкция COMMIT ¦ 71 Инструкция ROLLBACK 71 Форматирование текстовых отчетов 73 Заголовки столбцов 73 Форматы столбцов 74 Ширина и длина страницы 75 Колонтитулы 76 Определение верхнего колонтитула 76 Отображение даты в колонтитуле 76
8 Содержание Разрывы страницы 77 Разрывы отчета 78 Команда BREAK 78 Команда COMPUTE 80 Настройка SQL-инструкций 82 Создание таблицы плана 82 Описание запроса 84 Синтаксис инструкции EXPLAIN PLAN 84 Пример инструкции EXPLAIN PLAN 84 Запрос таблицы плана 85 Советы оптимизатору 87 Советы относительно цели оптимизации 89 Советы относительно метода доступа 89 Советы относительно порядка объединения ....90 Советы относительно операции объединения : 91 Советы относительно преобразования запроса .'...92 Разные советы 93 Элементы форматирования SQL*Plus ....95 Форматирование чисел 95 Форматирование символьных строк 98 Форматирование дат 100 Команды SQL*Plus 107 Ограничители комментария/* и */ 107 Двойной дефис (--) 107
Содержание 9 Команда ®> 108 Команда <§><§> 109 Команда / 109 ACCEPT 109 APPEND 111 ARCHIVE LOG 112 ATTRIBUTE 113 BREAK 114 BTITLE 116 CHANGE 117 CLEAR 117 COLUMN 118 COMPUTE 123 CONNECT 126 COPY 127 DEFINE 129 DEL 130 DESCRIBE 130 DISCONNECT 131 EDIT ; 131 EXECUTE 132 EXIT 132 GET 133 HELP 134 HOST...: 135 INPUT 135 LIST 136 PASSWORD 137 PAUSE .". 138 PRINT 138 PROMPT 138
10 Содержание QUIT 139 RECOVER 139 REMARK 145 REPFOOTER 146 REPHEADER 146 RUN 146 SAVE 147 SET 148 SHOW 160 SHUTDOWN 163 SPOOL 164 START 165 STARTUP ; 165 STORE 168 TIMING 169 TTITLE 170 UNDEFINE 172 VARIABLE 173 WHENEVER 175 Алфавитный указатель 178
Введение Данная книга представляет собой справочник кар- карманного формата по SQL*Plus и наиболее часто используемым SQL-инструкциям. Он призван по- помочь пользователям SQL*Plus быстро находить синтаксис различных элементов языка. Справоч- Справочник не является самодостаточным руководством пользователя: предполагается знание основ SQL. Благодарности Эта книга появилась па свет при участи Деборы Рассел (Deborah Russell), Дарла Куна (Darl Kuhn), Кена Джекобса (Ken Jacobs) и Элисон Холловей (Alison Holloway), Автор глубоко признателен им за помощь и поддержку. Соглашения ВЕРХНИЙ РЕГИСТР В описаниях синтаксиса прописными буквами набраны ключевые слова SQL*PlusT SQL или PL/SQL В основном тексте книги эти ключе- ключевые слова выделены к тому же ОСОБЫМ СТИЛЕМ. нижний регистр В описаниях синтаксиса строчными буквами набраны определяемые пользователем идепти-
12 Введение фикаторы. В основном тексте книги эти элемен- элементы выделены к тому же особым стилем. В описаниях синтаксиса в квадратные скобки заключаются необязательные элементы. В описаниях синтаксиса в фигурные скобки за- заключается список элементов, из которого нуж- нужно выбрать только один элемент. I В описаниях синтаксиса вертикальная черта раз- разделяет элементы в фигурных скобках. Курсив , В описаниях синтаксиса курсив используется для выделения параметров, устанавливаемых по умолчанию. Полужирный шрифт В примерах для выделения данных, вводимых пользователем в командной строке, использу- используется полужирный шрифт.
От издателя перевода Ваши замечания, предложения, вопросы отправ- отправляйте по адресу электронной почты comp@piter.com (издательство «Питер», компьютерная редакция). Мы будем рады узнать ваше мнение! Подробную информацию о наших книгах вы иай- деге на веб-сайте издательства http://www.piter.com.
Взаимодействие с SQL*Plus Этот раздел содержит информацию, которая вам потребуется для работы с SQL* Plus. Вы узнаете, как запускается SQL*Plus, осуществляется ввод команд, ограничиваются символьные строки и при- присваиваются имена переменным. Запуск SQL*Plus Запуск SQL*Plus осуществляется командой sqlplus из командной строки операционной системы. В Mi- Microsoft Windows вы можете использовать команду sqlplus или sqlpLusw в зависимости от того, в каком интерфейсе вы хотите работать: в окне командной строки Windows Или в собственном окне SQL*Plus. (Для ранних версий SQL*Plus на платформе Win- Windows применялись команды PLUS33 и PLUS80W.) Для запуска SQL*Plus в Windows можно также воспользоваться соответствующей командой меню Пуск (Start). ВНИМАНИЕ Остерегайтесь ваодить свой пароль как аргу- аргумент командной строки при запуске SQL*Plus. При таком вводе ваш пароль легко могут уви- увидеть другие пользователи, работающие под управлением Linux и Unix.
Запуск SQL*Plus 15 Синтаксис команды sqlplus При запуске SQL*Plus используется следующий синтаксис: sqlplus [[-SLILENT]] [-H[ELP]] [-V[ERSION]] [-RESTRICT] level] [-L[OGON]] [-M[ARKUP] мпараметры_разметки"] [ [иня_пользователя[/пароль][@соединение]|/ [AS {SYSDBA|SYSOPER}]] I/NOLOG] ' . [@файл_сценария [аргумент! аргунент2...]]] Параметры -RESTRICT и -MARKUP впервые появи- появились в Oracle^, параметры -HELP и -VERSION — в Oracle9i. Ниже приведены описания параметров. -S[ILENT] Предписывает SQL*Plus работать в режиме «молчания»: не отображать сообщения о запус- запуске, приглашение на ввод команды и эхо-повтор выполняемых команд. -HCELP3 Предписывает SQL*Plus отобразить краткую справку о синтаксисе команды sqlplus (Oracle!)/). При работе с более ранними версиями для по- получения этой информации используйте следу- следующую команду: sqlplus -? -V[ERSION] Предписывает SQL*Plus отобразить информа- информацию о версии и лицензионном соглашении (Oracle9i). При работе с более ранними вереи-
Взаимодействие с SQL*Plus ями для получения этой информации исполь- используйте следующую команду: sqlpjus -? RESTRICT] уровень Не разрешает пользователю выполнять опре- определенные команды SQL*Plus. Параметр уро- уровень должен иметь одно из следующих значе- значений: О значение 1 — блокирует команды EDIT, HOST и '• О значение 2 — блокирует команды EDIT, HOST» !, SAVE, SPOOL и STORE; О значение 3 — блокирует команды EDIT, GET, НОЯ U SAVE, START, @, @@, SPOOL и STORE, a также ограничивает чтение файла login.sqt (файл glogin.sql читается, ио заблокирован- заблокированные команды не выполняются). L[OGON] ¦ Этот параметр введен в Огас1е9г Release 9.2. За- Запрещает SQL*Plus выводить повторное пригла- приглашение на ввод имени пользователя и пароля в случае их неправильного ввода, M[ARKUP] паранетры_разметки Разрешает задать язык разметки, который ис- используется при генерации выходных данных. Другие параметры разметки, за исключением HTML, не обязательны. Далее перечислены правильные варианты задания параметров разметки.
Запуск SQL*Flus 17 О HTML {ON | OFF} Задает язык разметки и разрешает или за- запрещает использование этого языка. О HEAD текст Определяет содержимое тега <head>. При записи этого тега используется синтаксис <head>TeKa</head>. О BODY текст Определяет атрибуты тега <body>. При запи- записи этого тега используется синтаксис <body текст>, О TABLE текст Определяет атрибуты тега <table>, формати- форматирующего результаты запроса. При записи это- этого тега используется синтаксис <tabte текст>. О ENTMAP {ON | OFF} . Определяет»будетли SQL*Plusиспользовать заменители HTM L (например, &lt; и &gt;) вме- вместо специальных символов, таких как < и >. О SPOOL {ON | OFF} При использовании параметра HTML ON опре- определяет, будет ли SQL*Plus записывать теги <html>, <head> и <body> в файл спулинга, соз- создаваемый во время сеанса работы с SQL* Plus. О PRECFORMAT] {ON | OFF} Определяет, будут ли результаты запроса заключаться в теги <рге>... </рге> или будут представлены в виде HTML-кода.
Взаимодействие с SQL*Plus В некоторых операционных системах необ- необходимо заключать в двойные кавычки всю строку параметров разметки. Например: sqlplus -m "html on spool off" Более того, все тексты параметров HEAD, BODY и TABLE должны быть сами заключены в кавычки, и вам необходимо позаботиться о сохранении кавычек; sqlplus -m "html on table \"width-50? align='left'\"" . Синтаксис с обратной косой чертой (\и) ра- работает в Windows XP, Linux и Unix и поме- помещает кавычки (") в строку, задающую зна- значение для параметра -М. имя_пользователя [/пароль][^соединение] Ваши входные данные, необходимые для под- подключения кбазе данных. Параметр соединение — это идентификатор соединения Oracle Net, опре- определенный в файле $ORACLE_HOME/network/admin/ tnsnames.ora. Сосдиняег вас с локальной базой данных, исполь- используя аутентификацию операционной системы. AS {SYSDBA | SYSOPER} Соединяет вас в роли администратора, так что вы сможете выполнять операции администри- администрирования базы данных (например, открывать и закрывать экземпляр базы данных). Возможно,
Ввод команд 19 вам потребуется заключить всю строку вход- входных данных в кавычки: sqlplus "sys/password as sysdba" /NOLOG Предписывает SQL*Plus открыть сеанс без со- соединения с базой данных. файл_сценария Имя файла сценария SQL*PIus. SQL*Plus за- запустится и затем выполнит этот файл. Начиная с Oracle9i, вы также можете задать URL-адрес файла (см. команду @). аргумент1 аргумент2... Необязательные аргументы командной строки, передаваемые сценарию. Аргументы должны быть разделены, по крайней мере, одним про- пробелом. Ввод команд Взаимодействие с SQL*PIus зависит оттого, что вы вводите — команду самого языка SQL*PIusr SQL- инструкцию, или блок PL/SQL. Ввод команд SQL*Plus Команды, такие как DESCRIBE, COLUMN, TITTLE, SET и все другие, перечисленные в разделе «Команды SQL*Plus», являются командами самого языка SQL*Plus. Вы должны их вводить построчно и сра- сразу же выполнять. Например:
20 Взаимодействие с SQL*Plus SET ECHO ON DESCRIBE employee Команды SQL*Plus могут заканчиваться необя- необязательной точкой с занятой. Например: PROMPT Эта точка с запятой не будет выводиться.; CONNECT system/manager; Вы можете изменить поведение SQL*Plus по отношению к точкам с запятыми, изменив установ- установку SQLTERMINATOR. Длинные команды SQL*PIus физически могут располагаться на нескольких строках, В SQL*Plus в качестве символа продолжения используется дефис (-). Указывайте его в конце физической строки» что- чтобы продолжить ввод длинной команды SQL*Plus на следующей строке. Показанные ниже три стро- строки рассматриваются SQL*Plus как одна строка; COLUMN employee_id - FORMAT 099999 - HEADING 'Emp ID1 Пробел перед символом продолжения не обя- обязателен. Символьные строки (в кавычках) также мо1чут быть продолжены на следующих физиче- физических строках. Например: SELECT 'Hello- World!1 FROM dual; При продолжении символьной строки все про- пробелы перед символом продолжения включатся в эту строку. Разрыв строки рассматривается как один пробел.
Ввод команд 21 Ввод SQL-инструкций SQL-инструкции могут занимать несколько строк и всегда должны завершаться ограничителем в виде точки с.запятой (; ) или наклонной черты ( /). На- Например: SELECT user FROM dual: SELECT user FROM dual В обоих случаях SQL-инструкция помещается в буфер, известиыи как SQL-буфер, и затем выполня- выполняется. Вы можете завершить SQL-инструкцию пустой строкой или точкой, и в этом случае инструкция ио- мещается в буфер, но не выполняется. Например: SQL> SELECT user 2 FROM dual 3 . SQL> SELECT user 2 FROM dual 3 . Команда SET SQLTERMINATOR позволяет сменить ограничитель и использовать вместо точки с заня- занятой другой символ. Команда SET SQLBLANKLINES ON позволяет оставлять пустые строки внутри SQL- инструкции. Для того чтобы выполнить SQL-ин- SQL-инструкцию, находящуюся в буфере, введите на от- отдельной строке только одну наклонную черту.
22 Взаимодействие с SQL*Plus Ввод блоков PL/SQL Блокн PL/SQL могут занимать несколько строк и содержать пустые строки. Они должны заканчи- заканчиваться наклонной чертой (/) или точкой (.), вве- введенной на отдельной строке. Например: BEGIN DBMS J3UTPUT,PUTJ_INE('Hello World!'); END; BEGIN DBMS_OUTPUT.PUT^LINE('Hell о World!'): END: При использовании наклонной черты блок пе- передается серверу и немедленно выполняется. При использовании точки блок только сохраняется и SQL-буфере. Команда SET BLOCKTERMINATOR поз- позволяет заменить ограничитель в виде точки другим символом. Строки в командах SQL*Plus Многие команды, специфичные именно для SQL* Plus, принимают символьныезначения (стро- (строки) в качестве параметров. Простые строки, которые не содержат пробелов и знаков пунктуации, можно вводить без кавычек. Например: COLUMN emplqyeejd HEADING empjd
Задание имен файлов 23 Исходя из общих соображений, безопаснее за- ключать строки в одинарные или двойные кавыч- кавычки. Например: COLUMN employeejd HEADING 'Emp #' COLUMN employee_id HEADING "Emp f Для того чтобы включить кавычки в строку, введите ее дважды либо задействуйте другие огра- ограничивающие кавычки. Следующие две команды, в которых используются разные ограничивающие кавычки, эквивалентны: COLUMN employeejd HEADING '"Emp f' COLUMN employee_id HEADING "'Emp #'" Единственным исключением из этого правила является команда PROMPT. Все кавычки, указанные в команде PROMPT, сохраняются при выводе. Задание имен файлов Несколько команд SQL* Plus позволяют задавать имя файла. Во всех случаях вы можете включать вместе с именем путь и/или расширение. Напри- Например: SPOOL my_report SPOOL c:\temp\my_report SPOOL create_synonyms.sql Большинство команд, работающих с файлами, используют расширение по умолчанию, если оно явно не указано.
24 Взаимодействие с SQt*Plus Именование переменных SQL* Plus позволяет объявлять два типа перемен- переменных: пользовательские переменные и неременные привязки. Правила именования для этих двух ти- типов переменных различны. Имена пользовательских переменных могут со- содержать в любом порядке буквы, цифры и симво- символы подчеркивания (_). Они чувствительны к реги- регистру букв и могут содержать не более 30 символов. Имена переменных привязки должны начинать- начинаться с буквы и могут содержать буквы, цифры, сим- символы подчеркивания, знаки доллара ($) и фунта (#). Они также чувствительны к регистру букв, и их длина ограничена 30 символами.
Выборка данных Инструкция SELECT — ключевая инструкция для по- получения данных из базы данных Oracle. Эта SQL- инструкция наиболее часто выполняется из среды SQL*PIus. Инструкция SELECT Основная форма инструкция SELECT выглядит так: SELECT список_столбцов FROM список_таблиц WHERE условия GROUP BY список_столбцов HAVING условия ORDER BY список_столбцов; Этот синтаксис требует, чтобы элементы в списках разделялись запятыми. Например, список столб- столбцов содержит разделенные занятыми имена столб- столбцов или выражения, идентифицирующие данные, которые должен возвратить запрос. Выборка столбцов из таблицы Для того чтобы извлечь нужные столбцы из табли- таблицы, поместите список этих столбцов после ключе- ключевого слова SELECT, имя таблицы поместите после ключевого слова FROM и выполните инструкцию. Приведенный ниже запрос возвратит список таб-
26 Выборка данных лиц, владельцем которых выявляетесь, вместе с име- именами, назначенными табличным областям: SELECT table_name. tablespacejiame FROM userjables: Сортировка результатов запроса Для сортировки результатов запроса вы можете ис- использовать предложение ORDER BY. В приведенном запросе результаты сортируются по имени таблиц; SELECT table_name. tablespace_name FROM userjables ORDER BY table_name; По умолчанию применяется сортировка по воз- возрастанию. Вы можете отсортировать результаты в убывающем порядке, используя ключевое слово DESC. Например: ORDER BY tablejiame DESC; Необязательное ключевое слово ASC можно ука- указать для задания сортировки по возрастанию. При- Приведенный ниже запрос сортирует таблицы сначала по убыванию имен табличных областей, затем по именам таблиц в возрастающем порядке: SELECT tablejiame, tablespace_name FROM user_tables ORDER BY tablespace_name DESC, table_name ASC; Встроенная функция Oracle UPPER позволяет производить сортировку с учетом регистра симво- символов. Например:
Инструкция SELECT 27 SELECT table_name. tablespace_name FROM user_tables ORDER BY UPPER(tablejiame); Для симметрии Oracle также имеет встроенную функцию LOWER. Функция LOWER преобразует сим- символы строки к нижнему регистру, a UPPER — к верх- верхнему. Ограничение результатов запроса Используйте предложение WHERE для того, чтобы ограничить набор строк, возвращаемых запросом, только теми, которые вам нужны. Приведенный ни- ниже запрос возвращает список всех поврежденных объектов, владельцем которых вы являетесь: SELECT object_name. object^type FROM user_objects WHERE status = 'INVALID1 ORDER BY object_type. object_name; В предложении WHERE можно использовать лю- любое правильное логическое выражение. Oracle под- поддерживает все операторы, которыми вы обычно пользуетесь, включая +, -, /, *, <, >, <>, <=, >=, AND, OR, NOT, ||, IS NULL, LIKE, BETWEEN и IN. В выражении можно указывать круглые скобки для уточнения порядка вычисления выражения. Использование псевдонимов столбцов Если список столбцов инструкции SELECT содержит выражение, Oracle генерирует имя столбца, осно-
28 Выборка данных вываясь на выражении. Посмотрите на следующую SQL-инструкцию: SELECT SUM(hoursJogged) FROM projectjiours WHERE projected = 1001; Этот запрос возвратит столбец с именем SUM(HOURSJUGGED). Это означает, что любая ко- команда COLUMN, форматирующая результаты запро- запроса, должна выглядеть примерно так: COLUMN SUM(HOURS_LOGGED) - HEADING 'Total Hours' Если используемые выражения слишком слож- сложные, то с именами, которые генерирует Oracle, ста- становится трудно работать. В этом случае следует задействовать псевдоним, чтобы снабдить вычис- вычисляемый столбец удобным именем. Например: SELECT SUM( hours Jogged) total Jiours FROM projectjiours WHERE projected - 1001; Теперь столбец имеет содержательное имя to- tal_hoursT которое сохранится даже при изменении выражения. Значения NULL Пустые значения NULL могут быть причиной не- неприятностей, особенно в предложении WHERE за- запроса. Любые выражения, содержащие пустые зна- значения, возвращают, за редким исключением, зна-
Значения NULL 29 чеиие NULL в качестве результата. Поскольку зна- значение NULL нельзя считать ни истинным, ни лож- ложным, постольку использование выражения со зна- значением NULL в предложении WHERE может привес- привести к непредсказуемым результатам. Рассмотрим запрос, который пытается извлечь список столб- столбцов, имеющих тип данных NUMBER с числом знаков после запятой, отличным от 2: SELECT tablejiame, column_name FROM user_tabj:olumns WHERE datatype - 'NUMBER* AND data_scale <> 2; Этот запрос почти неизбежно окончится неудач- неудачно, поскольку в таблице могут присутствовать столбцы с типом данных NUMBER, для которых вов- вовсе не определено количество знаков после запятой. Для избежания подобных нроблем следует явно проверять значения NULL в предложении WHERE. Для этого используйте оператор IS NULL или IS NOT NULL. Например: SELECT table_name. columnjmme FROM user_tab_columns WHERE datatype - 'NUMBER' AND (data_scale <> 2 OR data^scale IS NULL); При сортировке данных считается, что значе- значения NULL больше любых других значений. При вьь полнении стандартной сортировки по возрастанию значения NULL располагаются внизу списка. Соот-
30 Выборка данных ветствеино при сортировке по убыванию значения NULL оказываются в начале списка. Для изменения этого поведения вы можете воспользоваться встро- встроенными функциями NVL и COALESCE (Oracle9i). V Использование функции NVL Если вам нужно вернуть или отсортировать резуль- результаты запроса поданным, среди которых могут быть значения NULL, вы можете воспользоваться встро- встроенной функцией NVL, чтобы заменить значения NULL каким-то другим значением. Например, стол- столбец NUM_ROWS в представлении USERJTABLES имеет значение только для тех таблиц, которые анализи- анализировались ранее. В данном случае функция NVL пре- преобразует значения NULL в нулевые: SELECT tablejiame. NVL(num_rows,0) FROM userjables ORDER BY NVL(num_rows.O); Будьте осторожны при применении функции NVL в предложении WHERE. Использование функ- функции NVL или любой другой функции для индекси- индексированного столбца в предложении WHERE может не дать Oracle возможности задействовать другие ин- индексы, основанные на этом столбце. Использование функции COALESCE Введенная в Oracle9i функция COALESCE является расширением функции NVL Она может принимать
Значения NULL любое количество параметров и возвращать в ка- качестве результата первое значение, отличное от NULL. Рассмотрим такой вложенный вызов функ- функции NVL: SELECT NVL(employee_nickname. NVL(emp]oyee_f i rst_name. employee_last_name)) FROM employee; Вложенные вызовы функции NVL затрудняют определение цели этого запроса. В Oracle9i данный запрос можно сделать значительно проще, исполь- используя функцию COALESCE: SELECT COALESCE(employeejrickname, empl oyee_f i rst_name, emp] oyeej a st jiame) FROM employee; Этот запрос возвращает уменьшительное имя каждого служащего. Если у служащего нет умень- уменьшительного имени, возвращается его «нормальное» имя. Если отсутствует имя, возвращается фамилия. Использование функции COALESCE делает такой по- порядок присвоения значений пустым значениям бо- более очевидным, чем предыдущее решение с функ- функцией NVL. Если все параметры функции COALESCE име- имеют значение NULL, она возвращает NULL. Вы мо- можете избежать такого результата, указав в каче- качестве последнего параметра константу, а не имя столбца.
32 Выборка данных Выражения CASE Выражения CASE реализуют стандартный меха- механизм ANSI для внедрения логики инструкций IF...THEN...ELSE в SQL-инструкции. До введения вы- выражения CASE необходимо было использовать специфичную для Oracle функцию DECODE, чтобы включить условную логику в SQL-инструкцию. Выражения CASE можно включать в списки выбо- выбора, в предложения WHERE, в предложения HAVING и в другие синтаксические конструкции, в которых разрешено указывать выражения. ПРИМЕЧАНИЕ Выражения CASE впервые появились в Огас1е8/ и затем были расширены в Oracle9/ за счет до- добавления поисковой формы выражения CASE. Автор лично видел сообщения, в которых утверждалось, что выражение CASE из PL/SQL не работает в Oracle Release 8.1.7. Простые выражения CASE Простые выражения CASE концептуально близки к функции DECODE. Общий синтаксис выражения CASE следующий: CASE выражение WHEN выражение^ THEN возвращаемое_выражение_1 WHEN выражение_2 THEN возвращаемое_выражение__2
Выражения CASE 33 ELSE возвращаемое_8ыражение END Предложение ELSE является необязательной ча- частью выражения CASE, Ниже приведен пример про- простого выражения CASE: SELECT coursejiame, CASE period WHEN 1 THEN 'First1 WHEN 2 THEN 'Second' WHEN 3 THEN 'Third1 WHEN 4 THEN 'Fourth' WHEN 5 THEN 'Fifth' ELSE 'Unknown1 END periodjiame FROM course; Параметр periocLname после ключевого слова END является псевдонимом столбца. Он не обяза- обязателен, но при работе с SQL*Plus иногда полезно присваивать имена вычисляемым столбцам. Эквивалентное выражение с функцией DECODE: SELECT coursejiame, DECODECperiod.l. 'First\2. 'Second1,3. 'Third1. 4/Fourth\5.'Fifth1, 'Unknown') periodjiame CASE FROM course; Выражение CASE, в отличие от функции DECODE, является частью стандарта ANSI* Поэтому при воз- возможности выбора предпочтительнее использовать CASE.
34 Выборка данных Поисковые выражения CASE В поисковом выражении CASE могут указываться условия сравнения в виде логических выражений, в отличие от простого выражения CASE, в котором используются только значения: SELECT coursejiame. CASE WHEN period >- 1 AND period <- 3 THEN 'Morning1 WHEN period >- 4 AND period <= 6 THEN 'Afternoon' ELSE 'After School' END FROM course; Гибкость поисковых выражений CASE позволя- позволяет вам делать то, что раньше было трудно или не- невозможно выполнить. Объединение таблиц (Oracle8/) Довольно часто требуется соединить данные из двух или более таблиц и возвратить связанную ин- информацию. Такая операция называется объедине- объединением таблиц. Для объединения двух таблиц нужно указать их в списке предложения FROM, разделив запятыми. Например: SELECT user_constraints.constraint_name, userj:onstraints,constraint_type. user_cons_columns.column jname FROM user constraints, user cons columns;
Объединение таблиц (Oracle8i) 35 Этот запрос возвращает прямое (картезиан- (картезианское) произведение таблиц, то есть нее возможные комбинации всех строк обеих таблиц. Прямое про- произведение таблиц редко требуется на практике, и почти всегда накладывается некоторое условие в предложении WHERE — так, чтобы комбинирова- комбинировались только связанные строки. Следующий, более полезный запрос возвращает список имен ограни- ограничений вместе со столбцами, вовлеченными в каж- каждое ограничение: SELECT user_constraints.constгаintjiame. user_constraints.constrairit_type, user_cons_columns.col umnjiame FROM user_constraints. user_cons_columns WHERE user_constraints.constraint_name = user_cons_columns.constraintjname: Поскольку в этих таблицах имеются столбцы с совпадающими именами, ссылки на столбцы долж- должны содержать имена таблиц. Вы, наверное, согла- согласитесь, что в этом случае код становится неуклю- неуклюжим и громоздким. Поэтому в таких случаях следу- следует снабдить таблицы псевдонимами и использовать их при идентификации столбцов. Например: SELECT uc*constгаintjiame. uc.constraint_type, ucc.со]umnjiame FROM user_constraints uc. user_cons_columns ucc WHERE uc.constraintjiame = ucc.constraint name:
36 Выборка данных Псевдоним ис используется для таблицы user_constraints, а псевдоним исс — для таблицы user_cons_columns. Этот вариант запроса легче чи- читать, поскольку он не перегружен длинными име- именами таблиц. Внешние и внутренние объединения В предыдущих примерах использовались внутрен- внутренние объединения, возвращающие данные только в том случае, когда обе таблицы имеют строку, ко- которая удовлетворяет условиям объединения. На- Например, следующий запрос возвращают только те таблицы, которые имеют заданные для них огра- ограничения: SELECT ut, table jiame, uc. const га intjiame FROM user_tabTes ut. user_constraints uc WHERE ut.tablejiame = uc.tablejiame; Внешнее объединение возвращает строки одной таблицы, даже если в другой таблице нет соответ- соответствующих строк. Для задания внешнего объедине- объединения в Oracle нужно поместить знак плюс в круг- круглых скобках ((+)) после имен столбцов из необяза- необязательной таблицы в предложении WHERE. Например: SELECT ut.tablejiame. uc.constraintjiame FROM user_tables ut, user_constraints uc WHERE ut.tablejiame - uc.tablejiame(+); Символы (+) после столбца ue.table_name дела- делают таблицу user_constraint необязательной. Запрос возвращает все таблицы, а для тех таблиц, которые
Объединение таблиц (Oracle9i) 37 не имеют соответствующих записей ограничений, Oracle помещает значение NULL в столбец имен ограничений. Объединение таблиц (Oracle9/) В Oracle9i введен новый синтаксис объединения таблиц, а именно синтаксис, который предписан стандартом ANSI SQL/92. Теперь условия объедине- объединения могут записываться в предложении FROM, об- облегчая понимание логики запроса. Кроме этого, новый синтаксис поддерживает полные внешние объединения, которые было невозможно получить с помощью прежнего синтаксиса. Если нет необхо- необходимости поддерживать совместимость с прежними версиями Oracle, настоятельно рекомендуется ис- использовать новый синтаксис. Примеры таблиц Примеры запросов в текущем разделе, посвящен- посвященном объединению таблиц в Огас1е9г, основаны на следующих трех таблицах: SQL> SELECT * 2 FROM course; COURSE_NAME PERIOD Spanish I 1 Spanish 1 6 U.S. History 3
38 Выборка данных English II 4 SQL> SELECT * 2 FROM enrollment; COURSE JIAME PERIOD STUDENTJAME English II 4 Michael Spanish I 1 Billy Spanish I 6 Sky Lynn Spanish I 1 Jeff English II 4 Jenny- SQL> SELECT * 2 FROM student; STUDENT NAME GRADE Michael 6 Billy 3 Sky Lynn 1 Jeff 1 Jenny 8 Обратите внимание на то, что для записи о сту- студентке Sky Lynn в таблице enrollment нет соответ- соответствующей записи в таблице course.,Sky Lynn заре- зарегистрирована для Spanish I (буква "), в то время как курс называется Spanish 1 (цифра "). Этот факт становится значимым, если выполняется внешнее объединение и используется новое пред- предложение USING.
Объединение таблиц (Oracle9i) 39 Внутренние объединения Ключевые слова INNER JOIN в предложении FROM задают внутреннее объединение двух таблиц, а ус- условия объединения определяет предложение ON. Например: SELECT c.coursejiame, с.period, e.student jiame FROM course c INNER JOIN enrollment e ON c,course_name * e.coursejiame AND c.period - e.period; Другие предложения, такие как WHERE и ORDER BY, располагаются после предложения FROM: SELECT c.coursejname. c.period, e. student jiame FROM course с INNER JOIN enrollment e DN c.coursejiame - e.coursejiame AND c.period - e.period WHERE с period < 9 ORDER BY с period, c.coursejiame; Порядок объединения При объединении трех таблиц и более порядок их объединения задается с помощью круглых скобок. Приведенный ниже запрос объединяет сначала таб- таблицы course и enrollment и полученный результат объединяет с таблицей student: SELECT c.coursejiame, с,period, s.studentjiame, s.grade FROM (course с INNER JOIN enrollment e ON c.coursejiame=e.coursejiame AND с periods, period)
40 Выборка данных .INNER JOIN student s ON e.student jiame^s.student_name; Если круглые скобки отсутствуют, Oracle выпол- выполняет объединение слева направо. В данном примере круглые скобки явно определяют порядок объедине- объединения, который и так используется по умолчанию. Левое и правое внешние объединения Для того чтобы выполнить внешнее объединение, тип которого традиционно поддерживается Oracle, используйте предложение LEFT OUTER JOIN или RIGHT OUTER JOIN. Левое и правое объединения раз- различаются только порядком записи таблиц в пред- предложение FROM. Приведенный ниже запрос, в кото- котором используется прежний синтаксис, возвращает все строки из таблицы course и только соответству- соответствующие им строки из таблицы enrollment: SELECT с.coursejiame, с.period, e.studentjiame FROM course c. enrollment e WHERE c.coursejiame - e. coursejiame(+) AND c.period = e.period(+); В этом запросе таблица enrollment считается необязательной, поскольку символы (+) добавлены к каждому столбцу этой таблицы. Последующие два запроса выполняют то же самое объединение с использованием нового синтаксиса, соответству- соответствующего стандарту ANSI: SELECT c.coursejiame, с.period, e.studentjiame FROM course с LEFT OUTER JOIN enrollment e
Объединение таблиц (Oracle9i) 41 ON c.coursejiame * e.course jiame AND c.period - e.period; SELECT c.coursejname, c.period, e.student jiame FROM enrollment e RIGHT OUTER JOIN course с ON c.coursejiame - e.coursejiame AND c.period - e.period: Эти запросы различаются тем, что в первом из них таблица course указана первой, в то время как во втором первой указана таблица enrollment. Клю- Ключевые слова LEFT OUTER JOIN делают обязательной левую таблицу, а ключевые слова RIGHT OUTER JOIN — правую. В обоих запросах enrollment является не- необязательной таблицей, a course — обязательной. Полное внешнее объединение Возможность выполнять полное внешнее объеди- объединение появилась в Oracle9i\ Полное внешнее объ- объединение возвращает все строки из обеих таблиц, и строки одной таблицы выводятся с соответству- соответствующими строками другой таблицьь если такое со- соответствие обнаруживается. В Oracle8i можно бы- было симулировать внешнее объединение, используя запрос UNION: SELECT c.coursejname. с.period, e.studentjiame FROM course c. enrollment WHERE c.coursejname * e.course_name(+) AND c.period - e.period(+) UNION
42 Выборка данных SELECT e.coursejiame. e.period, е,student jiame FROM enrollment e WHERE NOT EXISTS ( SELECT * FROM course c2 WHERE c2.coursejiame - e.course_name AND c2.period = e.period Для того чтобы обработать этот запрос, Oracle необходимо выполнить каждую инструкцию SELECT отдельно и затем объединить результаты. В прин- принципе, тот же результат можно получить путем двух полных сканирований каждой таблицы. В Oracle9z для выполнения таких объединений вы можете ис- использовать ключевые слова FULL OUTER JOIN: SQL> SELECT с,coursejiame, c.period, e.studentjiame 2 FROM course с FULL OUTER JOIN enrollment e 3 ON c.courseniame - e.course_name 4 AND c.period ** e.period: COURSEJIAME PERIOD STUDENT_NAME English II 4 Michael Spanish I 1 Billy Spanish I 1 Jeff English II 4 Jenny Spanish 1 6 U.S. History 3 Sky Lynn Как вы можете видеть, этот запрос более поня- понятен, чем запрос с оператором UNION. Он состоит из
Объединение таблиц <Oracle9r) 43 одной инструкции SELECT и должен выполняться более эффективно, чем предыдущий запрос с опе- оператором UNION. Задание условий объединения Oracle9i поддерживает три способа задания усло^ вий объединения: с помощью предложений ON, NATURAL и USING. Наиболее общим подходом явля- является использование предложения ON, в котором можно задать любой тип условий объединения. Например: SELECT c.coursejiame, с.period, е.student jiame FROM course с FULL OUTER JOIN enrollment e ON c.coursejiame = e.coursejiame AND c.period s e.period; Данный запрос выполняет объединение по ра- равенству, он выбирает все строки, в которых указан- указанные столбцы в обеих таблицах содержат одинаковые значения. Поскольку в обеих таблицах идентичны имена столбцов, указанных в условиях объедине- объединения, это объединение считается естественным. Для естественных объединений Oracle поддержи- поддерживает краткий синтаксис: SELECT coursejiame. period, e.studentjiame FROM course с NATURAL FULL OUTER JOIN enrollment e; Обратите внимание на то, что в списке выбора псевдонимы таблиц не используются для столбцов, но которым выполняется объединение, В естест- естественном объединении Oracle принимает во внима^
44 "" Выборка данных ние только одну версию столбца, по которому вы- выполняется объединение. ВНИМАНИЕ Естественные объединения небезопасны! Ис- Используйте их только в запросах, которые вы вводите в интерактивном режиме. Несмотря на удобство, вы должны проявлять осторожность при использовании синтаксиса с клю- ключевым словом NATURAL Рассмотрим, что может слу- случиться, если при написании программы вы задей- задействуете этот синтаксис и затем добавите столбец UPOATE_TIMESTAMP в каждую свою таблицу. Этот столбец будет автоматически включен во все ваши объединения, и все запросы на объединение нач- начнут возвращать неправильные результаты. В слу- случае использования ключевого слова NATURAL насто- настоятельно рекомендуется включать в запрос предло- предложение USING. С предложением USING можно задействовать другой краткий синтаксис для выполнения объе- объединения по равенству. Различие между этими дву- двумя вариантами синтаксиса состоит в том, что при использовании предложения USING вы явно задае- задаете столбцы в условиях объединения. Последующие изменения таблиц не повлияют на семантику ва- ваших запросов. Приведенный ниже запрос с пред- предложением USING выполняет то же самое полное
Итоговые запросы 45 внешнее объединение, что и в предыдущих двух примерах: SQL> SELECT coursejriame. period, e.student name 2 FROM course с FULL OUTER JOIN enrollment e 3 USING (coursejname. period); COURSEJIAME English II Spanish I Spanish I English II Spanish 1 U.S. History Spanish I PERIOD STUDENTJIAME 4 Michael 1 Billy 1 Jeff • 4 Jenny 6 3 6 Sky Lynn Сравните результаты этого запроса с результа- результатами, показанными ранее в разделе «Полное внешнее объединение». Обратите внимание на то, что в результатах последнего запроса имя курса (COURSE_NAME) отображается для Sky Lynn. Это происходит потому, что при использовании клю- ключевого USING или NATURAL Oracle принимает во вни- внимание только одну версию каждого столбца, по ко- которому объединяются таблицы, и берет значение из той таблицы, из которой программа может это сделать. Итоговые запросы Предложения GROUP BY и HAVING совместно со встро- встроенными агрегатными функциями Oracle дают
46 Выборка данных возможность суммировать возвращаемые запро- запросом данные. Использование агрегатных функций Агрегатные функции принимают данные из нескольких строк и возвращают одно итоговое зна- значение. Например, в следующем запросе использу- используется функция COUNT. Этот запрос возвращает ко- количество таблиц, владельцем которых вы являе- являетесь; SELECT COUNT(*) FROM,user tables: Oracle поддерживает несколько агрегатных функций; они перечислены в табл. 1. Таблица 1. Агрегатные функции Функция Описание AVG Возвращает среднее арифметическое всех значений в группе COUNT Возвращает количество значений в группе, отличных от NULL. COUNT{*) является специальной формой этой функции и возвращает количество строк МАХ Возвращает минимальное значение в группе MIN Возвращает максимальное значение в группе
Итоговые запросы 47 Функция Описание STDDEV Возвращает стандартное отклонение всех значений в группе SUM Возвращает сумму всех значений в группе VARIANCE Возвращает дисперсию всех значений в группе Использование предложения GROUP BY Помимо вычисления итоговых значений для всех данных, возвращаемых запросом, вы также можете суммировать данные для каждого отли- отличающегося значения в столбце. Другими слова- словами, наряду с общими итогами вы можете вычис- вычислять промежуточные итоги. Например, следую- следующий запрос возвращает количество столбцов в каждой таблице».владельцем которой вы явля- являетесь: SELECT ut.tablejiame. COUNT(utc,column_name) FROM user_tables ut. user_tabj:olumns utc WHERE ut.tablejiame = utc.tablejiame GROUP BY ut.tablejiame ORDER BY ut.tablejiame; Следующий запрос расширяет предыдущий за- запрос и выводит количество столбцов в каждой таб- таблице, к которой вы имеете доступ. На этот раз ре- результаты группируются в одной строке для каждой
48 Выборка данных уникальной комбинации пользователя и имени та- таблицы: SELECT at.owner. at.tablejiame, COUNT( ate.columnjiame) FROM all_tables at. all_tab_columns ate WHERE at.tablejiame - atc.table_name GROUP BY at .'owner, at.tablejiame ORDER BY at.owner, at.tablejiame: Для того чтобы результаты запроса с ключе- ключевым словом GROUP BY возвращались в определен- определенном порядке, в запрос нужно включить необяза- необязательное предложение ORDER BY, Иногда может по- показаться, что Oracle автоматически сортирует результаты запроса с ключевым словом GROUP BY, однако это может быть простым следствием упорядоченности данных в исходных таблицах. Если вы хотите, чтобы результаты действительно сортировались, необходимо включить в запрос предложение ORDER BY. Столбцы в списке выбора запроса GROUP BY должны быть перечислены в предложении GROUP BY или указаны в качестве параметров агрегатной функции, используемой в запросе. Ограничение на вывод итоговых результатов Предложение HAVING дает возможность возвратить только те итоговые результаты, которые представ- представляют для вас интерес. Предложение HAVING дей-
Итоговые запросы 49 ствует подобно предложению WH ERE, но отличается тем, что заданные в нем условия применяются к ито- итоговым результатам. Например, следующий запрос возвращает список всех таблиц, для которых вы не определили никаких индексов: SELECT ut.tablejiame. COUNT(ui.indexjiame) FROM user_tables ut. useMndexes ui WHERE ut.tablejiame = ui.table_name(+) GROUP BY ut.table name HAVING COUNT(ui.indexjiame) = 0; Этот запрос подсчитывает количество ин- индексов в каждой таблице и возвращает только те та'блицы, для которых количество индексов рав- равно 0. Старайтесь не помещать в предложение HAVING условий, не основанных на итоговых значениях. Рассмотрим, например, два таких запроса: SELECT at.owner, at.tablejiame, COUNT(ate.columnjiame) FROM all_tables at. all_tab_columns ate WHERE at.tablejiame = atc.tablejiame GROUP BY at.owner, at.tablejiame HAVING at.owner <> 'SYS1 AND at.owner <> 'SYSTEM' ORDER BY at.owner, at.tablejiame; SELECT at.owner, at.tablejiame. COUNK ate. col umnjiame) FROM all^tables at, all_tab_columns ate WHERE at.table name = ate.table name
50 Выборка данных AND at.owner <> 'SYS' AND at.owner <> 'SYSTEM' GROUP BY at.owner, at.table jiame ORDER BY at.owner, at.table_name; Оба запроса возвращают одинаковый резуль- результат— количество столбцов в каждой таблице (за исключением тех таблиц, владельцем которых яв- является пользователь SYS или SYSTEM). Второй за- запрос, однако, выполняется более эффективно, поскольку таблицы, принадлежащие SYS и SYSTEM, отбрасываются предложением WHERE перед вычи- вычислением итоговых значений. Ключевые слова ALL и DISTINCT Агрегатные функции, перечисленные в табл. 1, иг- игнорируют значения NULL и но умолчанию учиты- учитывают повторяющиеся значения. Ключевые слова ALL и DISTINCT позволяют изменить поведение этих функций. Например: SELECT COUNT (OISTINCT tablejiame) FROM user tab columns; SELECT COUNT (ALL tablejiame) FROM userjtab_columns: В первом запросе для подсчета количества таб- таблиц используется ключевое слово DISTINCT. Во вто- втором запросе ключевое слово ALL позволяет подсчи- подсчитать общее количество столбцов, определенных в этих таблицах.
Объединения 51 Объединения SQL поддерживает четыре оператора объединения, которые позволяют объединить результаты двух запросов в один. Операторы объединения перечис- перечислены в табл. 2. Таблица 2. Операторы объединения языка SQL Оператор Описание UNION Объединяет результаты двух запросов и затем исключает повторяющиеся строки UNION ALL Объединяет результаты двух запросов без исключения повторяющихся строк MINUS Возвращает набор строк одного запроса, из которого исключены все строки, возвращаемые другим запросом INTERSECT Возвращает только строки, содержащиеся в наборах строк обоих запросов Приведенный ниже запрос с оператором MINUS возвращает список всех таблиц, для которых вы не определили ни одного индекса: SELECT tablejiame FROM userjtables MINUS SELECT DISTINCT table name
52 Выборка данных FROM useM ndexes WHERE tablejwner = USER ORDER BY tablejiame; Первый запрос возвращает список всех таблиц, принадлежащих вам. Второй запрос возвращает список ваших таблиц с индексами. Оператор MINUS исключает индексированные таблицы из первого списка, оставляя только иеиндексированные таб- таблицы. ПРИМЕЧАНИЕ Если два или более запроса объединяются вме- вместе, разрешается использовать только одно предложение ORDER BY, и оно должно на- находиться в последним запросе. Сортируются только строки, возвращаемые в качестве ко- конечного результата. Операции с разделами Если вы выбираете данные из сегментированных таблиц и вам требуются данные только из опре- определенного раздела, то вы можете явно указать нужный раздел или подраздел. Вот пример задания раздела: SELECT * FROM course PARTITION B001j;ourses); Так задается подраздел: SELECT * FROM course SUBPARTITION B001_qtr01_courses);
Операции с разделами 53 Будьте осторожны при использовании кон- конкретных имен разделов в запросах, внедренных в программы, поскольку эти запросы завершатся неудачно, если указанные разделы не существуют. Приведенный здесь синтаксис можно исполь- использовать также для задания имен разделов и подраз- подразделов в инструкциях INSERT, UPDATE и DELETE.
Вставка данных Инструкция INSERT используется для добавления новых строк в таблицу. Ее возможности расшире- расширены в Oracle9i, и теперь она позволяет производить прямую вставку но пути, а также вставлять данные одновременно в несколько таблиц. Для примеров этого раздела мы добавили столбец в таблицу COURSE, показанную ранее в разделе « Объединение таблиц (Огас1е9*)к ALTER TABLE COURSE ADD ( coursejiours NUMBER DEFAULT 4): Вставка строки Для того чтобы добавить одну строку в таблицу, задайте список столбцов, в которые будут встав- вставляться значения, и укажите эти значения в предло- предложении VALUES: INSERT INTO COURSE (coursejiame, period. coursejiours) VALUES (Trench Г.5. DEFAULT); Ключевое слово DEFAULT, введенное в Oracle9i, используется в этом запросе для того, чтобы явно затребовать значение но умолчанию для столбца course_hours. С помощью ключевого слова NULL,
Вставка результатов запроса 55 доступного во всех версиях Oracle, вы можете явно вставить в столбец значение NULL Список столбцов можно опустить, если вы пре- предоставляете значения для всех столбцов таблицы и в том порядке, в котором они описаны при опре- определении таблицы: INSERT INTO COURSE VALUES ('French Г. 5. DEFAULT); Этот краткий синтаксис не рекомендуется ис- использовать, если запросы выполняются не в ин- интерактивном режиме. Безопаснее задавать имена столбцов. Вставка результатов запроса Для того чтобы вставить результаты запроса в таб- таблицу, используйте синтаксис INSERT...SELECT...FROM. Например, следующая инструкция INSERT создает новую строку в таблице COU RSE для любого не опре- определенного на данный момент курса, на который студенты могут записываться: INSERT INTO COURSE (coursejiame. period) SELECT DISTINCT coursejiame. period FROM enrollment e WHERE NOT EXISTS ( SELECT * FROM course с WHERE c.coursejiame = e.coursejiame AND c.period - e.period
56 Вставка данных Если в таблицу добавляется большое количе- количество данных, то скорость выполнения инструкции INSERT...SELECL..FROM можно повысить, используя прямую вставку по пути. Для этого нужно использо- использовать совет APPEND (см. подраздел «Советы опти- мизатору^ в разделе «Настройка SQL-инструк- SQL-инструкций^). Прямая вставка по нути функционально подобна прямой загрузке по пути: данные пишут- пишутся прямо в файлы базы данных в обход кэша базы данных. Многотабличные вставки (Oracle9/) Миоготабличные вставки в Огас1е9г позволяют вста- вставить результаты запроса SELECT одновременно в не- несколько таблиц. Для того чтобы вставить строки в нужные таблицы, нужно использовать предложе- предложения WHEN в инструкции INSERT. Приведенная ниже инструкция INSERT, опира- опираясь на функциональность многотабличной встав- вставки Oracle9i, выполняет следующие операции: О вставляет курсы для семестра 6 в таблицу course_6; О вставляет курсы для семестра 3 в таблицу course__3; О вставляет все другие курсы в таблицу course_other. INSERT ALL WHEN (period-6) THEN
Многотабличные вставки (Oracle9i) 57 INTO courseJ> (course_name. period) values(coursejiame. period) WHEN (period-3) THEN INTO course_3 (coursejiame, period) va1ues(course name, period) ELSE . INTO course_other (coursejiame, period) values(coursejname. period) SELECT coursejiame. period FROM course; Ключевое слово ALL заставляет Oracle прове- проверить все предложения WHEN для каждой строки, возвращаемой запросом SELECT, Если строка удовлетворяет нескольким предложениям WHEN, она вставляется во все соответствующие табли- таблицы. При использовании ключевого слова FIRST вставка ограничивается первым предложением WHEN, условие которого выполняется для теку- текущей строки. Предыдущая инструкция INSERT иллюстриру- иллюстрирует механизм условной многотабличной вставки. Используйте безусловную многотабличную встав- вставку, чтобы выполнить каждое заданное вами пред- предложение INTO. Например: INSERT ALL INTO courses_taken (coursejiame) values (course_name) INTO studentsjregistered (studentjiame) values (student name)
58 Вставка данных SELECT coursejiame. studentjiame FROM enrollment; Обратите внимание на то, что при выполнении как условной, так и безусловной многотабличной вставки конечные таблицы в предложениях INTO должны быть разными.
Обновление данных Инструкция UPDATE позволяет изменять значения столбцов в существующих строках таблицы. Простые обновления Простая инструкция UPDATE имеет следующий вид: UPDATE имя^таблицы SET имя_столбца- = новое_значение. имя_столбца = новое_значение. имя_столбца = новое_значение, WHERE условие_отбора; Например, следующая инструкция решает не- небольшую проблему — заменяет в имени курса циф- цифру 1 буквой I: UPDATE course SET coursejiame = 'Spanish Г WHERE coursejiame = 'Spanish Г: Будьте осторожны при выполнении обновле- обновлений. Если вы опустите предложение WHERE, ваши изменения будут внесены во все строки таблицы. Некоррелированные вложенные запросы в предложении SET Вместо задания нового значения для столбца в пред- предложении SET вы можете использовать вложенный
60 Обновление данных запрос, возвращающий только одно значение из таблицы. Это значение становится новым значени- значением столбца. Например: UPDATE enrollment SET period * ( SELECT period FROM course WHERE coursejiame = 'English ID. coursejiame - ( SELECT course_name FROM course WHERE course_name = 'English ID. WHERE coursejiame - 'English II1: Присваивание столбцам period и course_name их текущих значений с помощью вложенного запроса не имеет большого смысла. Это сделано здесь толь- только для того, чтобы показать вам, что в инструкции UPDATE можно использовать более одного вложен- вложенного запроса. Коррелированные вложенные запросы в предложении SET Вложенные запросы в инструкции UPDATE обычно бывают более полезными, когда они коррелирован- коррелированные. Коррелированный вложенный запрос возвра- возвращает строку, которая зависит от текущей обновля- обновляемой строки. Например, следующая инструкция UPDATE использует коррелированный вложенный запрос для того, чтобы заменить все семестры в таб-
Коррелированные вложенные запросы 61 лице enrollment значениями, взятыми из таблицы course: UPDATE enrollment e SET period = ( SELECT MIN(period) FROM course с WHERE c.coursejiame = e.coursejiame); Обратите внимание на использование псевдо- псевдонимов таблиц сие для идентификации имен столб- столбцов в предложении WHERE. Применение функции MIN вызвано тем, что некоторые курсы (например, Spanish I) предлагаются в нескольких семестрах. При использовании коррелированных вложен- вложенных запросов вы можете указать несколько столб- столбцов в предложении SET, но не забудьте заключить их в круглые скобки: UPDATE enrollment e SET (coursejiame. period) = ( SELECT coursejiame, period FROM course с WHERE c.coursejiame = e.coursejiame AND c.period - e.period): Инструкция UPDATE, которая здесь приведена только для примера, использует вложенный запрос, чтобы присвоить столбцам course_name и period их же текущие значения.
Удаление данных Инструкция DELETE удаляет строки из таблицы. Простые удаления Простая инструкция DELETE имеет следующий сип- таксис: * DELETE FROM имя_таблицы WHERE услозие_отбора: Все строки, удовлетворяющие условию отбора, будут удалены. Например, следующий запрос уда- удаляет курс Spanish I для семестра б: DELETE FROM course WHERE course_name * "Spanish Г AND period =» 6; Будьте осторожны с инструкциями DELETE, Если вы опустите предложение WHERE, это закончится удалением всех строк из таблицы. Удаление всех строк (TRUNCATE) Инструкция DELETE без предложения WHERE удаля- удаляет из таблицы все строки: DELETE FROM course: Удаление всех строк таким способом требует дополнительных ресурсов. Удаление каждой стро- строки регистрируется в журнале изменений базы дан-
Удаление дубликатов строк 63 пых, и копия каждой удаляемой строки записыва- записывается в сегмент отката на случай отката транзакции. Более эффективный механизм удаления всех строк из таблицы предоставляет инструкция TRUNCATE: TRUNCATE TABLE course; Инструкция TRUNCATE требует только одну ко- короткую запись в журнале изменений базы данных и не генерирует никаких данных для отката и от- отмены изменений. Поэтому гораздо быстрее «обре- «обрезать» таблицу с помощью инструкции TRUNCATE, чем удалить все строки с помощью инструкции DELETE. Но будьте осторожны, поскольку вы не смо- сможете откатить назад инструкцию TRUNCATE. По умолчанию инструкция TRUNCATE заново раз- разметает все экстенты (сегменты непрерывной памя- памяти), выделенные таблице. При желании вы можете сохранить экстенты для дальпейшего использования: TRUNCATE TABLE course REUSE STORAGE: Эта инструкция переустанавливает курсор таб- таблицы так, чтобы он больше не содержал никаких строк, но все существующие экстенты остались для таблицы выделенными. Сохранение существую- существующих экстентов может быть полезным, если вы пла- планируете снова загрузить таблицу. Удаление дубликатов строк Время от времени возникает необходимость уда- удалить дубликаты строк из таблицы. Потребность
64 Удаление данных 9 в этом чаще возникает при тестировании, чем во время эксплуатации системы. Один из подходов к удалению дубликатов строки состоит в том, что удаляются все такие строки за исключением одной с наименьшим значением идентификатора ROWID; DELETE FROM course WHERE ROWID NOT IN ( SELECT MIN(ROWID) FROM course GROUP BY coursejiame. period); Предложение GROUP BY во вложенном запросе определяет в качестве дубликатов строки, содержа* щие одинаковые имя курса и помер семестра. Вло- Вложенный запрос возвращает список значений ROWID, в котором каждое значение представляет собой минимальный идентификатор ROWID для опреде- определенной комбинации имени курса и номера семест- семестра. Эти строки остаются в таблице. Ключевое сло- слово NOT IN обеспечивает удаление всех других по- повторяющихся строк.
Слияние данных (Oracle9/) Распространенная проблема обработки данных — определить, является ли конкретный набор данных новой строкой таблицы или обновлением сущест- существующей строки, и выполнить инструкцию INSERT или UPDATE соответственно. В прошлом этот про- процесс почти всегда выполнялся но крайней мере в два этапа и требовал двух полных циклов обра- обращения к базе данных. Инструкция MERGE, введен- введенная в Oracle9z, делает процессы вставки и обновле- обновления данных более простыми и эффективными, чем прежде. Об[ций синтаксис инструкции MERGE: MERGE INTO таблица USING источник^данных ON (условие) WHEN MATCHED THEN лредложение^ирс^е WHEN NOT MATCHED THEN предложение^1п5ег1; В этом синтаксисе источником данных может быть таблица, представление или запрос. Oracle использует условие в предложении ON, чтобы опре- определить, для обновления или для вставки в таблицу нужна текущая строка. Пример инструкции MERGE: MERGE INTO course с USING (SELECT coursejname. period,
66 Слияние данных (OracJe9/) coursejiours FROM coursejjpdates) cu ON (c.coursejiame - cu.coursejiame AND c.period = cu.period) WHEN MATCHED THEN UPOATE SET c.coursejnours = cu.coursejwurs WHEN NOT MATCHED THEN INSERT (cxoursejiame, c.period. c.coursejiours) VALUES (cu.coursejiame, cu,period, cu.coursejwurs); При выполнении этой инструкции Oracle счи- считывает каждую строку, возвращаемую запросом в предложении USING, и проверяет условие в пред- предложении ON. Если условие в предложении ON имеет значение TRUE, строка используется для обновления столбца course_hours. В противном случае она счи- считается повой строкой и вставляется в таблицу course. Следующий пример иллюстрирует применение инструкции MERGE к данным в таблице course: SQL> SELECT * FROM course; COURSEJWIE PERIOD COURSE JOURS Spanish I 1 U.S. History 3 English II 4 French I 5 4 SQL> SELECT * FROM course^updates:
Удаление дубликатов строк 67 COURSE JAME PERIOD COURSE JOURS Spanish I 1 3 U.S. History 3 3 English II 4 3 French I 5 3 Spelling 6 2 Geography 2 3 SGL> MERGE INTO course с 2 USING (SELECT coursejiame. period. 3 coursejours 4 FROM coursejjpdates) cu 5 ON (c.coursejiame a cu.coursejiame 6 AND c.period = cu.period) 7 WHEN MATCHED THEN 8 UPDATE 9 SET c. coursejours - cu. course Jours 10 WHEN NOT MATCHED THEN 11 INSERT (c.coursejiame, с period, 12 c, course Jours) 13 VALUES (cu.coursejiame. cu.period. 14 cu. course Jours); 6 row merged. SOL> SELECT * FROM course; COURSE JAME PERIOD COURSE JOURS Spanish I 1 3 U.S. History 3 3
68 Слияние данных (Gracle9/)f English II French I Spelling Geography 4 5 6 2 3 3 2 3 Обратите внимание на то, что всего одна ип-1 струкция обновила значения столбца course_hours§ в четырех существующих строках и добавила две:* новые строки в таблицу course.
?¦'¦ Управление транзакциями ^Oracle предоставляет несколько инструкций для -управления транзакциями. По умолчанию транзак- транзакция начинается одновременно с выполнением пер- • вой SQL-инструкции и завершается при выполне- выполнении одной из следующих инструкций: О инструкции COMMIT; О инструкции ROLLBACK; О DDL-инструкции. ¦ DDL-инструкции (например, ALTER и CREATE) 'характерны тем, что они неявно завершают любую открытую транзакцию. Таким образом, с помощью одной DDL-инструкции можно и начать, и завер- завершить транзакцию. Инструкция SET TRANSACTION Инструкция SET TRANSACTION позволяет не только ;.начать явную транзакцию, но и задать атрибуты транзакции, такие как уровень изоляции. 'SET TRANSACTION [атрибут [.атрибут...] NAME 'имятранзакции'; атрибут := ¦ {READ {ONLY | WRITE} ISOLATION LEVEL {SERIALIZABLE | REAO COMMITTED} USE ROLLBACK SEGMENT имя_сегмента }
70 Управление транзакциями- Уровень изоляции READ COMMITTED при- применяется по умолчанию. Он позволяет вам увидеть изменения, сделанные другими транзакциями, как только они завершатся. При использовании уров- уровня изоляции SERIAUZABLE вы не сможете изме- изменять данные, модифицированные другими транзак- транзакциями, если ом и не были завершены перед откры- открытием вашей транзакции. Транзакции с уровнем SERIALIZABLE также обеспечивают согласован- согласованность данных. Вы не увидите изменений, сделан- сделанных другими пользователями после открытия ва- вашей транзакции. Следующая инструкция открыва- открывает транзакцию типа SERIALIZABLE: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE NAME 'Jonathan''s Transaction'; Транзакция типа READ ONLY дают возможность выполнять запросы, но не разрешают изменять дан- данные, обеспечивая согласованность данных для чте- чтения. В ходе выполнения транзакции типа READ ONLY вы не увидите изменений, сделанных другими поль- пользователями. Предложение USE ROLLBACK SEGMENT позволяет назначить транзакции определенный сегмент отка- отката. Это имеет значение для больших транзакции, поскольку вы можете назначать им большие сег- сегменты отката. Например: SET TRANSACTION USE ROLLBACK SEGMENT large batch;
^Инструкция ROLLBACK 71 jt- .— _ — ^Инструкция SAVEPOINT ^Инструкция SAVEPOINT позволяет установить 1в транзакции именованную точку, до которой вы ^можете при необходимости произвести откат тран- транзакции. SSAVEPOINT имя_точки_сохрзнения; "Инструкция COMMIT Г ^Инструкция COMMIT завершает транзакцию и сохра- сохраняет все изменения, сделанные в ходе транзакции. ^COMMIT [WORK] v> [COMMENT 'текст1 Ф (FORCE 'текст'[. системный_номер_изменения]]; •V- Ключевое слово WORK обычно опускается. Пред- Предложение COMMENT позволяет связать комментарий с распределенной транзакцией. Этот комментарий убудет виден из представления DBA_2PC_PENDING, Гесли транзакция зависнет. Предложение FORCE дает ^возможность вручную завершить зависшую рас- распределенную транзакцию. Инструкция ROLLBACK ^Инструкция ROLLBACK обычно используется для за- закрытия транзакции и отменяет все изменения, сде- сделанные в ходе транзакции.. Она также позволяет ^отменить изменения (выполнить откат) до задап- - нон точки сохранения:
72 Управление транзакция!^ ,t ROLLBACK [WORK] [TO [SAVEPOINf] иня_точки_сохранения (FORCE 'текст*]; Как и в инструкции COMMIT, «вредное» ключ^ вое слово WORK используется редко. Предложен: FORCE заставляет Oracle выполнить откат зависай щ распределенной транзакции до точки сохранения,^ указанной в предложении ТО, \
Форматирование текстовых ^отчетов 1. ,,-j Штчеты SQL*Plus имеют табличную природу. Про- Программа предоставляет вам возможность опреде- определить заголовки столбцов и форматы отображения [для каждого столбца отчета. Еще вы можете задать «верхние и нижние колонтитулы для страниц, раз- разрывы строк и разрывы страниц, а также промежу- промежуточные и общие итоги. Заголовки столбцов Заголовки столбцов задаются в предложении Reading команды column: JtOLUMN employee name HEADING "Employee Name" ?-¦ Текст заголовка должен быть заключен в двой- двойные или одиночные кавычки. В отчете этот заголо- заголовок будет выглядеть примерно так: Ifmployee Name g При задании миогострочмого заголовка исполь- используйте вертикальную черту (|), чтобы указать пози- позицию разрыва строки. Например: fjOLUMN employee_name HEADING "Employee]Name" f; В отчете этот многострочный-заголовок будет ?выглядеть примерно так:
74 Форматирование текстовых отчетов I Employee J. Name Заголовки текстовых столбцов выравниваются* по левому краю. Заголовки числовых столбцов вы-; равииваются но правому краю. С помощью пред- предложения JUSTIFY вы можете отказаться от варишН той выравнивания, заданных по умолчанию: COLUMN employee_name HEADING "Employee|Name" - JUSTIFY RIGHT COLUMN employee^name HEADING "Employee)Name" - .; JUSTIFY CENTER Команда SET HEADSEP позволяет заменить сим- ¦ вол разрыва строки (вертикальную черту) другим/ символом. С помощью команды SET UNDERLINE вы можете заменить символ подчеркивания заголов-; ка столбца (дефис) другим символом. Форматы столбцов Вы можете задать форматы отображения с помо- помощью предложения FORMAT в команде COLUMN. Для| числовых полей спецификации форматов могут быть очень подробными и содержать информацию^ о длине, количестве десятичных знаков и пункту-'1 ации, используемой в числах. При отображении-'' столбцов, содержащих текст или даты, вы можетеk управлять шириной столбцов и переносом длин-.* иых значений на следующие строки. В разделе «Эле-^
jp Ширина и длина страницы Т5 рмситы (форматирования SQL*Plus» показано, как ^форматируются различные типы данных. 4 . Ширина и длина страницы ¦/-¦«: ¦ §г, Ширина страницы устанавливается с помощью со- ferманды SET LINESIZE, По умолчанию ширина стра- |J;цицы составляет 80 символов. Следующая ком iii- |t, да устанавливает ширину страницы равной 60 сим- f'волов; &SET LINESIZE 60 J Юночевое слово LINESIZE дает вам возможность f отказаться от варианта выравнивания колоптигу- задаппо1чо но умолчанию, и выровнять их по ^центру пли по правому краю. | Команда SET PAGESIZE устанавливает длину стра- странницы. По умолчанию на странице печатается 24 стро- строчки, включая коло}[титулы. Следующая команда у ве- |?личивает длину страницы до 50 строк: Й5ЕТ PAGESIZE 50 к". Ь'': При использовании команды SET MARKUP HTML i-->0N для генерации отчета в формате HTML клкме- слоно PAGESIZE определяет количество отоб >а- х строк tITML-таблицы до следующего ю- рвторепия заголовков столбцов; любая строка ^таблицы может отображаться па, одной или ле- | скольких физических строках в зависимости от ^размеров окна браузера. ж
76 Форматирование текстовых отчетов^ Установка длины страницы равной 0 и места е-; циалыюс значение в SQL*Plus, а именно подавляв ет вывод колонтитулов и заголовков столбцов. | Колонтитулы \ Команды TTITLE и BTITLE задают колонтитулы. Ко-1 манда TTITLE определяет верхний колонтитул, BTITLE -} нижний. Они имеют идентичный синтаксис. 1 Определение верхнего колонтитула | 'а Для примера определим многострочпый верхи» колонтитул страницы, отображающий название фи ??- мы слева и помер страницы.справа: TTITLE LEFT "My Company" CENTER "Current" - RIGHT "Page" FORMAT 999 SQL.PNO SKIP 1 - CENTER "Employee Listing" SKIP 4 Верхний колонтитул будет выглядеть так: My Company Current Page 1 Employee Listing Последнее предложение SKIP обеспечиваеток бражепие трех пустых строк между верхним колол-J титулом и заголовками столбцов. Те же предложе- предложения используются в команде BTITLE для оирсдел^ ния нижнего колонтитула. Отображение даты в колонтитуле Чтобы отобразить текущую дату в колонтитуле, нужно присвоить дату пользовательской иереме [-%
^Разрывы страницы 77 ЬюЙ и поместить эту переменную в команду BTJTLE Щт TTITLE. J ; Для того чтобы присвоить пользоиательс сой шеремеппои текущую дату, вы можете заденет °о- ?вать следующие команды в сценарии SQL*Plu. JSet.termout off -COLUMN curdate NEW_VALUE reportjate SELECT TO^CHARCSYSDATE.'dd-Mon-yyyy1) curdate ?.. FROH DUAL: \\ TERMOUr ON ^ После выполнения этих команд пользователь- пользовательская переменная report_date будет содержать тс ку- адуюдату. Следующая команда помещает значение ^переменной в нижний колонтитул; StIILE LEFT "Report Date: " report_date $$:¦ Этот же прием может применяться для изьле- ||еш1я других значений из базы данных и помеще- |Йия их в нижний или верхний колонтитул. т ¦ Разрывы страницы Шо умолчанию SQL* Plus печатает одну иусую |ртроку между страницами при выводе отчета. Эта Йустая строка печатается сверх длины страницы, ^установленной командой SET PAGESIZE, и призвана ^выравнивать физические размеры страниц па ва- Чпем принтере. &* Команда SET PAGESIZE определяет, сколько строк |SQL*Pius печатает па странице. Команда SET NEWFAGE
78 Форматирование текстовых отчетов i м J указывает, как должна реагировать среда SQL*PIus| па символ разрыва страницы. Вы можете изменить^ количество пустых строк между страницами, не-;; пользуя команду, подобную следующей: ¦$ SET NEWPAGE 10 | ¦-. Приведенная ниже команда предписываете SQL*Plus вставлять один символ подачи листа меж--\ ду страницами; к SET NEWPAGE 0 \ Последние версии SQL*Plus предоставляют^ команду SET NEWPAGE NONE, которая устраняет нуо <? тые строки и символы подачи листа между страии-1 цами. ? Разрывы отчета г Команды BREAK и COMPUTE определяют для отчета^ разрывы и итоговые вычисления. Команду BREAKJ можно также использовать для того, чтобы в отчете'! не выводились повторяющиеся значения столбцов, ?! Команда BREAK \ Чтобы запретить вывод повторяющихся значенийi столбцов, используйте команду BREAK, как иоказа-4 по в следующем примере: 'I SQL> BREAK ON owner • ; ¦A SOL> SELECT owner, table^name j 2 FROM alljables .j
-^Разрывы отче га 79 * 1' - _ _ _ _-_-¦-----._¦ — : 3 ORDER BY owner, tablename; OWNER TABLE NAME CTXSYS DR$CLASS DRSDELETE DRSINDEX "DEMO CUSTOMER DEPARTMENT EMPLOYEE ; Если столбец указан в списке команды BREAK, : SQL*Plus печатает значение столбца только тогда, гкогда оно изменяется. Об этом надо помнить, что- ¦ бы не забыть отсортировать результаты запроса но этому столбцу. Используя команду BREAK, вы также можете . «пропустить» определенное число строк или на- начать новую страницу, когда значение изменяется: '.BREAK ON owner SKIP 1 \BREAK ON owner SKIP PAGE Первая команда вставляет пустую строку, ког- ^ изменяется значение ноля owner. Вторая коман- команда вставляет разрыв страницы каждый раз при из- рйенеини значения поля owner. % Для отчета можно определить несколько раз- различных разрывов, но для этого разрешается ис- : пользовать только одну команду. В следующем ири- Uiepe команда BREAK определяет вставку разрыва -'страницы при смене пользователя и вставку пус- пустой строки при смене тина объекта: ¦V/
80 форматирование текстовых отчетов! BREAK ON owner SKIP PAGE ON object_type SKIP 1 | SELECT owner. object_type. object jiame i FROM dba_objects * ORDER BY owner, object^type. objectjiame; <| Перед выполнением предписанных действий д.ик! внешнего столбца SQL*Plus сначала выполняет;" заданные действия для всех внутренних столбце в,| В данном случае изменение ноля owner приводив! к вставке пустой строки и только затем вставляет^ ся разрыв страницы. й i Команда COMPUTE \ Команда COMPUTE дает указание SQL*Plus вычис*| лить итоговые значения для группы записей. Кома-1*| да COMPUTE всегда используется в тандеме с кома:к| дои BREAK. Например, чтобы вычислить количспто* таблиц, которыми владеет каждый пользователь, вьй можете сделать следующее: | BREAK ON owner | COMPUTE COUNT OF tablejiame ON owner % SELECT owner, tablejiame | FROM dba tables OROER BY owner, tablejiame: * SQL*PIus подсчитывает количество имей таб-Jij лиц для каждого пользователя, вставляет строки и отображает результаты. Вы можете вычислять итоги для столбцов, используя несколько команд COMPUTi:,| В следующем примере подсчитывается количество
V. (Разрывы отчета 8 Объектов каждого типа и вычисляется сумма раз- размеров экстентов для каждого объекта: ЙШТЕ SUM OF bytes ON segment jiame COMPUTE COUN7 OF segment_name ON segment_type :BREAK ON segment_type ON segmentjiame SELECT segmentjiame. segment_type, bytes !>¦ FROM user^extents jpROER BY segment_type. segment_name; §/. Обратите внимание на то, что порядок отобра- отображения столбцов (то есть порядокзадания столбцов |в списке выбора) не обязан совпадать с порядком ?рртировки или порядком разрывов. Также отметь- отметьте, что для определения нескольких итогов требу- требуется соответствующее количество команд COMPUTE, р то время как все разрывы должны задаваться толь- только одной командой BREAK.
Настройка SQL-инструкций SQL* Plus может помочь настроить SQL-инструк- SQL-инструкции. С помощью SQL-инструкции EXPLAIN PLAN вы можете поместить план выполнения той или иной инструкции в таблицу. Затем вы можете отобра- зитьилан, выполнив в SQL*Plus запрос к этой таб- таблице. Если вам не нравится план, предлагаемый Oracle, вы можете добавить в свою SQL-инструк- SQL-инструкцию советы оптимизатору, подсказывая ему, как должна выполняться инструкция. Создание таблицы плана Перед применением инструкции EXPLAIN PLAN не- необходимо создать таблицу для хранения будущего плана. Для создания таблицы плана Oracle предос- предоставляет сценарий utbcplan.sql, который находится в каталоге $ORACLE_HOME/rdbms/admin. Выполни- Выполните этот сценарий, как показано ниже: SQL> @c:\oracle\ora92\rdbms\admin\utlxplan Table created. Oracle создаст таблицу с именем PLAN TABLE: Name . Null? Type STATEMENT^ 10 VARCHAR2C0) TIMESTAMP DATE
Создание таблицы плана 83 REMARKS OPERATION OPTIONS OBJECTJIODE OBJECT_OWNER OBJECTJ№t OBJECT INSTANCE OBJECT[TYPE OPTIMIZER SEARCH COLUMNS ID PARENT ID POSITION COST CARDINALITY BYTES OTHERJAG PARTITIDNJTART PARTITIONISTS PARTI TIONJD OTHER DISTRIBUTION CPIKDST IOJDST TEMP SPACE ACCESS_PREDICATES FILTER PREDICATES VARCHAR2(80) VARCHAR2O0) VARCHAR2B55) VARCHAR2U28) VARCHAR2C0) VARCHAR2C0) NUMBERC8) VARCHAR2C0) VARCHAR2B55) NUMBER NUMBERC8) NUMBERC8) NUMBERC8) NUMBERC8) NUMBERC8) NUMBERC8) VARCHAR2B55) VARCHAR2B55) VARCHAR2B55) NUMBERC8) LONG VARCHAR2C30) NUMBERC8) NUMBERC8) NUMBERC8) VARCHAR2D000) VARCHAR2D00Q) Столбцы в таблице нлана могут меняться в за- зависимости от версии Oracle. Данный вариант таб- таблицы нлана получен в Oracle9f Release 2 (9.2.0.1.0),
84 Настройка SQL-инструкций } Описание запроса Используя инструкцию EXPLAIN PLAN, вы можете-¦ получить план выполнения указанной SQL-hiH струкции. Oracle поместит план выполнения и со- - зданную вами таблицу плана. Синтаксис инструкции EXPLAIN PLAN i Инструкция EXPLAIN PLAN имеет такой синтаксис: EXPLAIN PLAN [SET STATEMENTJD = 'statementjd1] i [INTO имя_таблицы] FOR инструкция: ¦; Описания параметров приведены ниже. • statement_id Идентифицирует описываемый запрос и хра-:| иится в ноле STATEMENT_ID таблицы плана. По | умолчанию этот параметр имеет значение/i NULL • имя_таблицы ¦ Имя таблицы плана; по умолчанию PLAN TABLE.i инструкция t Описываемая инструкция SELECT, INSERT, UPDATE! или DELETE. ¦ ¦j Пример инструкции EXPLAIN PLAN ; Сначала удалите из таблицы плана все существу ¦ ющис записи для инструкции с идентификатором *
^Запрос таблицы плана 85 statementJd, которую вы хотите использовать. На- Например: DELETE FROM plan_table .WHERE statementjd = fHOURS_BYJROJECTf: 1 Встаньте инструкцию EXPLAIN PLAN перед инте- интересующей вас SQL-инструкцией, а затем выполни- выполнимте эту расширенную инструкцию. Например: ¦EXPLAIN PLAN SET STATEMENTJD « (HOURS_BYJROJECT' 'FOR 'SELECT employeejname, project_name.r ?¦ SUM(hoursJogged) JFROM employee, project, projectjiours JJHERE employee.emp1oyee_id \ = project_hours.employee_id ;' AND project.projected ?¦¦ = project_hours.project_id GROUP BY employee^name. project_name: l После этого нужно выполнить запрос к табли- таблице плана для получения результатов. ;,¦ г Запрос таблицы плана ¦рбычиый способ просмотреть план выполнения — отобразить его, используя иерархический запрос. Oracle разделяет выполнение запроса на серию сложенных шагов, каждый из которых поставля- поставляет данные родительскому шагу. Исходным роди- родителем является сам запрос, результаты которого возвращаются приложению. Возможный запрос
86 Настройка SQL-инструкций для отображения плана выполнения может вьи лядеть так: * SELECT LPADC \ 2*(level-D) || ^ operation || ' ' )| options A || f ' [| object jiame || ' ' || j DECODE(id, 0. 'Cost = ' || position) \ "Query Plan" 'j FROM planjable X START WITH id = 0 AND statementjd i - 'HOURS_BY_PROJECT' | CONNECT BY prior id - parentjd ijj AND statementjd - 'HOURS_BYJ>ROJECT': % Результатом этого запроса является отчет, л-;-| казывающий шаги в плане выполнения так, ч.о| каждый дочерний uiar выводится с отступом жЩ его родителем, как показано в этом примере: J Query Plan "j I SELECT STATEMENT Cost - 7 \ SORT GROUP ВТ * HASH JOIN 1 HASH JOIN % TABLE ACCESS FULL EMPLOYEE % TABLE ACCESS FULL PROJECT JOURS •% TABLE ACCESS FULL PROJECT 1 Цену (cost) одного плана выполнения можно н; i-l тернрсгировать только относительно другого алан v| Запрос ценой 14 единиц требует ресурсов виод-Н вывода и процессора в два раза больше, чем запроси ценой 7 единиц. \
!|$>оветы оптимизатору 87 ВНИМАНИЕ Для вычисления цены необходима статис ика. 5Г;-> Располагая устаревшими статистическими I'.'., , данными, нельзя получить точный резульгат. |:: Самый внутренний шаг плана выполнения, |#ак правило, возвращает набор идентификаторов IR0WID базы данных. Эти идентификаторы исполь- используются операциями, результаты которых в свою ^очередь могут использоваться другими оперши- Ими. Иногда операции требуется два набора ^идентификаторов R0WID. Примером может слу- служить операция HASH JOIN в приведенном вьине |ллане выполнения, которой требуются идентифи- идентификаторы R0WID, полученные в результате иол лого ^сканирования всех строк в таблицах EMPLOYEE |hPRO3ECT_HOURS. I Многие операции в плане выполнении поият- ^ы иди, по край}1ей мере, их можно угадать даже |по именам, особенно если вы имеете иредставле- |-ние о результатах, возвращаемых запросом. Пол- Польше описание операций плана выполнения приве- приведено в техническом руко]$одстве Oracle9i Database Performance Tuning Guide and Reference. Советы оптимизатору |Бместо того чтобы предоставить Oracle полный ^контроль над процессом выполнения запрос;., вы
88 Настройка SQL-инструкций можете дать специальные указания оптимизато- оптимизатору, используя советы. Совет (hint) в Oracle — это директива оптимизатору, которая внедряется в SQL-инструкцию в форме комментария. Вот пример запроса с советом оптимизатору, предпи- предписывающим Oracle выполнить полное сканирова- сканирование таблицы: SELECT /*+ FULL(employee) */ employee_jd. employeejiame, empl oyee_bi 11 i ngjrate FROM employee WHERE employeejname = 'Jenny Gennick': В данном случае совет? FULL(empLoyee)> предпи- предписывает Oracle выполнить полное сканирование таб- таблицы employee. Oracle последует этому совету и вы- выполнит полное сканирование таблицы, даже если существует индекс но нолю employee_name. Текст совета должен быть заключен в ограни- ограничители /*+ и */ и располагаться сразу за ключе- ключевым словом SQL, с которого начинается инструк- инструкция. Если, задавая совет, вы сделаете ошибку, он будет рассматриваться как обычный комментарий и вы не получите никакого сообщения об ошибке, Для того чтобы убедиться, что совет интерпрети- интерпретируется и применяется согласно вашим намерени- намерениям, нужно выполнить инструкцию EXPLAIN PLAN до и после применения совета.
Советы оптимизатору ;39 В следующих пунктах описываются наиболее распространенные советы оптимизатору. Советы относительно цели оптимизации Перечисленные здесь советы дают вам возмож- возможность влиять па общую цель оптимизации при оп- определении плана выполнения. ALLJ0WS Создает план выполнения, который минимизи- минимизирует потребности в ресурсах. FIRST_ROWS F1RST_ROWSDmoio) Создает план выполнения, который позволяет извлечь первую строку или указанное количе- количество первых строк как можно быстрее. Совет FIRST_R0WSDMcno) появился в Огас1с9г. CHpOSE Использует оптимизацию по цене, если имеет- имеется статистика, по крайней мере, для одной таб- таблицы из запроса. RULE Использует оптимизацию, основанную па пра- правилах. Советы относительно метода доступа Эти советы указывают метод доступа к данным, который должна использовать система Oracle. FULL (имя таблицы)
90 Настройка SQL-инструкции] Полное сканирование заданной таблицы. INDEX (имя_таблицы [имя_индекса ... ]) Сканирование индекса для доступа к заданной таблице. При желании вы можете задать спи сок доступных индексов. Вы также можетеис пользовать совет INDEX_ASC или INDEX _DESC,4T( бы явно задать сканирование но возрастаний или но убыванию. INDEXJOIN (имя_таблицы [имя_индекса ... ]) Объединяет два или более индексов таблицы чтобы вернуть данные таблицы, затребованный запросом. Объединенный индекс должен сб* держать нее столбцы, указанные в запросе. Этсл| совет висден в Огас1е9г. NO_INDEX (имя_таблицы [имя_индекса ... Запрещает использование указанных индексе таблицы. Если индексы не заданы, нельзя ис пользовать любой из индексов таблицы. Советы относительно порядка объединения Эти советы дают вам возможность управлять nail рядком объединения таблиц. s ORDERED % Объединяет таблицы слева направо в том ж** порядке, в котором они перечислены в предле] жепии FROM. .?
еты оптимизатору 91 SADING (имя_табпицы) Ш-Использует заданную таблицу как первую таб- |в объединении. Этот совет введен и Oraclc9r. ^?Совет ORDERED отменяет совет LEADING. ^¦Использует план выполнения «звезда». Этот со- сорвет может выполняться, если объединяются не f менее трех таблиц и самая большая таблица имеет ^'составной индекс для столбцов, по которым объ- объединяются две меньшие таблицы. Сначала объ- Ш единяются две меньшие таблицы, а затем выпол- ^няется объединение с вложенными циклами для If-извлечения нужных строк из больиюй таблицы. ^рветы относительно операции объединения советы дают вам возможность управлять спо- [ объединения. . (имя_таблицы) ^Объединяет две таблицы, используя внешний &цикл для чтения одной таблицы и внутренний ||цнкл для чтения соответствующих строк из угон таблицы. Внутренняя таблица задается ;в совете. Этот способ называется объединением вложенными циклами и позволяет получить ^первые результаты объединения быстрее, но Цлолпое объединение может занять больше вре- времени.
92 Настройка SQL-инструкций USE_MERGE (имя_таблицы) Выполняет объединение по таблице, отдельно сортируя строки этой таблицы но ключу объе- объединения, а также сортируя строки другого на- набора строк но тому же ключу объединения и чи- читая затем подряд оба результирующих набора строк, чтобы слить два набора строк. USEJiASH (имя^таблицы) Выполняет хэш-объедипеиие по заданной таб- таблице. Создает хэш-таблицу в памяти, используя ключ объединения в памяти для меньшего из . двух объединяемых наборов строк (ил и таблиц), и затем сканирует большую таблицу, применяя ту же хэш-функцию к се столбцам ключа объе- объединения, Хэш-объединения можно исполь- использовать только при объединении по равенству. Советы относительно преобразования запроса Некоторые запросы можно записать несколькими способами, Oracle иногда будет переписывать ваши запросы, чтобы иметь возможность задействовать более эффективный план выполнения. Советы но преобразованию запроса позволяют управлять этим механизмом. NOJ1ERGE Используется в инструкции SELECT для пред- представления и запрещает слияние этого представ- представления с внешней инструкцией.
Советы оптимизатору 03 REWRITE ([представление...]) Предписывает задействовать, где это возмож- возможно, материализованные представления, не об- обращая внимания на цену. Если задано одно или несколько имен материализованных представ- представлений, доступны только эти представления. Вы можете использовать совет NOREWRITE, если хотите запретить применение материализован- материализованных представлений. USE_CONCAT Преобразует запрос с условиями OR в несколь- несколько запросов, объединенных с помощью опера- оператора UNION ALL Этот механизм называется OR- расгиирепием. Используйте совет NO_EXPAND, если хотите запретить OR-расширения. Разные советы Ниже приведены еще два полезных совета. 'APPEND Предотвращает попытки повторно использо- : вать свободное пространство, которое стало до- : ступпым в экстентах, выделенных таблице на текущий момент. Вместо этого новые строки добавляются после последней строки в памяти. Применяется только к инструкциям INSERT и дает такой же результат, как прямая загрузка но : пути, используемая SQL*Loader. Применяйте \ совет NOAPPEND, если хотите явно потребовал ь.
94 Настройка SQL-инструкций чтобы существующее свободное пространство использовалось повторно. Совет APPEND приме- применяется но умолчанию для параллельных вста- вставок; для других вставок по умолчанию исполь- используется совет NOAPPEND. ORDERED_PREDICATES Предписывает вычислять предикаты в том по- порядке, в котором они встречаются в предложе- предложении WHERE, В отличие от других советов, вы мо- можете поместить этот совет в предложение WHERE прямо после ключевого слова WHERE.
Элементы форматирования SQL*Plus Команды COLUMN, ACCEPT, SET NUMBER, TTlTLEt BTITLE, REPHEADER и REPFOOTER позволяют управлять фор- форматированием данных, используя так называемую спецификацию формата, Спецификация формата — это строка символов, указывающая SQL*Plus, как форматировать отображаемое число, дату или тек- текстовую строку. Форматирование чисел Таблица 3 содержит элементы, которые применя- применяются при форматировании чисел. Таблица 3. Элементы форматирования чисел Элемент форматирования 9 0 $ Описание Указывает позицию, в которой может отображаться одна цифра Указывает позицию, с которой начинается отображение ведущих нулей Отображает знак доллара перед числом продолжение
96 Элементы форматирования SGL*Plus Таблица 3 (продолжение) Элемент форматирования Описание В С D DATE ЁЕЕЕ G Помещает запятую в отображаемое значение Указывает позицию десятичной точки Нулевые значения отображаются пробелами Указывает позицию для отображения обозначения валюты согласно стандарту ISO. Для США — это USD Указывает позицию десятичной точки Указывает SQL*Plus, что число представляет собой дату и должно отображаться в формате MM/DD/YY Предписывает SQL*Plus использовать экспоненциальный формат для отображения значения. Вы должны использовать именно четыре буквы Е, и они должны находиться в конце спецификации формата Помещает разделитель групп разрядов (обычно запятую) ; в отображаемое значение
Форматирование чисел 97 Элемент Описание форматирования L Указывает позицию для отображения символа локальной валюты. Для США — это знак доллара М! Отображает знак «минус» после числа и может использоваться только в конце спецификации формата PR Отображает отрицательные значения в угловых скобках. Например,-123.99 отображается как <123.99> RN Отображает значение римскими цифрами. В зависимости от регистра символов элемента (RN или гп) при отображении римских цифр используются соответственно прописные или строчные символы. Значения, отображаемые как римские цифры, должны быть целыми числами и находиться в интервале от 1 до 3 999 включительно S Добавляет знак + или - к числу и может указываться в начале или конце спецификации формата продолжение &
98 Элементы форматирования SQL*Plus Таблица 3 {продолжение) Элемент Описание форматирования V Отображает масштабированные значения. Количество цифр справа от V показывает, до какого десятичного знака округляется значение перед его отображением В табл. 4 представлено несколько примеров ис- использования элементов форматирования. Таблица 4. Примеры числовых форматов Значение 123 1234.01 23456 1 1 -1000.01 1001 -1001 1001 Формат 9999 9,999.99 $999,999.99 0999 99099 9,999.99mi S9.999 9.999PR 9.999PR Результат 123 1,234.01 $23,456.00 0001 001 1,000.01- +1,001 <1,001> 1,001 Форматирование символьных строк Символьные строки форматируются с использо- использованием элемента А, за которым следуег число, опре- определяющее ширину столбца в символах. Например:
форматирование символьных строк 99 SQL> COLUMN a FORMAT A40 SQL> SELECT 'An apple a day keeps the doctor away.' A 2 FROM dual: An apple a day keeps the doctor away. По умолчанию длинные текстовые значения внутри столбца переносятся на следующие строки. Используя параметры WORDJ/YRAPPED, WRAPPED и TRUNCATED в команде COLUMN, вы можете указать, должны ли переноситься значения па следующие строки и как должен выполняться перенос. Напри- Например: SQL> COLUMN a FORMAT A18 WORD WRAPPED SQL> SELECT 'An apple a day keeps the doctor away.1 A 2 FROM dual: An apple a day keeps the doctor away. Если значения текстовых столбцов отобража- отображаются на нескольких строках, SQL*Plus печатает после каждой записи пустую строку, которая на- называется разделителем записей, С помощью ко- команды SET RECSEP OFF можно отменить вставку раз- разделителя записи.
100 Элементы форматирования SQL*Plus \ Символьный формат, используемый с коман- командой ACCEPT, определяет максимальное количество? символов, которое SQL*Plus будет принимать от пользователя. Форматирование дат Элементы форматирования даты, приведенные! н табл. 5, могут использоваться совместно со встро-;; снпой функцией Oracle TO_CHAR, предназначенной, для преобразования значений дат в символьные строки. Например: SQL> SELECT TO__CHAR(SYSDATE. 2 'dd-Mon-yyyy hh:mi:ss PM') 3 FROM dual: TO CHAR(SYSDATE,'DD-MON 13-Dec-2001 09:13:59 PM Спецификация формата даты, применяемая с командой ACCEPT, задает формат, в котором пользователь должен вводить дату. Таблица 5. Элементы форматирования даты Элемент Описание форматирования -/,.;: Знаки пунктуации, включаемые в отображаемое значение "текст1 Текст, воспроизводимый в отображаемом значении
ррматирование дат 101 (Элемент Описание ^форматирования С или B.C. или A.M. 'Мили P.M. Индикатор зры AD, A.D., ВС или B.C., добавляемый к отображаемой дате Индикатор времени AMt A.M., РМ или P.M., добавляемый к отображаемому времени Номер века — 20 для годов с 1900 по 1999 (см. SCC) Номер дня недели от 1 до 7 Полное название дня недели День месяца от 1 до 31 День года от 1 до 366 Сокращенное название дня Сокращенное название эры. Применяется только для некоторых азиатских календарей (Japanese, Imperial, ROC Official и Thai Buddha) Полное название эры (см. Е) Дробная часть секунды. Может применяться только к типам данных TIMESTAMP Подавляет отображение лишних пробелов и нулей в символьной ¦ строке, представляющей дату. Например, формат FMMonth DD отображает July 4 вместо July 4
:i 102 Элементы форматирования SQL*Ptusl Таблица 5 {продолжение) ¦л Щ Элемент форматирования Описание & НН НН12 НН24 I IW IY IYY IYYY Час суток в 12-часовом формате Час суток в 12-часовом формате Час суток в 24-часовом формате Последняя цифра номера года Номер недели от 1 до 53 согласно ISO (см. IYYY) Две последние цифры номера года согласно ISO Три последние цифры номера года согласно ISO Полный номер (четыре цифры) года согласно ISO. В соответствии со стандартом ISO год начинается 1 января, если 1 января приходится на понедельник; год начинается с предыдущего понедельника, если 1 января приходится на вторник, среду или четверг; год начинается со следующего понедельника, если 1 января приходится на пятницу, субботу или воскресенье
^Форматирование дат 103 Элемент Описание форматирования J День по Юлианскому *- календарю. Первый день ;(, соответствует 1 января Ь: 4712 года до нашей эры Щ\ Минуты Номер месяца Трехбуквенное сокращение |. названия месяца Полное название месяца Квартал года от 1 до 4 ШМ Номер месяца римскими % цифрами jspR Две последние цифры года |pRRR Четыре цифры года iSCC То же, что СС, но со знаком «минус» для дат до новой эры Суффикс, который преобразует ^ ¦ число в количественное числительное, например ONE, FOUR (см. ТН) |$РТН Суффикс, который преобразует число в порядковое числительное, например FIRST, FOURTH (см, ТН) 5 Секунды [§SSS$ Количество секунд pv после полуночи продолжение 4
104 Элементы форматирования SQL*Plus Таблица 5 (продолжение) Элемент форматирования Описание SYEAR ТН TZD TZH TZM TZR WW W Год отображается словами с ведущим знаком «минус» для даты до новой эры (см. YEAR) Этот суффикс, который может находиться после любого элемента форматирования, отображающего число (например, DDth), преобразует число в его порядковую версию (например, 1st, 4th) Краткое имя временного пояса (например, EST, PST и т. д.) Часовой компонент смещения временного пояса от UTC (Coordinated Universal Time — всеобщее скоординированное время), например -05 для EST Минутный компонент смещения временного пояса (обычно равен нулю) Регион временного пояса, например US/Eastern Неделя года Неделя месяца. Первая неделя начинается с первого дня месяца, вторая — с восьмого и т, д.
Форматирование дат 105 Элемент форматирования X Y.YYY YEAR YYYY SYYYY YYY YY Y Описание Локальный символ «десятичной точки» (например, для США — это точка, для России — запятая) Четыре цифры года с запятой после первой цифры Год, отображаемый словами Четыре цифры года Четыре цифры года.с ведущим знаком минус для годов до нашей эры Три последние цифры года Две последние цифры года Последняя цифра года Регистр символов элемента форматирования текстового компонента даты, такого как название месяца, определяет регистр символов, используе- используемый при отображении этого компонента. В табл. б приведены примеры форматирования даты. Таблица 6. Примеры форматирования даты Формат Результат dd-mon-yyyy dd-Mon-yyyy 13-dec-2002 13-Dec-2002 продолжение
106 Элементы форматирования SQL* Plus Таблица б (продолжение) Формат Результат DD-MON-YYYY 13-DEC-2002 Month dd, yyyy December 13, 2002 mm/dd/yyyy 12/13/2002 Day Friday
Команды SQL*Plus Данный раздел содержит алфавитный список всех команд SQL*Plus и их краткие описания. Ограничители комментария /* и */ /* текст_комментария текст_комментария текст_комментария */ Ограничители /* и */ отмечают комментарий в SQL*PIus. Комментарии, вводимые таким спосо- способом, могут занимать несколько строк. Миогостроч- иые комментарии, включенные в файл сценария, отображаются па экране при выполнении сцена- сценария. Например: /* SQL*Plus script written 7-Jan-2000 by Jonathan Gennick. */ Двойной дефис (--) --текст_комментария ; Двойной дефис отмечает однострочный ком- комментарий в сценарии SQL*PIus. Например: --Written 7-Jan-2000 by Jonathan Gennick
108 Команды SQL*Plus j Команда @ i @файл_сценария [аргумент...] \ Команда @ выполняет файл сценария SQL* Plus, "Ц Например: ; @$ORACLE_HOME/rdbms/admin/utlxplan ). @http://Gennick.com/message.sql 2 i Параметры \ файл_сценария -j Имя (или URL-адрес в Oracle9iи более поздней 1 версии) выполняемого файла. Полное имя фай-1 ла может содержать путь. Если путь не указан,,] SQL* Plus просматривает текущий ката/юг и за- й тем каталог, используемый SQL*Plus ноумол-"[ чапию. Расширением но умолчанию считается \ .sql ':: аргумент . \ Аргумент, передаваемый сценарию. Вы можете % передать все необходимые сценарию аргумеи-| ты. Аргументы должны разделяться по крайней- мере одним пробелом. jj В Oracle9f Release 1 только версия SQL*Plus;! для Windows разрешает идентифицировать файл \ сценария посредством его URL-адреса, В OracIeK^ Release 2 все версии SQL*Plus обеспечивают такую I возможность. В качестве URL-адреса может ис-Ц пользоваться FTP- или HTTP-адрес. '; В iSQL*Plus команда @ требует задания URL-'{ адреса; имя файла задавать нельзя. л
Команды SQL*Plus 109 Команда @@ @@файл_сценария [аргумент...] Команда @@ используется в файле сценария для выполнения другого файла сценария, находя- находящегося в одном каталоге с основным файлом. На- Например: @@genera te_emp_report @@generate_pay_history__report 'ЮГ Команды @@ и @ имеют одинаковые пара- параметры. Команда / / Команда / (косая черта) выполняет текущую SQL-инструкцию (или блок PL/SQL), находящу- находящуюся в буфере. Например: SQL> SELECT * FROM dual 2 SQL> / D ACCEPT ACCCEPT] пользовательская_переменная [NL)M[BER] CHAR | DATE] [FOR[MAT] спецификация_формата] [DEF[AULT] значение_по_умолчанию]
110Команды SQL*Plus [PROMPT текст_приглашения | NOPRIOMPT~\~\ [HIDE] Команда ACCEPT (не поддерживается в iSQL*PIus) принимает значение, введенное пользователем, и присваивает его пользовательской переменной. Например: ACCEPT user_password CHAR - PROMPT "Password: " HIDE ACCEPT id NUMBER FORMAT "999.99" ACCEPT report jJate DATE - PROMPT "Date: M FORMAT "dd-mon-yyyy" Параметры пользовательская_переменная Имя определяемой переменной. NUMC8ER] | CHAR | DATE .Тип вводимых данных. FOR[MAT] спецификация_формага Спецификация формата, которая может при же- желании заключаться в кавычки. DEFQAULT] значение_по_умолчанию Значение но умолчанию, назначаемое перемен- переменной. PROMPT текст__приглашения Текст подсказки, отображаемый на экране и приглашающий пользователя к вводу дан- данных. N0PR10MPU Предписывает SQL*Plus не показывать пригла- приглашение пользователю.
Команды SQL*Plus 1_Н HIDE Предписывает SQL*Plus не выводить на экран эхо-повтор ответа пользователя. Этот параметр обычно задается при приглашении ввести па- пароль. ПРИМЕЧАНИЕ Синтаксис команды ACCEPT значительно ме- менялся в нескольких последних версиях SQL*Plus. Представленный здесь синтаксис относится к версиям Oracle8/ и выше. Не все описан- описанные предложения доступны в более ранних версиях. APPEND A[PPEND] текст Команда APPEND (не поддерживается в iSQL*PIus) позволяет добавлять (присоединять) заданный текст в конец текущей строки в буфере SQL. Например: SQL> L 1* SELECT * SQL> a FROM dual 1* SELECT * FROM dual ПРИМЕЧАНИЕ Если вы хотите, чтобы присоединенная стро- строка начиналась с пробела, вставьте два пробе- пробела после команды APPEND.
112 Команды SQL* Plus ARCHIVE LOG ARCHIVE LOG {LIST |" STOP | START [TO каталог] NEXT [TO каталог] ALL [TO каталог] | порядковый_номер_групгш [ТО каталог]} Команда ARCHIVE LOG управляет процессом ар- архивации файлов журналов или отображает ин- информацию о текущих параметрах архивации. Для того чтобы иметь крало выполнять эту команду, вы должны подключиться к базе данных как пользователь SYSDBAt SYSOPER или INTERNAL На- Например: ' ARCHIVE LOG LIST ARCHIVE LOG START ARCHIVE LOG ALL TO /niOl/oradata Параметры LIST Отображает информацию о текущих парамет- параметрах архивации. STOP Прекращает автоматическую архииацию фай- файлов журналов изменений. START Включает.режим автоматической архивации файлов журналов изменений.
Команды SQL*PJus 1j[3 KEXT Архивирует следующую группу файлов журна- журналов при условии, что эти файлы заполнены. С помощью команды ARCHIVE LOG LIST вы може- можете задать порядковый номер текущей группы файлов. ALL Архивирует все группы файлов журналов, ко- которые были заполнены, но не были заархиви- заархивированы. порядковый_номер_группы Архивирует заданную группу файлов журналов при условии, что эта группа еще заархивирована. каталог ! Каталог для архивации файлов журналов. Если этот каталог задан в команде вместе с парамет- параметром START, то он используется для хранения всех архивируемых файлов журналов. Если каталог задается в команде вместе с параметрами NEXT или ALL или конкретным порядковым номером в последовательности, то он используется для файлов» архивируемых только данной коман- командой. Если в команде ARCHIVE LOG START каталог не указан, то задействуется значение парамет- параметра инициализации LDG_ARCHIVE_DEST. ATTRIBUTE ATTRIBUTE [объектный^тип.афибут псевдоним_атрибута
114Команды SQL*Plus [ALI[AS] псевдоним | CLE[AR]| F0R[MAT] спецификация формата | LIKE атрибут_источник j ON | OFF...]) Команда ATTRIBUTE форматыpyer атрибуты объ- объектного тина Oracle. Например: ATTRIBUTE employee_type.employee_salary - ALIAS emp_sal ATTRIBUTE enp_sa! FORMAT "$999.999.99" ATTRIBUTE employee type.employee salary - FORMAT "$999,999.99" Команда ATTRIBUTE, выполняемая без параметр ров, отображает список всех текущих настроек ат~; рибута. Параметры объектный_тмп Имя объектного тина Oracle. атрибут Имя форматируемого атрибута указанного объектного типа. Если другие параметры не за- заданы, команда покажет текущий формат ото- отображения этого атрибута. Предложения ALIAS, CLEAR, FORMAT, LIKE» ON и OFF функционируют точно так же, как в команде COLUMN. BREAK BRE[AK] [ON {иня__столбца | ROW | REPORT} [SKI[Pi {число_строк | PAGE} |
Команды SQL'Pfus П5 ¦¦. NODUPUICATESl \ •;"' OUPtL ICATES]...]...] '•У Команда BREAK определяв!* разрывы страниц н строк, основы каясь на изменении значений : в столбце. Она также управляет печатью повторя- повторяющихся значений и столбце и печатью вычисляе- г'мых значений, таких как промежуточные и общие итоги. Команда BREAK, выполняемая без парамет- параметров, отображает текущую настройку расстановки гразрыиов. Ниже принедеиы некоторые допусти- допустимые команды BREAK: {break on row skip \ BREAK ON dept BREAK ON dept SKIP PAGE ¦Параметры =иня_стол6ца Имя отслеживаемого столби» отчега. Когда У значение в столбце изменяется, SQL*Plus л иставляет разрыв и пыпалпяег заданные в ко- " манде действия. ¦ROW 'г[ Предписывает SQL* Plus оставлять разрыв пос- " ле каждой обработанной записи. REPORT :, Опрсдсляег разрыв уровня отчета и печатает ¦\ общие итоги в конце отчета. Предложение SKIP I PAGE игнорируется, если задан разрыв уровня -|- отчета, но» что достаточно странно, вы можете
116 Команды SQI/Plus. -«прогнать» несколько строк (вставить несколц; ко пустых строк) после этого разрыва. SKI[P] число_строк ,.;¦ Предписыяаег SQL*Plus «прогнать» заданное; число строи после разрыва. ,;, SKI[PJ PAGE ¦ Предписывает SQL*Plus начать новую сграин-: цу после разрыва, ^ NODUPILICATES] i. . Предписывает SQL*Plus печатать значение; столбца только п том случае, если оно измени^' лось. Так ведет себя SQL*PIus по умолчанию. ;: DLJPEL ECAFES] '•{ Предписывает SQL*Plus печатать каждое зна.ч чение в столбце отчета, даже если оно совпала! ет со значением из предыдущей записи, BTITLE BTE[TLE] [[OFF | ON] | COL х | S[KIP] x | TA8 x | LE[FT] | CECNTER] | RflGHT] | BOLO [ FORCMAT] спецификация_формата | текст | переменная.,.] Команда BTITLE имеет такие же параметры, как команда TTITLE, и отличается от последней только тем, что определяет нижний, а не верхний колон- колонтитул (см. описание команды TTITLE).
Команды SQL* Plus 117 CHANGE CfHANGF] /старь1й_текст[/[новый_текст[/]] Команда CHANGE (не поддерживается в iSQL*PIus) является командой редактировании и позволяет выполнять поиск и замену текста в те- текущей строке в буфере SQL Команда CHANGE так- также может удалять текст- Например: 5QL> 1 1* select dummy,smarty from duap SQL> с /duap/dual/ 1* select durrcny.sfflarty from dual SQL> с Asmarty/ 1* select dunmy from dual Параметры старый_текст Текст, который Егужпо заменить или удалите Текст, который заменяет старый текст. Обычно ограничивает старую и новую символь- символьные строки, но в качестве ограничителя может выступать любой другой символ» отличный от цифры или буквы и использующийся сообраз- сообразно назначению данной команды. CLEAR CL[EAR] {BRE[AKSj | BUFF[ERJ | COL[UMNS] COMPLUrfS] | SCRLEEN] | SQL ] TIMING]}
MS КомандыSQL*Plus \ Команда CLEAR позволяет удалять itce опреде- ¦': лепил столбцов, устанонки разрывов, определения ¦. вычислении lit. д. Например: ., . CLEAR BRFAKS CLFAR COMPUTES Параметры BRFTAKS1 Удаляет псе установки разрьшпн, которые были ¦ заданы с ломопlmo команды ВREAK. BIJFF[ERJ Очищает содержимое буфера. Удаляет4 пес определения столбцов, сделанные с использованием команды COLUMN. Удаляет все вычисления» определенные с помо- помощью команды COMPUTE. SCRLEEN3 Очищает экран (не поддерживается н iSQI/IMus). SQL Очищает содержимое буфера SQL. T[MI[NG] Удаляет ивд таймеры, созданные с гюмошыо ко- команды TIMING, COLUMN COI.CUMM] [имя_сталбиа [ALI[AS] псевдоним ] Ct*E[AR] | ЕМТМЛР (ON[OFF}
Команды SQL*Plus 119 . FOLO_A[FTER] \ F0LD_8[EF0RE] . FOR[MAT] спецификация_формата | HEA[DENG] текст_загоповка | JUSHIKY] {LEFT | CENTtR ( CENTRE | Rl№T} I : LIKE икя_столбца_исгочиика ] NEWL[INE] NEW_V[ALUt] польэо&ательская_пере«енная NOPRI[NT] ;¦. PRIINT] | NLJL[L] пиI_текст | OLD_V[ALU?] пользовательская переменная ) ON \ OFF | V TRUCNCATEO] | W0R[0 WRAPPED] | Ш[РРЕ01...]] ;¦'¦ Команда" COLUM N форматирует столбцы для таб- "личногоотчета. Используя команду COLUMN без на- :рамстро», вы можете получить список всех тску- :щнх форматов столбцов Например: COLUMN employeejiame HEADING "Name" - \ FORMAT A20 WORD_WRAPPED COLUMN employee_hire_date - HEADING "Hire Date" - "¦' FORMAT A12 JUSTIFY RIGHT г Команды COLUMN имеют кумулятивное дейст- действие. Две команды COLUMN, задающие дна разных ¦ параметра для одного столбца, эквиналептиы од- одной команде, задающей оба параметра. Параметры :имя_столбца ;..;. Имя форматируемого столбца. Для вычисляе- -" мого столбца и качестве имени используется V.. выражение. Если и инструкции SELECT для
120 Команды SQL*Plus столбца определен псевдоним, здесь обязатель- обязательно надо указывать псевдоним вместо имени. Команда COLUMN имя_столбца без других пара- параметров отображает текущий формат для этого столбца, ALI[AS] Позволяет задать псевдоним для столбца. псевдоним Альтернативное имя столбца, которое может использоваться в командах BREAK, COMPUTE, а также в других командах COLUMN. CLE[AR] Удаляет все ранее заданные форматы столбца. ENTMAP {ON | OFF} Определяет, будут ли символы < и > представ- представлены в HTML-отчетах символами &lt; и &gt,\ По умолчанию для ENTMAP используется установ- установка, заданная в команде SET MARKUP или ключом -М в командной строке. FOLD_A[FTER] Заставляет SQL*PIus перейти на новую строку после печати столбца. FOLD_B[EFORE] Заставляет SQL*Plus начать печатать столбец на повой строке, FORCMAT] Форматирует данные столбца перед их отобра- отображением.
Команды SQL*Plus 121 спецификация_формата Символьная строка, которая задаст формат ото- отображения данных столбца. HEACDING] Определяет заголовок для столбца. текст_заголовка Текст, используемый в качестве заголовка столбца. Текст может быть (но не обязатель- обязательно) заключен в одинарные или двойные ка- кавычки. JUS[TIFY] {LEFT | CENTER | CENTRE |-RIGHT} Управляет выравниванием текста заголовка от- относительно границ столбца. По умолчанию за- заголовки для числовых полей выравниваются по правому краю, а для текстовых нолей — но ле- левому краю. LIKE При форматировании столбца используется спецификация формата, определенная для дру- другого столбца-источника. иня_стоя6ца_источника Имя столбца, служащего источником формата. NEWLUNE] Заставляет SQL*PIus перейти на новую строку перед печатью столбца, NEW_V[ALUE] Обновляет пользовательскую переменную те- текущим значением столбца.
122 Команды SQL*P)us пользовательская_переменная Имя пользовательской переменной, использу- используемой совместно с параметрами NEWM/ALUE и OLDJ/ALUE. NOPRILNT] Запрещает печать столбца. PRIINU Разрешает печать столбца. NUL[L] Позволяет задать текст, который будет отобра- отображаться в столбце для значений NULL. пиЛ_текст * Текст, отображаемый для значений NULL в дан- данном столбце. OLDJ/[ALUE] Обновляет пользовательскую переменную пре- предыдущим значением столбца. ON Печатает столбец, применяя заданный фор- формат. Этот параметр используется по умолча- умолчанию. OFF Блокирует применение формата, заданного для столбца. TRUNCATED] Обрезает длинные текстовые значения до ши- ширины столбца (текст не переносится на следу- следующие строки).
Команды SQL* Plus ' 123 WOR[DJIRAPPED] Длинные текстовые значения столбца перено- переносятся па следующие строки но словам. ММ [ЯРД?] Длинные текстовые значения столбца перено- переносятся наследующие строки, но строка разрыва- разрывается точно на границе столбца (возможно, в се- середине слова). COMPUTE COMPCUTE] [{AVG | COU[NT] | MAX[IMUM] | MINCIMUM] | NUMLBER] | STD | SUM | VARIANCE]}... [LABEL текст^заголовка] OF имя_столбца... ON { имя_столбца_грулпировки | ROW | REPORT}...] Команда COMPUTE определяет в отчете итоговые вычисления. Вы можете применять ее совместно с командой BREAK для вычисления и печати сумм значений, средних, минимальных или максималь- максимальных значений и т. д. SQL*Plus производит эти вычисления в ходе формирования отчета. Для ото- отображения итоговых вычислений в отчете команда COMPUTE всегда используется в сочетании с коман- командой BREAK. Например: BREAK ON projectj d COMPUTE SUM LABEL "Totals" OF hours Jogged - ON projected
124 Команды SQL*Plus BREAK ON projected ON employeejd COMPUTE SUM OF hours Jogged - ON projected. employee_id Команда COMPUTE, выполняемая без парамет- параметров, отображает список всех рацее определенных вычислений. Параметры AVG Вычисляет для числового столбца среднее всех значений, исключая значения NULL COUCNT] Вычисляет для столбца количество значений, отличных от NULL MAX[IMUM] Вычисляет для столбца максимальное значе- значение. Применяется к столбцам с типами данных NUMBER, CHAR, VARCHAR2, NCHAR и NVARCHAR2. MIN[IMUM] Вычисляет для столбца минимальное значение. Применяется к столбцам с типами данных NUMBER, CHAR, VARCHAR2, NCHAR и NVARCHAR2. NUMCBER] Вычисляет для столбца количество значений, включая значения NULL. STD Вычисляет для числового столбца стандартное отклонение всех значений, исключая значения NULL
Команды SQL*Plus 125 SUM Вычисляет для числового столбца сумму всех значений, исключая значения NULL VARIANCE] Вычисляет для числового столбца дисперсию всех значений, исключая значения NULL. LABEL Позволяет задать заголовок для вычисляемого '. значения. Заголовок печатается слева от вычис- вычисляемого значения, если это возможно. "текст_за головка Текст, который печатается слева от вычисляе- вычисляемого значения. иняс голбца Имя столбца, для которого вычисляются ито- итоговые значения. Именем вычисляемого столбца является выражение. Если в инструкции SELECT для столбца определен псевдоним, в команде ¦ COMPUTE обязательно указывается псевдоним $ вместо имени. |ш_столбца_группировки f. При каждом изменении значения в данном столбце вычисление начинается заново. Вычисление выполняется один раз для каждой записи, возвращаемой запросом. р Вычисление выполняется в конце отчета, при- причем задействуются значения из всех записей.
126 Команды SQL*Plus' Другими словами, параметр REPORT используй ется для вычисления общих итогов. CONNECT \ CONNECT] [имя_пользователя[/пароль][@соединение] |j / ] [AS {SYSOPER | SYSDBA}] | [INTERNAL] A Команда CONNECT изменяет наше соединение! с базой данных, регистрирует вас под другим \\щ .нем пользователя или подключает вас в одной из] административных ролей. Например: ! CONNECT SYSTEM/MANAGERPEMPDB % CONNECT / 1 CONNECT SYSTEM/MANAGER AS SYSDBA \ Параметры * имя_пользователя ,| Ваше имя пользователя базы данных. ^ пароль I Baui пароль. | соединение J Строка соединения или строка хоста, указь ющая SQL*Plus базу данных, к которой вы щ титс подключиться. Введите косую черту вместо имени пользовав теля, пароля и строки соединения, если хотш подключиться к локальной базе дашш?| используя данные аутентификации оиерациош ной системы. '"fl
команды SQL*Pfus V ж % Используется для подключения в одной из ад- у- мпинстративиых ролей. Sysoper j Указывает SQL*Plus, что вы подключаетесь &¦ как оператор. | | | Указывает SQL*PIns, что вы подключаетесь !; как администратор базы данных. Internal | Указывает SQL*PJus, что вы хотите иодклю- J читься как пользователь INTERNAL Начиная ||, с Огас1е9г, этот параметр не применяется. $ !COPY ПРИМЕЧАНИЕ I В Oracle9/ команду COPY применять не реко- ? - мендуется, поскольку она не работает с новы- f ми типами данных, включая объектные типы, 1 введенные в Oracle8 и более поздних вер- }i СИЯХ. |OPY {FROM соединение | ТО соединение} $¦• {APPEND | CREATE | INSERT [ REPLACE} конечная_таОлица [(список_столбцов)] USING инструкция_зе1ес1 Комаи/ia COPY позволяет использовать SQL*Plus ^ак капал для обмена данными между двумя база- базами данных Oracle. Например:
128 Команды SQL*Plus copy from jeff/bigkid@empdb - create empjiames (id. name) - USING SELECT emptoyee_id. emp loy ееjia me - FROM employee Параметры FROM/TO Задает конечную/исходную базу данных. Ис- Используйте это предложение для задания базы данных, к которой вы не подключены. соединение Информация, необходимая для подключения к другой базе данных, в стандартном форма- формате имя_пользователя/пароль@строка_соедине- ния. APPCEND] Вставляет копируемые строки в конечную таб- таблицу. При необходимости SQL*Plus сначала создает конечную таблицу. CRE[ATE] Копирует данные только в новую таблицу. INSERT Вставляет копируемые строки в конечную таб- таблицу, если она уже существует. REP[LACE] Удаляет и снова создает конечную таблицу/ если она уже существует. конечная_таблица Имя таблицы, в которую копируются данные.
Команды SQL*Plus 129 список_столбцов Задает имена столбцов, которые использует ко- команда COPY при создании конечной таблицы. В списке имена столбцов разделяются заняты- занятыми, и их количество должно совпадать с коли- количество столбцов в инструкции SELECT. Инструкция SELECT, возвращающая данные, ко- которые затем копируются. DEFINE DEF[INEJ [имя__переменной*|> текст]] Команда DEFINE позволяет создать пользо- пользовательскую переменную (подстановочную пере- переменную) и присвоить ей значение. Например; DEFINE companyjiame - "The Fictional Company" С помощью команды DEFINE вы можете также , увидеть значение одной пользовательской пере- переменной или список значений всех переменных, как показано в следующих примерах: DEFINE company_name DEFINE Параметры имя_переменной Имя создаваемой переменной. Если в команде задано только имя переменной, то SQL*Plus ' отображает текущее значение этой переменной, если оно существует.
130 Команды SQL*P(usi текст ' ,- Текстовое значение, назначаемое переменной. DEL DEL [{b | * | LAST}[ {e | * | LAST}]] Команда DEL (не поддерживается в iSQL*Pius); является командой редактирования и удаляет из: буфера одну или несколько строк. Например: DEL * DHL 2 3 DEL 2 LAST ; Параметры b Номер строки, представляющим либо удаляе- удаляемую строку, либо начало диапазона строк, под-'.; лежащих удалению. -i е Номер строки, представляющий конец зона строк, подлежащих удалению. Указывает па текущую строку. LAST .; Указывает на последнюю строку в буфере. t DESCRIBE DESCLRIBE] [схема.]имя_обьекта[@имя_связи_БД] Команда DESCRIBE отображает информацию- о таблице, представлении, объектном типе, храни-'
.Команды SQL*Pfus пакете, хранимой процедуре, хранимой функ- функции или синониме. Например: .DESCRIBE employee DESCRIBE jenny.employee DESCRIBE employee@other_db Параметры схема Имя владельца объекта. иня_обьекта Имя описываемого объекта. иня_связи_БД Имя связи, указывающей на базу данных, в ко- которой находится объект. См. также описание команды SET DESCRIBE. DISCONNECT .DISCONNECT] Команда DISCONNECT разрывает соединение с ба- зон данных, не завершая сеанса SQL*Plus. EDIT ED[IT] [имя_файла] Команда EDIT (не поддерживается в iSQL*Plus) позволяет запустить внешний редактор для ре- редактирования содержимого буфера SQL или со- содержимого файла операционной системы. Напри- Например:
132 Команды SQL*Plus EDIT EDIT $ORACLE_BASE/admin/orcl/pfile/init.ora Первая команда, без параметров, используется для редактирования содержимого буфера SQL а вторая — для редактирования файла. С помощью перемеипой ^EDITOR вы можете за- задать команду, которая вызывает внешний редак- редактор. Изменить значение переменной _EDITDR мож- можно командой DEFINE. EXECUTE EXEC[UTEj инструкция Команда EXECUTE выполняет заданную инструк- инструкцию PL/SQL Например: EXECUTE DBMS_OUTPUT.PUM_INE('Hi There1); EXIT EXIT [SUCCESS | FAILURE | WARNING | значение | пользовательская_переменная | • ;переменная_привязки] {COMMIT | ROLLBACK] Команда EXIT закрывает сеанс SQL*Plus и иере- даег управление операционной системе. Например; EXIT EXIT SUCCESS EXIT FAILURE ROLLBACK Параметры SUCCESS
Команды SQL*Plus 133 Используется но умолчанию и возвращает ста- статус SUCCESS. FAILURE Возвращает статус FAILURE. WARNING Возвращает статус WARNING. значение Возвращает заданное значение в качестве ста- статуса. пользовательская_переменная Возвращает значение указанной пользователь- пользовательской переменной в качестве статуса. Для того чтобы возвратить код ошибки из последнего SQL-запроса, задействуйте переменную SQUSQLCODE. .; переменна я_при вязки Возвращает значение указанной переменной в качестве статуса. амп Используется но умолчанию и завершает все транзакции перед выходом. ROLLBACK Производит откат всех открытых транзакций перед выходом, GET JGET имя_файла [LIST | NOLIST]]
134 Команды SQL* Plus Команда GET (не поддерживается в iSQL*Plus) считывает SQL-инструкцию из файла и загружает ее буфер. Например: GET my_report.sql GET my_report NOLIST Параметры имя_файла Имя файла, содержащего SQL-инструкцию, ко- которую вы хотите загрузить. LIST Используется по умолчанию и отображает со- содержимое буфера после загрузки. NOL rST Загружает файл без его отображения. HELP HELP [раздел] Команда HELP дает возможность получить справку о командах SQL*Plus. До версии Oracle8i команда HELP предоставляла еще и информацию о синтаксисе SQL и PL/SQL. Команда HELP может использоваться в следующих формах: HELP INDEX HELP DESCRIBE Параметр раздел задает раздел справки, который вы хотите просмотреть. Команда HELP INDEX (HELP MENU в некоторых старых версиях) предоставляет полный список доступных разделов справки.
Команды SQL*Plus 135 ПРИМЕЧАНИЕ Некоторые версии SQL*P(us для Windows, особенно до Oracle9/, не поддерживают инте- интерактивную справку. HOST HO[ST] [О5_команда]' Команда HOST (ие лоддерживается в iSQL*Pius) выполняет команду операционной системы или вызывает командный интерпретатор, который дает возможность выполнить несколько таких команд. Команда HOST без параметра отображает приглашение, в ответ на которое вы можете вве- ввести несколько команд. Для возврата в SQL*Plus обычно нужно ввести команду выхода операци- операционной системы. Параметр (^„команда — это команда операцион- операционной системы, которую вы хотите выполнить. INPUT UNPUT] [текст] Команда INPUT (ие поддерживается в iSQL*PIus) вставляет в буфер одну или более строк текста пос- после текущей строки. Команда INPUT без параметра активизирует режим вставки, предоставляя вам возможность ввести любое количество строк. При- Пример:
136 Команды SQL*Plus SQL> L 1 SELECT 2* FROM dual SQL> L 1 1* SELECT SQL> I * SQL> L 1 SELECT 2 * 3* FROM dual Параметр текст задает вставляемый текст и ис- используется для вставки только одной строки. LIST L[IST] [{b | * | LAST}[ {e | * | LAST}]] Команда LIST является командой редактирова- редактирования и отображает текущую строку, находящуюся в буфере. Команда LIST без параметров отображает все строки буфера. Например; SQL> L 1 SELECT 2 * 3* FROM dual SQL> L Z * 2 * 3* FROM dual SQL> L 1 LAST 1 SELECT 2 * 3* FROM dual
Команды SQL*Plus 137 Параметры b Номер строки, представляющий начало диапа- диапазона отображаемых строк. Если помер послед- последней строки не задан, отображается только эта одна строка. е Номер строки, представляющий конец диапа- диапазона отображаемых строк. * Указывает на текущую строку. LAST Указывает на последнюю строку в буфере. PASSWORD PASSW[ORD] [имя_пользователя] Команда PASSWORD (не поддерживается в iSQL*Plus) дает возможность изменить свой па- пароль в Oracle, используя SQL*Plus. Например: SQL> PASSWORD Changing password for JONATHAN Old password: ******** New password; ******** Retype new password: ******** Password changed Параметр имя_пользователя — это имя пользо- пользователя, пароль которого вы хотите изменить. По умолчанию вы меняете свой пароль. Для измене-
138 Команды SQL*Plus| i пия пароля другого пользователя нужно обладать^ привилегией ALTER USER. \ '} PAUSE -I PAU[SE] [сообщение_об_останове] ;: Команда PAUSE (не поддерживается в iSQL*Plus)! предписывает SQL*Plus отобразить сообщением: остановиться. Для того чтобы продолжить работу,? пользователь должен нажать клавишу Enter. Напри*! мер; PAUSE "Press ENTER to continue." : Параметр сообщение_о6_останове — необязатель-;; пое сообщение пользователю, отображаемое па эк-* рапе. PRINT PRI[NT] [имя_переменной_привязки] Команда PRINT отображает значение заданной переменной привязки. Например: PRINT х Если имя переменной опущено, отображаются значения всех связанных переменных. PROMPT PROLMPT] текст_сообщения Команда PROMPT отображает сообщение, кото- которое должен увидеть пользователь.
V ч [Команды SQL'Plus 139 ^ПРИМЕЧАНИЕ ! Текст сообщения не следует заключать в ка- f' вычки, в противном случае кавычки появятся v на экране вместе с сообщением. QUIT QUIT FAILURE ROLLBACK ;'- QUIT [SUCCESS | FAILURE | WARNING | : значение | пользовательская_переменная :переменная_привязки] ) {.COMMIT | ROLLBACK] Команды QUIT и EXIT полностью идентичны ;(см. описание команды EXIT). RECOVER Синтаксис команды RECOVER (не поддерживаемой в iSQL*Plus) часто меняется. Приведенный ниже синтаксис относится к Oracle9i Release 2: 'RECOVER {general | managed | END BACKUP} general ::= [AUTOMATIC] [FROM каталог] полное_восстановление_базы_данных частичное_восстановление_базы_данных ILOGFILE имя_файла} : [параиетр_восстановления [параметр_восстановления...] ] (CONTINUE [DEFAULT][CANCEL} полное восстановление базы данных ::«=
140 . Команды SQL*Plus [STANDBY] DATABASE [UNTIL {CANCEL | TIME дата_время | CHANGE sen}] [USING BACKUP CONTROLFILE] или [STANDBY] DATABASE [USING BACKUP CONTROLFILE] [UNTIL {CANCEL | TIME дата_время | CHANGE sen}] частичное_восстановление_базы_данных ;:= {TABLESPACE габличная_область [.та6личная_область],.. DATAFILE файл_данных |_,фзйлланных]... STANDBY {TABLESPACE табличная_область [.табличная_область]... | DATAFILE файл_данных [,файл_данных]...} ч UNTIL [CONSISTENT] [WITH] CONTROLFILE } иараметр_восстановления ::= {TEST | ALLOW блоков CORRUPTION | PARALLEL [степень] | NOPARALLEL} managed ::= MANAGED STANDBY DATABASE [ {NOOELAY | [TIMEOUT] минуты | CANCEL [IMMEDIATE] [NOWAIT]} | [DISCONNECT [FROM SESSION] ] [FINISH [NOWAIT] ] ] Команда RECOVER инициирует восстановление па носителе информации базы данных, табличной об- области или файла данных. Вы можете использовать
Команды SQL*Plus команду RECOVER только в том случае, если подклю- подключены к базе данных как пользователь SYSDBA, SYSOPER или INTERNAL (начиная с Oraclc9i, INTERNAL не поддерживается). Вот несколько примеров: RECOVER TABLESPACE USERS RECOVER DATABASE UNTIL - TIME 20-JAN-2000;16;57:00 Дефис (-) в конце нерпой строки во втором при- примере в SQL*Plus означает, что команда продолжа- продолжается па следующей строке. ВНИМАНИЕ Не применяйте команду RECOVER, если вам не совсем понятны процедуры восстановле- восстановления базы данных. Параметры AUTOMATIC Автоматически определяет имена файлов жур- журналов изменений, используемых в ходе восста- восстановления. FROM каталог Каталог, в котором производится поиск архив- архивных файлов журналов изменений. LOGFILE имя_файла Начинает восстановление, используя заданный архивный файл журнала изменений. TEST Выполняет пробное восстановление, читая журналы и делая изменения во временной па-
142 Команды SQL* Plus мяти (файлы базы данных остаются неизмен- неизменными). ALLOW блоков CORRUPTION Задаст допустимое количество поврежденных блоков в файлах журналов в ходе восстановле- восстановления. При выполнении пробного восстановле- восстановления это количество может быть превышено только на один блок. PARALLEL [степень] Задает параллельное восстановление и необя- необязательную степень параллельности. Используе- Используемая по умолчанию степень параллельности определятся как число процессоров, доступ- доступных па всех экземплярах базы данных, умно- умноженное па значение параметра инициализа- инициализации PARALLEL J"HREADS_PERj;PU. NOPARALLEL Задает последовательное восстановление. CONTINUE [DEFAULT] Возобновляет прерванное восстановление не- нескольких экземпляров базы данных. Исполь- Используйте параметр CONTINUE DEFAULT, чтобы систе- система Oracle но умолчанию определяла следую- следующий применяемый файл журнала. . CANCEL Завершает отмененное восстановление. STANDBY DATABASE Восстанавливает резервную базу данных, используя контрольные и архивные файлы
Команды SQL*Plus 143 журналов изменений из основной базы дан- данных. DATABASE Инициирует восстановление всей базы данных. База данных должна быть установлена, но не открыта. TABLESPACE таблицная_область Инициирует восстановление заданной таблич- табличной области или списка табличных областей (не более 16). Заданные табличные области не должны быть открыты, а база данных должна быть установлена и открыта. DATAFILE файл^данных Инициирует восстановление заданного файла данных или списка файлов данных. Восстанав- Восстанавливаемые файлы данных не должны быть от- открыты. Пока ни один из этих файлов данных не является частью табличной области SYSTEM, ба- база данных может оставаться открытой. STANDBY TABLESPACE табличная_обласгь Восстанавливает заданную табличную область (области) в резервной базе данных. STANDBY DATAFILE файлланных Восстанавливает заданный файл или файлы данных в резервной базе данных. UNTIL CANCEL Позволяет производить восстановление но од- одному файлу журналов за раз с возможностью
144 Команды SQL*Plus отмены после каждого обработанного жур- журнала. UNTIL CHANGE sen Выполняет неполное восстановление, основан- основанное на номере SCN (system change number — си- системный помер изменения). Обратите внима- внимание на то, что транзакция с заданным номером не восстанавливается. UNTIL TIME дата_время Выполняет восстановление, основанное па вре- времени. Восстанавливаются все транзакции, за- завершенные до указанного времени. USING BACKUP CONTROLFILE Выполняет восстановление с использованием запасного контрольного файла. UNTIL CONSISTENT WITH CONTROLFILE Восстанавливает резервную базу данных, ис- используя контрольный файл резервной базы данных. MANAGED STANDBY DATABASE Переводит резервную базу данных в режим поддерживающего восстановления. NODELAY Применяет архивные файлы журналов к ре- резервной базе данные без задержки, игнорируя все задержки, заданные в параметре инициали- инициализации LOG_ARCHIVE_DEST. TIMEOUT минуты
Команды SQL*Ptus 145 Задает время простоя, но истечении которого резервное восстановление завершается, если пет доступных файлов журналов. CANCEL [IMMEDIATE] [NOWAIT] Прекращает резервное восстановление после применения текущего архивного файла журна- журнала изменений. Используйте ключевое слово IMMEDIATE, чтобы прекратить восстановление па следующем чтении файла журнала. Ключе- Ключевое слово NOWAIT действует аналогично IMMEDIATE за исключением того, что команда возвращает управление немедленно. DISCONNECT [FROM SESSION] Создает фоновый процесс для применения из- изменений к резервной базе данных, так что вы можете выполнять другую работу в своем сеансе. FINISH [NOWAIT] Используйте данный параметр, если не удастся успешно завершить применение всех основных файлов журналов к резервной базе данных. По умолчанию команда ожидает завершения восста- восстановления. Используйте ключевое слово NOWAIT, чтобы возвратить управление немедленно. REMARK REM[ARK] текст_комментария Команда REMARK используется для вставки ком- комментария в сценарий SQL*Plus. Например:
146 Команды SQL*Plus REM Этот сценарий написан Петровым. Параметр текст,_комментария —это ваш коммен- комментарий. REPFOOTER REPFtOOTER] [OFF | ON] | [COL x f S[KIP] x | TAB x | LE[FT] | CE[NTER] | R[I6HT] | BOLD | FORtMAT] спецификация_формата | текст | переменная...] Команда REPFOOTER определяет нижний колонти- колонтитул отчета, который печатается на последней стра- странице отчета после последней строки с данными и пе- перед нижним колонтитулом страницы (см. также опи- описание команды TITLE). REPHEADER REPH[EADER] IOFF | ON] | [COL x | S[KIP] x | TAB x | LE[FT] ( CE[NTER] | R[IGHT] | BOLD [ FOR[MAT] спецификация_формата | текст | переменная...] Команда REPHEADER определяет заголовок отчета, который печатается на первой странице от- отчета после верхнего колонтитула страницы и пе- перед первой строкой с данными (см. также описание команды TITLE). RUN R[UN]
Команды SQL*Plus 147 Команда RUN отображает и затем выполняет те- кущую команду в буфере SQL. Например: SOL> R 1* SELECT USER FROM dual USER JONATHAN SAVE SAVCEJ имя_файла [СЩЛ7Г] | REP[LACE] | APP[ENDJ] Команда SAVE (не поддерживается в iSQL*Plus) сохраняет содержимое буфера SQL в файле опера- операционной системы. Например: SAVE my_3anpoc.sql SAVE myjanpoc REPLACE Параметры имя^файла Имя файла, в котором сохраняется содержимое буфера. По умолчанию используется расшире- расширение ,sql. CREIATE1 Используется но умолчанию и успешно завер- завершает операцию, если не существует файл с ука- указанным именем. REPCLACE] Переписывает существующий файл с указан- указанным именем.
148 Команды SQL*Plus APP[END] Добавляет содержимое буфера в существую- существующий файл. SET установка_параметра Команда SET даст вам возможность настроить среду SQL*Plus. Например: SET DEFINE OFF SET SERVEROUTPUT ON SIZE 1000000 - FORMAT WORD_WRAPPED SET NULL ***** Установка параметров SET APPI[NFO] [ON | OFF | app^text } Управляет автоматической регистрацией ко- командных файлов, используя пакет DBMS_APPLE- CATIONJNFO. SET ARRAYtSIZE] {15 \ размер^массива} Устанавливает количество строк, которые воз- возвращает SQL*Plus из базы данных за один раз во время выполнения запроса. SET AUTO[COMMIT] {ON | OFF \ IMMEDIATE | число_инструкций } Управляет режимом автоматического сохране- сохранения изменений. Вы также можете задать коли- количество инструкций, выполняемых между опе- операциями завершения транзакций.
Команды SQL*Plus 149 SET AUTOP[RINT] {ON | OFF] Включает или отключает режим автоматиче- автоматического отображения содержимого переменных привязки, если они используются в SQL-инст- рукции или блоке PL/SQL. SET AUTORECOVERY {ON | OFF] Включает или отключает автоматическое вос- восстановление. Если автоматическое восстанов- восстановление включено, команда RECOVER выполняет- выполняется без вмешательства пользователя. SET AUTOT[RACE] {ON | OFF | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]] Включает или отключает режим автоматиче- автоматического отображения плана выполнения и стати- статистики выполнения для SQL-инструкции. SET BLOCCKTERMINATOR] {.|символ_за8ершения | ON | OFF} Устанавливает символ, который используется для завершения ввода блока PL/SQL По умол- умолчанию это точка. SET BUFCFER] {имя_буфера | SQL] Вы можете указать буфер, который хотите ис- использовать. Обратите внимание на то, что для выполняемых SQL-инструкций доступен толь- только один буфер. SET CLOSECUR[SOR] {ON | OFF] Определяет, будет ли SQL* Pins держать курсор инструкции открытым все время.
150Команды SQL*Plus SET CMDSLEP] {ON | OFF | символ_разделитель } Определяет, можно ли вводитьнесколько SQL- ипструкиий на одной строке, а также устанав- устанавливает символ-разделитель. Если задано значе- значение ON, по умолчанию в качестве разделителя используется точка с занятой. SET COLSEP разделитель^столбцов Задает символ или строку символов, которые отделяют столбцы данных один от другого. По умолчанию столбцы разделяются одним пробелом. SET COMPATIBILITY] {V7 | V8 | NATIVE) Задает версию Oracle, с которой должна быть совместима среда SQL*Plus. По умолчанию SQL*Plus принимает решение самостоятельно. SET CONQCAT] {ON | OFF | символ_конкатенации } Задаст символ конкатенации, который отмечает окончание имени подстановочной переменной в команде SQL*Plusf SQL-инструкции или блоке PL/SQL. По умолчанию используется точка. SET C0PYC[OMMIT] счетчик^пакетов Определяет, как часто SQL* Plus фиксирует из- изменения во время выполнения команды COPY. По умолчанию устанавливается значение 0. SET COPYTYPECHECK {ON \ OFF} Определяет, будет ли проверяться соответст- соответствие типов при копировании данных из одной таблицы в другу к) командой COPY.
Команды SQL*Plus 151 SET DEF[INE] {ON | OFF | символ^префикс } Задает символ, который определяет подстано- подстановочную переменную. По умолчанию использу- используется амнерсалд (&). SET DESCRIBE [DEPTH {1 \r\ | ALL}] [LINENUM {ON | OFF}] [INDENT {ON | OFF}] Определяет поведение команды DESCRIBE, Па- Параметр DEPTH контролирует уровень, до которо- которого рекурсивно описывается объект (например, столбец таблицы может содержать объект, ко- который в свою очередь может содержать вложен- вложенную таблицу и т. д.). Параметр LINENUM добав- добавляет номер строки в выходные данные коман- команды DESCRIBE. Параметр INDENT определяет, будут ли описания вложенных объектов выво- выводиться с отступом от левого края. SET DOCUMENT] {ON | OFF} Определяет, будет ли SQL*Plus отображать до- документацию, отмеченную командой DOCUMENT. SET ECHO {ON | OFF} Определяет, будет ли SQL* Plus отображать на экране те команды, которые выполняются из командного файла. SET EDITF[ILE] имя_рабочего_файла Этот параметр не поддерживается в iSQL*Plus. Задает рабочий файл для внешнего редактора, вызываемого командой EDIT. По умолчанию используется файл afiedtbuf.
152 Команды SQL* Plus SET EMBEDDED] {ON j OFF} Разрешает или запрещает использование вло- вложенных отчетов. Вложение дает возможность объединять два отчета в один без изменения ну- нумерации страниц. SET ESC[APE] {ON | OFF | символ_литерала } Задает специальный символ, который указыва- указывается перед первым символом (обычно ампер- сап дом) подстановочной переменной, если вы хотите, чтобы этот первый символ интерпрети- интерпретировался буквально, а не как часть имени нере- неременной. По умолчанию используется обратная косая черта (\). SET FEEDBACK] {ON | OFF | 6 | порог } Определяет, будет ли SQL*Plus отображать строки, обработанные SQL-инструкцией, и если будет, то сколько. SET FLAGGER {OFF | ENTRY | INTERMEDIATE] | FULL} Определяет, будет ли SQL*Plus проверять SQL-инструкции на соответствие синтаксису ANSI/ISO. SET FLU[SH] {ON | OFF} Управляет буферизацией выходных данных (не поддерживается в iSQL*Plus). SET HEAQDING] [ON | OFF] Управляет отображением заголовков столбцов при выборке данных. SET HEAOS[EP] {ON | OFF | разрыв_заголовка }
Команды SQL*Plus 155 Задает символ, который используется для за- задания разрыва строки в заголовке столбца. Пс умолчанию это вертикальная черта (|). SET INSTANCE [имя^службы | LOCAL] Задает имя сетевой службы, которая использу- используется по умолчанию с командой CONNECT. r SET LIN[ESIZE] длина^строки Задает длину строки в символах. По умолча- умолчанию длина строки составляет 80 символов. ' SET LOBOF[FSET] смещение Индекс в столбце типа LONG, задающий первый отображаемый символ. По умолчанию смеще- смещение равно 1. SET L06S0URCE 1од_путь Задает путь к каталогу, в котором SQL* Plus и iuei архивные файлы журналов при восстановлении. Варианта но умолчанию не существует. SET LONG длинам ong Задает максимальное количество символов, отображаемых для столбца типа LONG. По умол- ¦ чаиию — 80. / SET LONGCCHUNKSIZE] размер Задает максимальное количество символов, из- влекаемых из столбца типа LONG за один раз. Не умолчанию — 80. SET MAXD[ATA] макс_длина_строки Устанавливает максимальную длину строки, которую SQL*Plus может обрабатывать. Этс
154 Команды SQL*Plus вышедший из употребления параметр, и для него не существует значения но умолчанию. SET MARK[UP] параметры_разметки Позволяет задать параметры языка разметки, который используется при генерации выход- выходных результатов. Обязательным является пара- параметр HTML; другие параметры являются необя- необязательными. О HTML [ON | OFF] Этот параметр определяет, будет ли в каче- качестве языка разметки использоваться язык HTML О HEAD "текст" Задаст содержимое для тега <head>. Окон- Окончательно этот тег записывается в виде <head>TeKCT</head>. О BODY "текст" Задает содержимое для тега <body>. Окон- Окончательно этот те!1 записывается в виде <body текст>. О TABLE "текст" Задает содержимое для тега <table>, кото- который используется для форматирования ре- результатов запроса. Окончательно этот тег записывается в виде <tabte текст>. О EMTMAP {ON | OFF} Этот параметр определяет, будет ли SQL*Plus использовать эквиваленты языка
Команды SQL*Plus 155 HTML для специальных символов, напри- например &it; и &gt; вместо символов < и >. О SPOOL {ON | OFF} Этот параметр определяет, будет ли SQL*Plus записывать теги <head> и <body> в файл спулинга при снулинге выходных данных HTML. О PRE[FORMAT] {DN | OFF] Этот параметр определяет, будут ли выход- выходные данные отчета заключены в теш <рге>... </рге> или помещены в HTML-таблицу. Б некоторых операционных системах необ- необходимо заключать в двойные кавычки всю строку параметров разметки. SET NEWPCAGE].{строк_между_страницами | NONE} Задает количество строк, которые SQL*Plus пе- печатает между страницами (не поддерживается в iSQL*Plus). Если задано нулевое значение, SQL*Plus печатает символ подачи листа меж- между страницами. По умолчанию устанавливает- устанавливается 1. SET NULL nullj-екст Задает текст, который представляет значения NULL По умолчанию SQL*Plus использует про- пробел. SET NUMFCORMAT] спецификация^формата Устанавливает формат, используемый но умолчанию для отображения чисел. Значения
156 Команды SQL'Plusy по умолчанию для этого параметра не суще-; ствует. SET NUM[WIDTH] {10 | ширина} Устанавливает стандартную ширину отображе-' пия чисел. Значение, заданное командой SET.: NUMFORMAT, имеет приоритет над этим зпаче-. ни ем. ¦¦ SET PAGESCIZE] строк_на_странице Задает количество печатаемых строк на страшК цс. По умолчанию устанавливается 24. SET PAU[SE] {ON | OFF | сообщение_об_останове } Определяет, будет ли SQL* Plus останавливать-;, ся после вывода каждой страницы (не поддер-:; живается в iSQL*Plus). : SET RECSEP {ШСАРРЕ02 | ?А[СН] | OFF} / Определяет, будет ли печататься строка-раздели-;' тель записей между выводимыми записями. По/ умолчанию этот разделитель печатается только/ втом случае, если одно из значений полей в за-' писи разместилось на нескольких строках. SET RECSEPCHAR символ_разделителя_записей Задает символ, используемый в строке-разде-:; лителе записей. Но умолчанию разделителем? записей является строка пробелов. '¦: SET SCAN [ON | OFF} Разрешает или запрещает подстановку пользой вательских переменных. Это устаревшая коман- команда для поддержки команды SET DEFINE. ^
команды SQL'Plus 157 jjiET SERVEROUT[PUT] {ON | OFF} размер_буфера] [FOR[MAT] {WRA[PPED] yRAPPEDl | TRUNCATED]} Управляет режимом печати выходных данных от блоков PL/SQL ЕТ SHIFT[INOUT] {VISCIBLE] | INVUSI8LE1] ' Управляет отображением символов смены ре- регистра на терминалах IBM 3270 (не ноддержи- Р- вается в iSQL*P)us). кт SHOWLMODE] {ON | OFF | BOTH} | Этот параметр определяет, будет ли SQL*Plus отображать старое и новое значения после изменения установки (не поддерживается в iSQL*Plus). SPACE количество_пробелов Устанавливает количество пробелов между столбцами. По умолчанию устанавливается 1. Это устаревшая команда для поддержки коман- команды SET COLSEP. ET SOLBLANKLINES {ОМ | OFF] Этот параметр определяет, можно ли вводить | пустые строки как часть SQL-инструкции (не ^поддерживается в iSQL*Plus). Эта возмож- возможность появилась в Oracle Release 8.1.5. T SOLC[ASEj {MIXED | UPPER [ LOWER} | Управляет автоматическим преобразованием " регистра символов и SQL-инструкциях и бло- |. ках PL/SQL.
158 Команды SQL*Plus SET SQLCO[NTINUE] приглашение_на_продолжение Изменяет приглашение на продолжение ввода, которое используется при вводе много- многострочных SQL-инструкций (не поддерживает- поддерживается в iSQL*Plus). По умолчанию это символ >. SET SGLN[UMBER] {ON | OFF} Определяет, будет ли SQL*Plus использовать помер строки как приглашение на продолжение ввода многострочпой SQL-инструкции (непод- (неподдерживается в iSQL*Plus). SET SQLPLUSCOMPATLIBILITY] {x.y[.z] | 8.1.7} Заставляет SQL*Plus действовать в режиме со- совместимости с предыдущей версией программ- программного обеспечения. Введенная в Oracle9f, эта ус- установка в настоящее время влияет только на ра- работу команды VARIABLE, когда объявляются1 переменные тина NCHAR и NVARCHAR2. SET SQLPRECFIX1 символ_префикс Задает символ префикса SQL*Plus, который да- дает возможность выполнить команду SQL*Plus одновременно с вводом SQL-инструкции или блока PL/SQL в буфер (не поддерживается BiSQL*Plus). По умолчанию используется: символ #. SET SQLP[ROMPT] текст_приглашения Изменяет приглашение SQL*Plus ко вводу команд (не поддерживается в iSQL*PIus). По? умолчанию используется приглашение SQL>. '[
Команды SQL*Plus 159 "SET SQLTLERMINATOR] {ON | OFF | символ^окончания } Определяет, будет ли точка с запятой, заверша- завершающая SQL-инструкцию, служить командой I к выполнению инструкции. Вы также может за- задать другой отличный от точки с занятой, сим- символ окончания SQL-инструкции. SET SUFCFIX] расширение Задает расширение, которое будет использовать- использоваться ио умолчан и ю для командных файлов ( не под ~ держивается в iSQL*Pius). По умолчанию уста- устанавливается расширение .sql. SET TAB {DN | OFF} ! Определяет, будет ли SQL*Plus использовать символы табуляции для форматирования сво- свободного пространства (не поддерживается BiSQL*PIus). \Ш TERM[OUT] {ON | OFF} Определяет, будет ли SQL* Plus отображать вы- I ходпые данные, генерируемые файлом сцена- сценария SQL*Plus (не поддерживается в iSQL*PIus), iSET TICMED {ON | OFF} J- Определяет, будет ли SQL*Plus отображать те- "' кущее время как часть приглашения на ввод :- команды (не поддерживается в iSQL*Plus). IsET TIMI[NG] {ON | OFF} l Определяет, будет" ли SQL*Plus отображать Ь время, затраченное на выполнение SQL-ин- j струкции или блока PL/SQL.
160 Команды SQL*Ptus SET TRIM[OUT] {ON | OFF} Определяет, будет ли SQL*Plus отбрасывать конечные пробелы при отображении строк па экране (не поддерживается в iSQL*Plus). SET TRIMS[POOL] {ON | OFF} Определяет, будет ли SQL*Plus отбрасывать конечные пробелы при записи строк в файл снулиига (не поддерживается в iSQL*Plus). SET TRU[NCATE] {ON | OFF} Определяет, будет ли SQL*Plus усекать длин- длинные строки. SET UNDERLINE] {символ_подчеркивания | {ON | OFF}} Задает символ для подчеркивания заголовков столбцов. По умолчанию используется дефис. SET VER[IFY] {ON | OFF} Определяет, будет ли SQL* Plus отображать ис- исходную и конечную строки, содержащие под- подстановочные переменные. SET WRA[P] {ON | OFF} Определяет, будет ли SQL*PIus усекать длин- длинные текстовые значения или переносить текст па следующие строки. SHOW SHO[W] [установка | ALL | BTI[TLE] | ERR[ORS] [{FUNCTION | PROCEDURE | PACKAGE PACKAGE BODY I TRIGGER I TYPE
Команды SQL*P!us TYPE BODY | DIMENSION | JAVA CLASS} [владелец.]имя_объекта] | LNO | PARAMETERS] [имя_параметра] | PNO | REL[EASE] | REPF[OOTER] | REPH[EADER] | SGA | SPOO[L] | SQLCODE | TTI[TLE]-| USER] Команда SHOW дает возможность просмотреть текущее состояние среды SQL*Plus. Пример: SHOW PARAMETER dbj)lockj)uffers SHOW LINESIZE SHOW TTITLE Параметры установка Любая из установок, задаваемых с помощью команды SET, ALL Показывает все, кроме ошибок и системной глобальной области (System Global Area, SGA). BTICTLE] Отображает текущий верхний колонтитул. ERR[ORS] Отображает список ошибок для хранимого объ- объекта. Команда SHOW ERRORS без дополнительных параметров отображает список ошибок для по- последнего созданного объекта. Вы можете по- получить список ошибок для интересующего вас объекта, задав тип объекта (функция, процеду- процедура и т. д,) и имя объекта.
162 Команды SQL* Plus FUNCTION | PROCEDURE | PACKAGE | PACKAGE BODY | TRIGGER [ TYPE | TYPE BODY j DIMENSION | JAVA CLASS Используется с командой SHOW ERRORS для за- задания тина объекта. [владелец.]имя_объекта Используется с командой SHOW ERRORS для ука- указания имени объекта, список ошибок которого вы хотите отобразить. LNO Отображает помер текущей строки. PARAMETERS] [ имя__параметра ] Отображает текущее значение одного или не- нескольких параметров инициализации базы дан- пых. PNO Отображает номер текущей страницы. REL[EASE] Отображает версию базы данных Oracle, к ко- которой вы подключены. REPFCOOTER] Отображает текущий нижний колонтитул отчета, REPHLEADER] Отображает текущий заголовок отчета. SGA Отображает информацию о текущем состоянии области SGA. SPOOLL] Сообщает, выполняется ли в текущий момент спулииг выходных данных в файл.
Команды SQL*Plus 163 SQLCODE Отображает SQL-код, возвращенный послед- последней SQL-инструкцией. TTI[TLE] Отображает текущий заголовок страницы. USER Отображает текущее имя пользователя. SHUTDOWN SHUTDOWN [NORMAL | IMMEDIATE | TRANSACTIONAL [LOCAL] | ABORT] Команда SHUTDOWN позволяет остановить эк- экземпляр базы данных. Для того чтобы иметь право выполнять команду SHUTDOWN, вы должны под- подключиться к базе данных как пользователь SYSDBA, SYSOPER или INTERNAL (начиная с Oracle9ff INTERNAL не поддерживается). Например: SHUTDOWN SHUTDOWN IMMEDIATE Параметры NORMAL Перед закрытием экземпляра Oracle ждет, пока все пользователи добровольно отсоединятся. Этот параметр используется по умолчанию. IMMEDIATE Oracle без промедления отключает пользовате- пользователя, как только выполнится его текущая SQL-
164 Команды SQL*Flus инструкция. Открытые транзакции откатыва- откатываются. TRANSACTION [LOCAL] Oracle ждет, когда каждый пользователь завер- завершит свою текущую инструкцию, и затем отсое- отсоединяет его. Используйте ключевое слово LOCAL, чтобы ожидать завершения только локальных (не распределенных) транзакций. ABORT Все фоновые процессы для данного экземпля- экземпляра немедленпо закрываются. Аварийное восста- восстановление производится при следующем откры- открытии базы данных, или, если используется Oracle Parallel Server либо Real Application Clusters, один из действующих экземпляров базы дан- данных восстанавливает тот, который был аварий- аварийно закрыт. SPOOL SP[OOL] имя_файла | OFF | OUT Команда SPOOL направляет вывод в текстовый файл (не поддерживается в iSQL*Plus). Например: SPOOL c:\data\emp_pay_report SPOOL OFF Параметры имя_файла Имя файла, в который записываются выводи- выводимые данные. В зависимости от операционной
Команды SQL*Plus 165 системы по умолчанию используется расшире- расширение .1st или .lis (в Windows — это .1st), Путь ука- указывается как часть имени файла. OFF Отключает спулинг. OUT Отключает шулинг и печатает фай л на принтере, используемом по умолчанию. Данный параметр недоступен в версии SQL*Plus для Windows. START STA[RT] файл^сценария [аргумент...] Команда START выполняет сценарий SQL*Plus. Команды START и @ функционируют идентично (см. описание команды @). STARTUP STARTUP [FORCE] [RESTRICT] '. [PFILE-имя^файла] [QUIET] [ MOUNT [иия_БД] | OPEN [параиетры_открыгия] [иия^БД] | NOMQUNT] • [EXCLUSIVE | {PARALLEL | SHARED}] параметры_открытия ::* ; READ {ONLY | WRITE [RECOVER]} | RECOVER <. Существует альтернативная форма команды ; STARTUP: STARTUP [РРКЕ=имя_файла] MIGRATE [QUIET]
166 Команды SQL*Plus.j Команда STARTUP позволяет запустить экзем-J пляр Oracle и открыть базу данных. Например. STARTUP ¦ STARTUP RESTRICT STARTUP PFILE = c:\temp\tempinit.ora i Для того чтобы иметь право выполнять ко:*: манду STARTUP, вы должны подключиться кбазе| данных как пользователь SYSDBA, SYSOPER или.* INTERNAL (начиная с Oracle9i, INTERNAL не нод-,3 держивается). ;| Параметры 1 FORCE 'j Запускает экземпляр Oracle. Если экземпляр! уже запущен, то сначала выполняется эквива?| лент команды SHUTDOWN ABORT и затем экзем-| пляр запускается снова. ^ RESTRICT | Открывает базу данных в режиме RESTRICTED! SESSION. В этом режиме к базе данных могут! подключаться только пользователи, обладаю-jj щие привилегией RESTRICTED SESSION. | PFILE = имя_файла_параметров щ Предписывает SQL*Plus использовать при пуске экземпляра заданный файл параметров^ инициализации (обычно это файл INIT.ORA Путь указывается как часть имени файла.
ij Команды SQL*Plus 167 t . ПРИМЕЧАНИЕ Поскольку файл параметров читает SQL*P!us, а не экземпляр Oracle, путь к этому файлу должен быть понятен исполнительному ядру SQL'Plus. :: QUIET Запускает экземпляр, не отображая ииформа- !; цию о распределении памяти в области SGA. Amount [иня_бд] I- Устанавливает базу данных, по не открывает ее. |[имя_БД] I Необязательный параметр (задающий имя 6а- |[ зы данных), который должен использоваться | вместо параметра инициализации DB_NAME. lOPEN [параметры_открыгия] [имя_БД] | Устанавливает базу данных и затем открыва- с--' етее. ;; Запускает экземпляр без установки базы дан- данных. ¦READ {ONLY | WRITE [RECOVER]} Используйте ключевые слова READ ONLY, чтобы ;- открыть базу данных только для чтения. Клю- ; чевые слова READ WRITE позволяют явно задать : режим открытия, который и так применяется по умолчанию.
168 Команды SQL*Flus RECOVER Предписывает Oracle перед открытием восста- восстановить базу данных на носителе информации, если в этом есть необходимость, EXCLUSIVE База данных открывается или устанавливается исключительно текущим экземпляром Oracle. Никакие другие экземпляры не могут совмест- совместно использовать базу данных. Этот параметр применяется но умолчанию и не может приме- применяться одновременно с параметром SHARE или PARALLEL PARALLEL База данных открывается или устанавливается так, что доступ к ней разрешается нескольким экземплярам Oracle одновременно. SHARED Действует так же, как PARALLEL STORE STORE SET имя_файла [CRE[ATE] | REP[LACE] j APP[END]] Команда STORE (не поддерживается в iSQL*Plus) генерирует файл, содержащий команды SET с их текущими установками. Например: STORE SET current_settings REPLACE @cu men t_sett ings
Команды SQL*Plus 169 В данном примере первая команда сохраняет текущие установки, а вторая команда восстанавли- восстанавливает эти установки, выполняя файл, который сге- сгенерировала команда STORE. Параметры | имя_файла :; Имя файла, в который вы хотите записать | команды SET, <. CRE[ATE] Создает файл с указанным именем и возвраща- возвращает ошибку, если такой файл существует. Этот параметр применяется по умолчанию. REPCLACE] Переписывает существующий файл с заданным именем. APPfEND] Дописывает команды SET в существующий файл. TIMING TIMI{NG] [START [имя_таймера] | SHOW | STOP] Команда TIMING позволяет запустить таймер для измерения времени, прошедшего с момента за- запуска. Вы также можете остановить таймер или отобразить его текущее значение. Примеры: TIMING START emp_quiry_timer TIMING SHOW TIMING STOP
170 Команды SQL*Plus Параметры START [имя_таймера] Запускает новый таймер и присваивает ему имя, если вы его зададите. SHOW I Указывает текущее значение последнего запу- запущенного таймера, STOP Останавливает последний запущенный таймер, показывает его текущее значение и затем уда- удаляет его. TTITLE TTICTLE] [OFF | ON] | [COL х | S[KIP] x [ TAB x | LE[FT] | CE[NTER] | R[IGHT] | BOLD | FOR[MAF] спецификация_формата | текст | переменная..J Команда TTITLE определяет заголовок для стра- страниц отчета. Пример: TTITLE CENTER 'The Fictional Company' SKIP 3 - LEFT 'I.S. Department' - RIGHT 'Project Hours and Dollars Report' TITLE RIGHT FORMAT 999 SQL.PNO Команда TTITLE без параметров отображает те- текущие установки. Параметры OFF
Команды SQL*Flus Отключает печать заголовка страницы, но не удаляет его определение. ON Включает печать заголовка страницы. COL х Текст заголовка печатается начиная с заданной позиции. S[KIP] х Вставляет заданное количество разрывов строки перед тем, как начать печатать текст заголовка. TAB х Текст заголовка сдвигается вправо на заданное количество позиций (символов). Если задано отрицательное число, текст сдвигается влево. LE[FT] Текст заголовка печатается начиная с левого столбца текущей строки заголовка. CEENTER] Текст заголовка выравнивается по центру теку- текущей строки.. WIGHT] Текст заголовка выравнивается по правому краю. BOLD Текст заголовка печатается три раза ради эф- эффекта применения полужирного шрифта. F0REMAT] Позволяет задать формат для отображения чис- числовых данных в заголовке.
172 Команды SQL*Plus спецификация_формата Строка, задающая формат, который использу- используется для отображения числовых данных в загск ловке. текст Текст, который вы хотите включить в заголо- заголовок. переменная Вставляет в заголовок значение заданной поль- пользовательской переменной. Вы также можете не- - пользовать системные переменные SQL*Plus/ перечисленные в табл, 7. Таблица 7. Системные переменные SQL*Plus Системная Значение переменная SQLPNO Номер текущей страницы SQL.LNO Номер текущей строки SQLRELEASE Текущая версия Oracle SQLSQLCODE Код ошибки, возвращенный последним SQL-запросом : SQL.USER Имя текущего пользователя Oracle UNDEFINE UNDEF[INE] имя_переменной [имя_переменной.,.] Команда UNDEFINE удаляет определение задан- заданной пользовательской переменной. Пример:
Команды SQL*Plus 173 UNDEFINE empjiame UNDEHNE emp_name proj_name Вы можете удалить несколько переменных с помощью одной команды, разделяя имена пере- переменных пробелом. VARIABLE VAR[IA8LE] [имя_переменной [тип_данных]] Команда VARIABLE объявляет переменную при- привязки. Пример: VARIABLE х NUMBER VARIABLE 3anpoc_results REFCURSOR VARIABLE empjiame VARCHAR2C40) Переменные привязки являются реальными неременными, которые можно использовать в бло- блоках PL/SQL и SQL-инструкциях. Команда VARIABLE без параметров отображает список всех ранее объявлсииых переменных привязки. Параметры имя_переменной Имя, которое вы хотите назначить переменной. Если задано только имя без типа данных, SQL*Plus отображает тип данных указанной переменной. тил_данных Тип данных переменной привязки. Перечис- Перечисленные ниже типы данных разрешается исполь- использовать при объявлении переменной.
174 " Команды SQL* Pius * О NUMBER Переменная этого типа может содержать числа с плавающей точкой, так же как пере- переменная тина NUMBER в PL/SQL или столбец типа NUMBER в таблице, В отличие от PL/ SQL, SQL*Plus запрещает указывать дли- длину или точность, так что объявление вида NUMBER (9,2) недопустимо. О CHAR [(длина [CHAR | BYTE])] Переменная этого типа может содержать символьные строки фиксированной длины. Длину задавать не обязательно, и если она опущена, то переменная будет работать с од- побайтоными строками. О NCHAR [(длина)] Переменная этого типа может содержать символьные строки фиксированной длины с национальным набором символов. Длину задавать не обязательно, и если она опуще- опущена, то переменная будет работать с односим- односимвольными строками. О VARCHAR2 (длина [CHAR | BYTE]) Переменная этого типа может содержать символьные строки переменной длины. . О NVARCHAR2 (длина) Переменная этого типа может содержать сим вольные строки переменной длины с на- национальным набором символов.
Команды SQL*Plus 175 О CLOB Переменная этого типа может содержать большой символьный объект. О NCLOB Переменная этого типа может содержать большой символьный объект с националь- национальным набором символов. О REFCURSOR Объявляет курсорную переменную, которую можно использовать для возвращения резуль- результатов SQL-запроса из PL/SQL в SQL*Plus. WHENEVER WHENEVER {OSERROR | SQLERROR} {EXIT [SUCCESS | FAILURE | значение | ;перененная_привязки ] [COMMIT | ROLLBACK] j CONTINUE [COMMIT | ROLLBACK | NONE']} Команда WHENEVER определяет действия SQL* Plus в случае ошибки операционной системы или ошибки SQL Пример: WHENEVER OSERROR EXIT FAILURE WHENEVER SQLERROR EXIT FAILURE ROLLBACK WHENEVER SQLERROR CONTINUE Параметры WHENEVER OSERROR Используйте эту форму команды для того, что- чтобы задать ответную реакцию SQL*Plus па ошибку операционной системы.
176 Команды SQL*Plus WHENEVER SQLERROR Используйте ;-пу форму команды для того, что- чтобы задать ответную реакцию SQL*Plus на ошибку, возвращаемую SQL-инструкцией или блоком PL/SQL. EXIT SUCCESS Выход со статусом SUCCESS. EXIT FAILURE Выход со статусом FAILURE. EXIT значение Выход с заданным значением в качестве статуса. Значение может быть литералом пли пользовательской переменной. EXIT :леременная_лривязки Выход со значением заданной переменной при- привязки в качестве статуса, CONTINUE Если возникает ошибка, SQL*Plus продолжает свою работу. Именно так по умолчанию ведет себя SQL*Plus при нервом запуске. COMMIT Может использоваться совместно с ключевы- ключевыми словами EXIT и CONTINUE. Если возникает ошибка, SQL*Plus завершает текущую тран- транзакцию. Так по умолчанию ведет себя SQL* Plus, если в команде используется ключевое слово EXIT.
Команды SQL*Plus 177 ROLLBACK Может использоваться совместно с ключевы- ключевыми словами EXIT и CONTINUE. Если возникает ошибка, SQL*Plus производит откат текущей транзакции. NONE Может использоваться только с ключевым сло- словом CONTINUE, Если возникает ошибка, SQL* Plus не завершает текущую транзакцию и не отка- откатывает ее, Так но умолчанию ведет себя SQL*Plus, если в команде используется клю- ключевое слово CONTINUE.
Алфавитный указатель Символы - (дефис), символ продолжения команды, 20 — (двойной дефис), индикатор комментария, 107 -L[OGON|, параметр, 16 -MfARKUP], параметр, 16 -RfESTRICT], параметр, 16 -S[ILENT], параметр, 15 . (точка) при вводе SQL- инструкций, 21 при вводе блоков PL/SQL, 22 /(косая черта) команда, 109 при вводе блоков PL/ SQL, 22 /, при вводе SQL- инструкций, 21 /* и */» ограничители комментария, 107 /*+ и */, ограничители текста совета, 88 ;, ifpn вводе SQL- инструкций, 21 @, команда, 108 @@, команда, 109 ACCEPT, команда, 100, ПО ALL, ключевое слово, 50 APPEND команда, 111 совет, 93 ARCHIVE LOG, команда, 112 AS, параметр, 18 ASCt ключевое слово, 26
Алфавитный указатель 179 ATTRIBUTE, команда, 114 в BODY, параметр, 17 BREAK, команда, 78, 115 BTITLE, команда, 76, 116 CASE, выражение, 32 CHANGE, команда, 117 CHOOSE, совет, 89 CLEAR, команда, 118 COALESCE, функция, 30 COLUMN,.команда, 73, 74, 99, 119 COMMENT, предложение, 71 COMMIT, инструкция, 71 COMPUTE, команда, 80, 123 CONNECT, команда, 126 COPY, команда, 127 COUNT, функция, 46 D DECODE, функция, 33 DEFAULT, ключевое слово, 54 DEFINE, команда, 129 DEL, команда, 130 DELETE, инструкция, 62 DESC, ключевое слово, 26 DESCRIBE, команда, 130 DISCONNECT, команда, 131 DISTINCT, ключевое слово, 50 Е EDIT, команда, 131 ELSE, предложение, 33 ENTMAP, параметр, 17 EXECUTE, команда, 132 EXIT, команда, 132 EXPLAIN PLAN, инструкция, 82 FORCE, предложение, 72 FORMAT, предложение, 74 FULL OUTER JOIN, ключевое слово, 42 G GET, команда, 134 GROUP BY, предложение, 64
180 Алфавитный указатель н HAVING, предложение, 48 HEAD, параметр, 17 HEADING, предложение, 73 HELP, команда, 134 HOST, команда, 135 HTML, параметр, 17 i INNER JOIN, ключевое слово, 39 INPUT, команда, 135 INSERT, инструкция, 54 INTO, предложение, 57 IS NOT NULL, оператор, 29 IS NULL, оператор, 29 JUSTIFY, предложение, 74 LEADING, совет, 91 LEFT OUTER JOIN, ключевое слово» 41 LIST, команда, 136 LOWER, функция, 27 м MERGE, инструкция, 65 N NATURAL, ключевое слово, 44 NOJNDEX, сонет, 90 NO^MERGE, совет, 92 NOT IN, ключевое слово, 64 NULL, значение, 28 NVL, функция, 30 о ON, предложение, 43, 65 OR-pacimipeiiiM, 93 ORDER BY, предложение, 26, 48 ORDERED, совет, 90 ORDERED_PREDICATES, совет, 94 PASSWORD, команда, 137 PAUSE, команда, 138 PRE[ FORMAT], параметр, 17 PROMPT, команда, 138
Алфавитный указатель 181 Q QUIT, команда, 139 R RECOVER, команда, 139, 140 REMARK, команда, 145 REPFOOTER, команда, 146 REPHEADER, команда, 146 REWRITE, совет, 93 RIGHT OUTER JOIN, ключевое слово, 41 ROLLBACK, инструкция, 71 RUN, команда, 147 SAVE, команда, 147 SAVE POINT, инструкция, 71 SELECT, инструкция, 25 SET команда, 148 предложение, 59 SET , BLOCKTERM1NATOR, команда, 22 SETHEADSEP, команда, 74 SETLINES1ZE, команда, 75 SET MARKUP HTML ON, команда, 75 SET NEWPAGE NONE, команда, 78 SET NEWPAGE, команда, 78 SET PAGESIZE, команда, 75, 77 SETRECSEPOFF, команда, 99 SET SQLBLANKLINES ON, команда, 21 SET SQLTERMiNATOR, команда, 21 SET TRANSACTION, инструкция, 69 SET UNDERLINE, команда, 74 SHOW, команда, 161 SHUTDOWN, команда, 163 SKIP, предложение, 76 SPOOL команда, 164 параметр» 17 SQL-буфер, 21 sqlplus, команда, 15
182 Алфавитный указатель STAR, совет, 91 STA RT, команда, 165 STARTUP, команда, 166 STORE» команда, 168 TABLE, параметр, 17 TIMING, команда, 169 ТО, предложение, 72 TRUNCATE, инструкция, 63 TTITLE, команда, 76, 170 и UNDEFINE, команда, 172 UNION, запрос, 41 UPDATE, инструкция, 59 UPPER, функция, 27 USE ROLLBACK SEGMENT, предложение, 70 USE^CONCAT, совет, 93 USEJ4L, совет, 91 USING, предложение, 44 VARIABLE, команда, 173 w WHEN, предложение, 57 WHENEVER, команда, 175 WHERE, предложение, 27, 59, 62 агрегатные функции, 46 в и вод SQL-инструкций ограничитель/, 21 ограничитель;, 21 блоков PL/SQL, 22 команд SQL*Plus, 19 вложенные запросы коррелированные, 60 обычные, 60 внешлее объединение, 36 внутреннее объединение, 36 вставка данных, 54 мпоготабличная, 56 результатов запроса, 55 строки, 54
Алфавитный указатель 183 выражение CASE, 32 вычисление итогов» 47 д данные вставка, 54 выборка, 25 обновление, 59 отбор, 27 слияние, 65 удаление, 62 завершение транзакции, 71 задание имей файлов, 23 запросы итоговые, 45 объединение, 51 операторы объединения, 51 запуск SQL*Plus, 15 значения NULL определение, 28 сортировка, 29 и имена неременных пользовательских, 24 правила назначения, 24 привязки, 24 индикатор комментария, 107 инструкция COMMIT, 71 DELETE, 62 EXPLAIN PLAN, 82 INSERT, 54 MERGE, 65 ROLLBACK, 71 SAVEPOINT, 71 SELECT, 25 ¦ SET TRANSACTION, 69 TRUNCATE, 63 UPDATE, 59 итоги вычисление, 47 общие, 47 промежуточные, 47 итоговые запросы, 45 группировка данных, 47 условия отбора, 49 к кавычки, 23 ключевое слово ALL, 50 ASC, 26 DEFAULT, 54 DESC, 26
184 Алфавитный указател! ключевое слово (продолжение) DISTINCT, 50 FULL OUTER JOIN, 42 INNERJOIN, 39 LEFT OUTER JOIN, 41 NATURAL, 44 NOT IN, 64 RIGHT OUTER JOIN, 41 команда / (косая черта), 109 @, 108 @@, 109 ACCEPT, 100, 110 APPEND, 111 ARCHIVE LOG, 112 ATTRIBUTE, 114 BREAK, 78, 115 BTITLE, 76, 116 CHANGE, 117 CLEAR, 118 COLUMN, 73, 74, 99, 119 COMPUTE, 80, 123 CONNECT, 126 COPY, 127 DEFINE, 129 DEL, 130 команда (продолжение) DESCRIBE, 130 DISCONNECT, 131 EDIT, 131 EXECUTE, 132 EXIT, 132 GET, 134 HELP, 134 HOST, 135 INPUT, 135 LIST, 136 PASSWORD, 137 PAUSE, 138 PRINT, 138 PROMPT, 138 QUIT, 139 RECOVER, 139, 140 REMARK, 145 REPFOOTER, 146 REPHEADER, 146 RUN, 147 SAVE, 147 SET, 148 SETBLOCKTER- MINATOR, 22 SET HEADSEP, 74 SET LINESIZE, 75 SET MARKUP HTML ON, 75 SETNEWPAGE, 78
Алфавитный указатель SETNEWPAGE NONE, 78 SET PAGESIZE, 75, 77 SETRECSEPOFF, 99 SET SQLBLANK- LINES ON, 21 SET SQLTER- MiNATOR, 21 SET UNDERLINE, 74 SHOW, 161 SHUTDOWN, 163 SPOOL, 164 sqlplus, 15 START, 165 STARTUP, 166 STORE, 168 TIMING, 169 TTITLE, 76, 170 UNDEFINE, 172 VARIABLE, 173 WHENEVER, 175 M многотабличные вставки, 56 о обновление данных, 59 объединение запросов, 51 объединение (продолжение) с вложенными циклами, 91 таблиц в OracIeS/, 34 в Oracle^, 37 внешнее, 36, 40 внутреннее, 36, 39 естественное, 43 но равенству, 43 полное внешнее, .41 порядок, 39 синтаксис, 37 стандарт ANSI, 40 условия, 43 ограничители комментария, 107 оператор IS NOT NULL, 29 IS NULL, 29 откат транзакции, 71 п параметр -L[OGON], 16 -M[ARKUP], 16 -RESTRICT), 16 -S[ILENT], 15 AS, 18 BODY, 17
186 Алфавитный указатель параметр (продолжение) ENTMAP, 17 HEAD, 17 HTML, 17 PREtFORMATJ, 17 SPOOL, 17 TABLE, 17 перемепныепрнвязкн, 24 план выполнения, 82 SQL-инструкции, 82 запрос таблицы плана, 85 инструкция EXPLAIN PLAN, 84 описание запроса, 84 сонеты оптимизатору, 87 создание таблицы плана, 82 цена, 86 поисковые выражения CASE, 34 полное внешнее объединение, 41 пользовательские переменные, 24 предложение COMMENT, 71 ELSE, 33 FORCE, 72 FORMAT, 74 предложение (продолжение) GROUP BY, 64 HAVING, 48 HEADING, 73 INTO, 57 JUSTIFY, 74 ON, 43, 65 ORDER BY, 26, 48 SET, 59 SKIP, 76 TO, 72 USE ROLLBACK SEGMENT, 70 USING, 44 WHEN, 57 WHERE, 27, 59, 62 простые выражения CASE, 32 прямое произведение таблиц, 35 и сен дон им столбца, 28 таблицы, 35 пустая строка при вводе SQL-инструкций, 21 символ продолжения команды» 20 слияние данных, 65
Алфавитный указатель 187 совет CHOOSE, 89 LEADING, 91 NOJNDEX, 90 NO_MERGE, 92 ORDERED, 90 ORDERED_ PREDICATES, 94 REWRITE, 93 STAR, 91 USE_CONCAT, 93 USE_NL} 91 советы оптимизатору, 87' ограничители /*+ и */. 88 но методу доступа, 89 по порядку объединения, 90 по преобразованию запроса, 92 но цели оптимизации, 89 текст совета, 88 сортировка но возрастанию, 26 но убыванию, 26 спецификация формата, 95 таблицы, псевдонимы, 35 транзакция завершение, 71 транзакция (продолжение) задание атрибутов, 69 откат, 71 только для чтения, 70 точки сохранения, 71 управление, 69 уровень изоляции READ COMMITTED, 70 SERiALIZABLE, 70 У удаление всех строк, 62 данных, 62 дубликатов строк, 63 управление транзакциями, 69 ф форматирование символьных строк, 98 дат, 100 отчетов, 73 заголовки столбцов, 73, 76 колонтитулы, 76 миогострочпые заголовки, 73
188 Алфавитный указатель форматирование функция {продолжение) COALESCE, 30 отображение COUNT, 46 Даты, 76 DECODE, 33 разрывы страниц, 77 LOWER, 27 форматы NVLj зо столбцов, 74 UPPER, 27 ширинам длина страницы, 75 X спецификация, 95 чисел, 95 хэш-объединеиие, 92
Джонатан Генник Oracle SQL*Plus Карманный справочник 2-е издание Перевел с английского В. Широков Главный редактор Е. Строганова Заведующий редакцией И. Корнеев Руководитель проекта А, Жданов Художник И. Биржаков Корректоры Л. Моносов, И. Тимофеева Верстка /(. Кеме-Пелле Лицензия ИД № 05784 от 07.П9.01. Подписано к печати 10.06.04. Формат 60*.чУ "О. Усл. и. л. 5,88. ; Тираж 3000. Зак;п 2152. 000 «Питер Принт». 196105. Санкт-Петербур|. _\л. Ьлагодатгшя, д. 67в. х Налоговая льгота — общероссийский классификатор продукции ОК 005-93, том 2; 95 3005 — литература учебная. '¦\ Отпечатано с готошх диапозитивов в ГУН РК «Республиканская ¦типография им. II. Ф. Анохина» 185005, г. Петрозаводск, ул. Правды, 4.
Башкортостан Уфа, «Азия», ул. Зенцова, д. 70 (оптовая продажа), маг. «Оазис», ул. Чернышевского, д. 88, телефакс C472) 50-39-00. E-mail: asiaufa@ufanet.ru Дальний Восток Владивосток, «Приморский торговый дом книги* тел./факс D232) 23-82-12, E-maii: bookbase@mail.primorye.ru Хабаровск, «Мире, тел, D212) 30-54-47, факс 22-73-30, E-mail: sale_book@bookmirs. khv.ru Хабаровск, «Книжный мир», тел. D212) 32-85-51, факс 32-82-50. E-mail: postmaster@vwrldbooks.khl.ru Европейские регионы России Архангельск, «Дом книги», тел. (8(82) 65-41-34, факс 65-41-34. E-mail: book@atnel.ru Калининград, «Вестер», тел./факс @112) 21-66-28,21-62-07, E-mail: nshibkova@vester.ru http://www.vester.ru Северный Кавказ Ессентуки, «Россы», ул. Октябрьская, 424, тел./факс (87934) 6-93-09, E-mail: rossy@kmw.ru Сибирь Иркутск, «ПродаПитЪ», тел. C952) 59-13-70, факс 51-30-70. E-mail; prodalit@irk.ru htlp;//www.pr odalit.trk.ru Иркутск, «Антей-книга», тел./факс C952) 33*42-47. E-mail: antey@irk.ru УВАЖАЕМЫЕ ГОСПОДА! Ч книги издательского доми| «ПИТЕР» ВЫ МОЖЕТЕ ПРИОБРЕЛИ ОПТОМ И В РОЗНИЦУ У HAUJHJJ РЕГИОНАЛЬНЫХ ПАРТНЕРОВ,! Красноярск, «Книжный мир», % тел./факс C912) 27-39-71. к E-mail: book-world@public.krasnel.wl Нижневартовск, «Дом книги», Ц тел. C466) 23-27-14, факс 23-59-50-3 E-mail: book@nvartovsk.wsnel.fij J Новосибирск, «Топ-книга», ^ тел. C832K6-10-26, факс 36-10-27. E-mail: oftice@top-kniga.rL *fj htlp://www,top-kroga.ru ^ Тюмень, «Друг», .! тел./факс C452) 21-34-82. ? E-mail: drug@tyumen.ru \> Тюмень, «Фолиант», тел, C452) 27-36-06, факс 27-36-П;; E-mail: tolianl@lyumen,ru ;! Челябинск, ТД «Эврика», ул. Барбюса.д. 61, тел./факс C512) 52-49-23. -Л Е-mail;evr ika@chel.sufnei.ru .j Татарстан Казань, «Таис», *¦¦ тел. (8432) 72-34-55, факс 72-27-82^ E-mail: tais@bancorp ju Урал Екатеринбург, магазин № U, ул. Челюскинцев, д. 23, тел./факс C432) 53-24-90. E-mail: gvardia@mait. ur.ru Екатеринбург, «Валео-книга», ул. Ключевская, д, 5, тел./факс C432) 42-56-00. E-mail; valeo@elel.ru 3 IS ¦A i