/
Автор: Генник Д.
Теги: компьютерные технологии информационные машины машины для обработки данных программное обеспечение компьютерные программы
ISBN: 5-469-00214-4
Год: 2004
Текст
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 (например, < и >) вме-
вместо специальных символов, таких как < и >.
О 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-отчетах символами < и >,\ По
умолчанию для 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 для специальных символов, напри-
например ⁢ и > вместо символов < и >.
О 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