|
Построчные символьные функции.
ASCII(строка) Вычисляет код в 1-го символа строки по таблице сорти-
рующей последовательности.
CHR(n) Возвращает символ, имеющий код (ASCII или EBCDIC)
равный n.
INITCAP(симв) Делает 1-ую букву каждого слова в строке прописной, а
остальные буквы -- строчными.
INSTR(симв1, Возвращает позицию n-ного вхождения подстроки симв2 в
симв2, m, n) строку симв1. Поиск подстроки симв2 начинается с поз.
m. Пустые n и m задаются как 0.
LENGTH(симв) Возвращает длину строки симв.
LOWER(симв) Возвращает строку симв, преобразовав все буквы в
строчные.
LPAD(симв1, Добавляет n строк симв2 перед строкой симв1.
n, симв2)
LTRIM(симв, s) Удаляет начальные символы из строки симв вплоть до
1-го символа, не принадлежащего множеству s. Пустое s
задается как ''.
NLSSORT(симв) Выдает сортирующую последовательность для симв.
REPLACE(симв, Заменяет каждое вхождение find на new. Чтобы удалить
find, new) find, опустите new. Для одиночных символов исполь-
зуйте функцию TRANSLATE.
RPAD(симв1, n, Добавляет n раз симв2 после симв1.
симв2)
RTRIM(симв, set) Удаляет символы в конце симв начиная с символа, не принадле
жащего множеству set.Пустое множество set задается как ''.
SOUNDEX(симв) Возвращает строку, фонетически эквивалентную симв.
SUBSTR(char, Возвращает n символов строки char, начиная с сим-
c, n) вола c.
TRANSLATE(char, Заменяет в char каждый find на new.
find, new)
UPPER(char) Возвращает char, преобразовав все буквы в прописные.
Смотри также: построчные численные, преобразование, функции обработки дат,
обработка ошибок, прочие функции, команды, меню.
Построчные численные функции.
ABS(n) Возвращает абсолютное значение(n).
CEIL(n) Возвращает наименьшее целое число, большее или равное n.
-- 1 --
FLOOR(n) Возвращает наибольшее целое число, меньшее или равное n.
MOD(m,n) Возвращает результат деления m на n. Если n=0, то
возвращает m.
POWER(m,n) Возвращает m в n-ной степени. n должно быть целым числом.
ROUND(m,n) Возвращает m, округленное до n (необяз. параметр) десятич-
ных разрядов.
SIGN(n) Возвращает: -1 если n отрицательно; 1, если n положительно
или 0, если n = 0.
SQRT(n) Возвращает квадратный корень n.
TRUNC(m,n) "Сжимает" m до n (необяз. параметр) разрядов. -n добав-
ляет к целому числу n нулей.
Смотри также: Построчные символьные, функции обработки дат, обработка
ошибок, групповые функции, прочие функции, команды, меню.
ALTER CLUSTER (изменить кластер) Оператор SQL
ALTER CLUSTER польз.кластер --польз. и фразы ниже необязательны
PCTUSED целое --мин. используемое пространство в блоке
(подразумевается 40);
PCTFREE целое --% пространства в блоке для изменений
(подразумевается 10);
SIZE целое --число ключей, хранимых в кластере;
INITRANS целое --начальное число эл-тов транзакций;
MAXTRANS целое --макс. число одновременных транзакций;
STORAGE предложение --управляет распределением памяти;
Оператор ALTER CLUSTER переопределяет порядок последующего хранения
кластера. Вы можете изменить любой из указанных параметров, но Вы не мо-
жете сделать следующее:
- изменить кол-во или имена столбцов в кластерном ключе;
- изменить параметр MINEXTENTS;
- изменить какие-либо параметры, относящийсящиеся к уже существую-
щему блоку;
- удалить таблицы из кластера (для этого надо использовать операторы
DROP CLUSTER и DROP TABLE);
- изменить область размещения кластера;
Смотри также: create cluster, create table, команды, меню.
ALTER DATABASE (модифицировать базу данных)
Оператор SQL ALTER DATABASE
база_данных ADD LOGFILE 'имя_файла' SIZE целое K | M REUSE,... DROP LOGFILE
'имя_файла', 'имя_файла',... RENAME FILE 'имя_файла', 'имя_файла',...
TO 'имя_файла', 'имя_файла',... ARCHIVELOG | NOARCHIVELOG MOUNT
SHARED | EXCLUSIVE DISMOUNT OPEN | CLOSE NORMAL | IMMEDIATE
-- 2 --
Оператор ALTER DATABASE используется для того, чтобы:
1. Смонтировать базу данных в разделенном или исключительном режиме;
2. Открыть или закрыть базу данных;
3. Добавить, удалить или переименовать файл повтора работы.
Также можно сделать файл повтора работы архивируемым (полезно для восстанов-
ления носителя информации) или неархивируемым (пригодно только для восстанов-
ления инстанции). Если имя базы данных опущено, то подразумевается имя базы
данных, указанное в текущем файле INIT.ORA (параметр DB_NAME).
Смотри также: create database, команды, меню.
ALTER INDEX (модифицировать индекс) Оператор SQL
ALTER INDEX польз.индекс
INITRANS целое
MAXTRANS целое
STORAGE предложение
Оператор ALTER INDEX переопределяет порядок последующего хранения индек-
са. Параметры INITRANS, MAXTRANS, и STORAGE имеют то же значение, что и
в операторе CREATE TABLE (создать таблицу).
Смотри также: create index, create table, команды, меню.
ALTER ROLLBACK SEGMENT (модифицировать сегмент отката) Оператор SQL
ALTER PUBLIC ROLLBACK SEGMENT сегмент
STORAGE предложение
Оператор ALTER ROLLBACK SEGMENT позволяет сделать сегмент откака (сег-
мент аннулирования транзакции) доступным всем пользователям (PUBLIC), а
также изменить параметры, управляющие схемой его хранения. Чтобы сделать
сегмент общедоступным, используйте слово PUBLIC. Чтобы сделать сегмент
частным, надо уничтожить его (DROP) и создать заново (CREATE).
Предложение STORAGE влияет на дальнейшее распределение пространства в
сегменте. При изменении существующего сегмента нельзя использовать параметры
INITIAL и MINEXTENTS.
Смотри также: create database, create rollback, create tablespace,
rollback (откат), команды, меню.
ALTER SEQUENCE (изменить последовательность) Оператор SQL
ALTER SEQUENCE польз.последовательность
INCREMENT BY целое
MAXVALUE целое | NOMAXVALUE
MINVALUE целое | NOMINVALUE
CYCLE | NOCYCLE
CACHE целое | NOCACHE
ORDER | NOORDER
-- 3 --
Оператор ALTER SEQUENCE предназначен для:
1. изменения приращения при генерации последовательности чисел;
2. переустановки или удаления параметров MINVALUE или MAXVALUE;
3. включения или выключения характеристик CACHE и ORDER.
Значение CACHE должно быть меньше разности между MINVALUE и MAXVALUE.
Если Вы используете параметр CYCLE, то восходящая последовательность
после достижения MAXVALUE выдаст MINVALUE, а нисходящая -- после дости-
жения MINVALUE выдаст MAXVALUE.
Чтобы начать генерацию последовательности с нового числа надо удалить
(DROP), а затем заново создать (CREATE) последовательность.
Смотри также: sequences, create sequence, drop sequence, команды, меню.
ALTER TABLE (модифицировать таблицу) Оператор SQL
ALTER TABLE польз.таблица
ADD описание_столбца | ограничение_для_таблицы,
описание_столбца | ограничение_для_таблицы,...
MODIFY описание_столбца, описание_столбца,...
DROP CONSTRAINT ограничение, ограничение,...
PCTFREE целое PCTUSED целое
INITRANS целое MAXTRANS целое
STORAGE предложение
BACKUP
Оператор ALTER TABLE позволяет добавлять в таблицу столбцы и ограниче-
ния, изменять размер и тип данных существующих столбцов, изменять уста-
новки NULL/NOT NULL, удалять ограничения, изменять схему хранения табли-
цы и заносить в словарь данных информацию о том, что была создана
резервная копия таблицы (т.е. был выполнен выполнен BACKUP).
Смотри также: таблицы, create table, ограничение, команды, меню.
ALTER TABLESPACE (модифицировать область хранения) Оператор SQL
ALTER TABLESPACE область_хранения
ADD DATAFILE 'имя_файла' SIZE целое K | M REUSE,...
RENAME DATAFILE 'имя_файла', 'имя_файла',...
TO 'имя_файла', 'имя_файла',...
DEFAULT STORAGE предложение
ONLINE | OFFLINE NORMAL | IMMEDIATE
BEGIN BACKUP | END BACKUP
Оператор ALTER TABLESPACE позволяет добавлять и переименовывать файлы
базы данных, изменять подразумеваемые характеристики области хранения,
подключать и отключать области хранения и запускать или останавливать
запись резервной копии (BACKUP).
Для того, чтобы переименовать один или более файлов данных, нужно проде-
лать следующее:
1. Отключить область хранения;
2. Переименовать файлы при помощи средств операционной системы;
3. Переименовать файлы базы данных оператором ALTER TABLESPACE;
4. Подключить область хранения.
-- 4 --
Смотри также: create tablespace, create database, drop tablespace, АБД,
команды, меню.
ALTER USER (модифицировать пользователя)
ALTER USER имя_пользователя IDENTIFIED BY пароль
DEFAULT TABLESPACE область_хранения
TEMPORARY TABLESPACE область_хранения
При помощи оператора ALTER USER можно изменить пароль пользователя, из-
менить подразумеваемую область хранения для создаваемых им объектов или
область хранения для создаваемых им непостоянных сегментов.
Пароль пользователя также можно изменить при помощи оператора GRANT.
Подразумеваемая область хранения устанавливается и в случае предоставле-
ния пользователю права RESOURCE для какой-то области хранения, если это
1-я область, на которую пользователь получает такое право. Подразумевае-
мой областью для непостоянных объектов также становиться 1-я предостав-
ленная пользователю область хранения.
Смотри также: ид. пользователя, create tablespace, grant, команды, меню.
AUDIT (ревизия)
Оператор AUDIT может используоваться для достижения двух целей: либо для
установки параметров ревизии доступа к базе данных, либо для активизации
отслеживания доступа к объектам базы (например, к таблицам).
*** 1-й случай: установка параметров ревизии ***
AUDIT системн_параметр, системн_параметр,... | ALL
WHENEVER SUCCESSFUL
WHENEVER NOT SUCCESSFUL
Такая форма оператора AUDIT может включает регистрацию следующих событий:
- подключение к базе и отключение от нее;
- выполнение операторов, требующих права RESOURCE (системн.
параметр RESOURCE);
- выполнение операторов, требующих права DBA (системн.
параметр DBA);
- выполнение операторов, возвращающих ошибку ORA-942 -- "таблица
или представление данных не существует" (системн. параметр
NOT EXISTS).
Ревизия включается на системном уровне при помощи параметра AUDIT_TRAIL
в файле INIT.ORA. Если ревизия не включена, то оператоы AUDIT все равно
выполнятся не вызвав ошибки, однако регистрационная информация не будет
записываться. Все результаты ревизии (отслеживания) поступают в таблицы
словаря данных. По мере заполнения ревизионных таблиц словаря, Вы можете
архивировать старые записи, а затем стирать их. Но никогла не удаляйте
сами ревизионные таблицы словаря данных.
*** 2-й случай: включение слежения за доступом к объектам ***
-- 5 --
AUDIT табл_параметр, табл_параметр,... | ALL
ON польз.таблица | DEFAULT
BY SESSION | BY ACCESS
WHENEVER SUCCESSFUL | WHENEVER NOT SUCCESSFUL
Такая форма оператора AUDIT включает регистрацию получений доступа к
таблицам и представлениям данных.
BY SESSION или BY ACCESS
Определяет, как информация будет записываться в таблицу
AUDIT_TRAIL. Если употреблено предложение BY SESSION, то для каж-
дого сеанса работы пользователя отводится одна строка (запись),
изменяемая при каждой регистрации события. Предложение BY ACCESS,
наоборот, вызовет создание новой записи для каждого регистрируе-
мого события. Подразумеваемым является предложение BY SESSION.
WHENEVER SUCCESSFUL или WHENEVER NOT SUCCESSFUL
Определяет, выполнение каких опреаторов будет регистрироваться --
успешно закончившихся (WHENEVER SUCCESSFUL), или вызвавших ошибку
(WHENEVER NOT SUCCESSFUL).
Смотри также: noaudit, команды, меню.
Алиас (альтернатвное имя)
Таблице или столбцу можно присвоить альтернативное имя (алиас), которое
будет действительно только в пределах оператора, в котором оно определе-
но. Если альтернативное имя стоит после имени столбца в списке оператора
SELECT, то оно будет использоваться вместо настоящего имени как заголо-
вок для данного столбца.
Например:
ИМЯ НОМЕР ОКЛАД
SELECT ename "ИМЯ", empno "НОМЕР", sal "ОКЛАД" --------------------
FROM emp ADAMS 7876 1100
WHERE job = 'ANALYST' JAMES 7900 950
ORDER BY NAME; MILLER 7934 800
Альтернативное имя таблицы можно использовать при соединении таблицы с
самой собой в соотносящемся запросе.
SELECT wkr.ename, wkr.sal, sup.ename, sup.sal
FROM emp wkr, emp sup ENAME SAL ENAME SAL
WHERE wkr.mgr = sup.empno ----------------------
AND wkr.sal > sup.sal; SCOTT 3000 JONES 2975
FORD 3000 JONES 2975
Смотри также: select, список select, соединение, соотносящийся запрос,
меню.
Арифметич. и текст. операторы
Арифметические операторы языка SQL позволяют обрабатывать числовые зна-
чения. Существуют также операторы для обработки дат.
-- 6 --
Оператор Действие Пример
------------------------------------------------------------------------
() Изменяет старшинство операций SELECT (x + y)/2...
+ - Положит., отрицат. значение ...WHERE bal <= -50
* / Умножение, деление SELECT discount * 100...
+ - Сложение, вычитание SELECT price - discount...
Текстовый оператор || выполняет конкатенацию (объединение) данных типа
CHAR (строк символов). Пробелы учитываются, только если они стоят внутри
одинарных кавычек (' '). Обратите внимание на результаты нижеприведенных
выражений:
'Contact '||fname || ' ' || lname Contact Daniel Altman
ename || ' gets '|| sal || ' per month' King gets $5000 per month
Смотри также: char, сравнения, оператор like, логические операторы,
операторы обработки множеств, прочие операторы, меню.
Атрибуты
DECLARE
переменная1 таблица.столбец%TYPE
переменная2 переменная_или_константа%TYPE
Атрибут %TYPE используется для того, чтобы сделать сделать тип данных
какой-либо переменной таким же, как у другой переменной, константы или
столбца таблицы. Выигрыш от этого такой: не нужно точно знать тип данных
или параметры столбца на который Вы ссылаетесь, а если определение
столбца изменится, то тип данных переменной изменится так же.
Атрибут %ROWTYPE позволяет объявить переменную для хранения данных одной
строки таблицы или представления данных, либо для хранения строки, выб-
ранной оператором FETCH. Ссылаться на поля переменной, объявленной при
помощи %ROWTYPE, следует так:
имя_записи.имя_столбца.
DECLARE
CURSOR nextclient
IS SELECT fname, lname, phone
FROM clients;
callrecord nextclient%ROWTYPE;...
BEGIN
OPEN nextclient;
FETCH nextclient INTO callrecord;
Смотри также: declare, переменные, fetch, курсоры, меню.
BEGIN (начать)
<<метка>> BEGIN блок
Оператором BEGIN заканчиваеися секция объявления данных DECLARE (если
она есть) и начинается выполняемая часть блока. Каждый блок должен иметь
хотя-бы один выполняемый оператор. Каждый оператор BEGIN должен иметь
парный ему оператор END, который заканчивает блок.
-- 7 --
<<метка>> не обязательна. Однако, если Вы использовали ее, то к операто-
ру END, заканчивающем этот блок, должна быть добавлена метка <<метка>>.
Смотри также: блоки, declare, exception, end, команды, меню.
Форма НФБ. (НФБ - нормальная форма Бэкуса.)
Обязательные элементы заключены в фигурные скобки {}. Вы ДОЛЖНЫ вводить
один из разделенных вертикальной чертой элементов. Необязательные эле-
менты заключены в квадратные скобки []. Вы можете ввести один элемент из
списка эл-тов, разделенных вертикальной чертой. Три точки после эл-та
означают, что предыдущий эл-т может быть введен более одного раза.
Фмгурные, квадратные скобки и вертикальные черточки вводить НЕ НАДО.
Списки параметров заключены в круглые скобки. Эл-ты списка параметров
разделяются запятыми. Слова, написанные ПРОПИСНЫМИ БУКВАМИ обозначают
определенные слова. Слова, написанные строчными буквами, обозначают име-
на и выражения, которые могут быть различными.
COMMIT [WORK]
DELETE FROM [польз.]таблица [альтерн_имя] [WHERE условия]
INSERT INTO [польз.]таблица [ (столбец [, столбец]...) ]
{ VALUES (значение [, значение]...) | запрос }
LOCK TABLE [польз.]таблица [, [польз.]таблица...
ROLLBACK [WORK] [TO [SAVEPOINT] точка_сохранения]
SAVEPOINT точка_сохранения
SELECT [ALL|DISTINCT] { * | таблица.* | выражение [столбец_alias]}
[, {таблица.* | выражение [столбец_alias] } ]... }
FROM [польз.]таблица [таблица_alias] [,[польз.]таблица [таблица_alias]]...
[ WHERE условие ]
[ CONNECT BY условие [START WITH условие] ]
[ GROUP BY выражение[, выражение]... [HAVING условие] ]
[ {UNION | INTERSECT | MINUS} SELECT ... ]
[ ORDER BY {выражение | позиция} [ASC | DESC]
[, {выражение | позиция} [ASC | DESC]] ]...
[ FOR UPDATE OF столбец [, столбец]... [NOWAIT] ]
SET TRANSACTION [READ ONLY]
UPDATE [польз.]таблица [alias]
SET столбец = выражение [, столбец = выражение]...
[WHERE условие]
UPDATE [польз.]таблица [alias]
SET (столбец [, столбец] ... ) = (query) [,...]
[WHERE условие]
Смотри также: подсказку к любой из вышеприведенных команд.
Смотри также: команды, идентификаторы, меню.
-- 8 --
BOOLEAN (тип данных BOOLEAN)
BOOLEAN --параметров нет
Используется исключительно в PL/SQL. Переменные типа BOOLEAN (Булевы)
могут принимать только следующие предопределенные константные значения:
TRUE (ИСТИНА), FALSE (ЛОЖЬ) или NULL (ПУСТОЕ).
В переменную типа BOOLEAN нельзя поместить значение, извлеченное из базы
данных, так же как и нельзя записать (INSERT) такую переменную в базу.
Смотри также: переменные, булевы сравнения, меню.
Блоки
DECLARE --Основной блок
имя_переменной1 тип_данных (выражение); -- объявляться могут:
... переменные, константы,
... курсоры и особые состояния.
... Секция DECLARE
BEGIN необязательна.
DECLARE --1-й подблок
имя_переменной2 (выражение)...; --Можно "вкладывать"
BEGIN блоки друг в друга.
выполняемые_операторы...;
EXCEPTION обработчики_исключ_сост; --Секция EXCEPTION
END; необязательна.
DECLARE --2-й подблок
имя_переменной3 тип_данных (выражение)...;
BEGIN
выполняемые_операторы...;
END;
EXCEPTION обработчики_исключ_сост;
END;
Смотри также: declare, begin, правила видимости, переменные, обработка
ошибок, меню.
Булевы сравнения
Булевы операторы сравнения используются описания условий. Эти условия
используются для управления выполнением программы на PL/SQL.
Опер. С числами С текстом С датами
------------------------------------------------------------------------
< меньше чем лексикографически меньше раньше чем
> больше чем лексикографически больше позднее чем
= равно совпадает с тогда-же
!= не равно не совпадает в другое время
<= меньше или равно лексикографически меньше раньше чем или
или равно тогда-же
>= больше или равно лексикографически больше позднее чем или
или равно тогда-же
Также можно сравнивать и переменные типа BOOLEAN: TRUE > FALSE
FALSE < TRUE
TRUE != FALSE
-- 9 --
Смотри также: операторы сравнения, условия, boolean, меню.
Буфер
Команды SQL
Команды SQL, введенные Вами, хранятся в буфере SQL. Команда может
располагаться как на одной, так и на нескольких строках. Чтобы за-
кончить ввод и выполнить команду надо ввести точку с запятой (;),
пустую строку или косую черту (/) в отдельной строке. Перед каждой
дополнительной строкой SQL*Plus высвечивает соответствующие ей но-
мер. Чтобы записать содержимое буфера в файл, введите команду SAVE.
Чтобы выполнить команду, находящуюся в буфере SQL следует (в ответ
на приглашение SQL*Plus-а) ввести команду RUN или косую черту (/).
Блоки PL/SQL
Программы (блоки) на PL/SQL также хранятся в буфере SQL. Чтобы за-
кончить ввод блока PL/SQL следует ввести на отдельной строке точку
(.). Выполнить находящийся в буфере блок можно так же, как и команду
SQL -- введя RUN или косую черту (/). В текст блоков PL/SQL и команд
SQL можно вставлять комментарии в виде /*комментарий*/ или при помо-
щи оператора REMARK. В блоках PL/SQL можно начать комментарий двумя
минусами (--). Такой комментарий заканчивается вместе со сторокой.
Команды SQL*PLus
Длинные команды SQL*Plus можно разбить на несколько строк, используя
символ продолжения - (минус) в конце каждой непоследней строки.
Строка, не законченная символом - заканчивает команду и вызывает ее
выполнение.
Пример: Ввод команды COLUMN:
SQL> COLUMN ENAME HEADING EMPLOYEES -
> FORMAT A10
SQL>
Команды SQL*Plus можно заканчивать символом ; (точка с запятой), но
это не обязательно. Команды SQL*Plus не сохраняются в буфере SQL.
Для создания файлов, содержащих команды SQL*Plus, используйте коман-
ду EDIT. Файл команд запускается командой START. Комментарии к ко-
мандам SQL*Plus вводятся оператором REMARK. Можно также использовать
комментарии типа /*комментарий*/, но они не могут быть расположены в
одной строке с командой SQL*Plus -- они должны стоять на отдельных
строках.
Смотри также: подстановка, команды, меню.
CHAR CHAR(размер)
-размер необязателен; если не указан, то подразумевается 1.
Тип данных CHAR служит для описания столбцов и переменных, предназначенных для
хранения символьной информации в виде строк. Параметр 'размер' определяет
максимальное кол-во символов. 'Размер' не может быть больше чем 255.
Смотри также:
преобразование, переменные, number, long, date, boolean, raw, меню.
CLOSE (закрыть) CLOSE имя_курсора;
-- 10 --
Оператор CLOSE выполняет отключение триггера, оставляя активный набор
неопределенным. Оператором CLOSE можно закрыть только явно описанный и
открытый в данный момент курсор.
Чтобы произвести выборку (FETCH) из закрытого курсора, его необходимо
открыть заново. После этого система сделает следующее:
- Выполнит оператор OPEN
- Вычислит заново все параметры
- Инициализирует активный набор (т.е. строки, извлеченные запросом)
Смотри также: fetch, open, запрос, курсоры, команды, меню.
COMMENT (комментарий)
COMMENT ON TABLE польз.таблица
IS 'текст'
COMMENT ON COLUMN польз.таблица.столбец
IS 'текст'
Оператор COMMENT позволяет внести в словарь данных любые замечания к таблице
или столбцу. Текст этих замечаний будет хранится в столбце REMARKS представ-
лений данных словаря данных ALL_COL_COMMENTS, ALL_TAB_COMMENTS,
USER_COL_COMMENTS или USER_TAB_COMMENTS.
Чтобы удалить комментарий из базы данных, введите в качестве текста пос-
ле IS пустую строку -- два апострофа ('').
Смотри также: комментарии (в операторах SQL), словарь данных, команды,
меню.
COMMIT (вверить) Оператор SQL
COMMIT;
COMMIT WORK;
Оператор COMMIT окончательно вносит в базу данных любые изменения, сде-
ланные после предыдущего оператора COMMIT, и делает эту новую информацию
доступной для других пользователей.
Все блокировки таблиц и строк снимаются. Все точки сохранения, объявлен-
ные после предыдущего COMMIT или ROLLBACK, стираются.
До того, как Вы подтвердите изменения оператором COMMIT, Вы можете отме-
нить произведенную работу при помощи оператора ROLLBACK. При этом все
сделанные после предыдущего COMMIT изменения отменяется -- база данных
остается точно в таком состоянии, в каком она была после последнего
COMMIT.
Для обеспечения совместимости со стандартом ANSI рекомендуется писать
оператор так:
COMMIT WORK.
Смотри также: пример, rollback, savepoint, транзакции, set transaction,
форма НФБ, команды, меню.
-- 11 --
CONNECT BY Предложение SQL
SELECT список FROM...
WHERE...
CONNECT BY PRIOR выраж1 оператор выраж2 --снач. вывести выраж1
CONNECT BY выраж1 оператор PRIOR выраж2 --снач. вывести выраж2
START WITH условие; --не обязательно
Предложение CONNECT BY связывает строки в древовидную структуру, опреде-
ленную предложением PRIOR. Предложение PRIOR ставится перед порождающим
выражением.
CONNECT BY PRIOR EMPNO = MGR
Предложение CONNECT BY нельзя использовать в подзапросах и в операциях
соединения.
Смотри также: пример connect by, условия, древовидный запрос,
start with, where, команды, меню.
CREATE CLUSTER (создать кластер) Оператор SQL
CREATE CLUSTER польз.кластер
столбец тип_данных, столбец тип_данных,...
PCTUSED целое PCTFREE целое
SIZE целое
INITRANS целое MAXTRANS целое
TABLESPACE область_хранения
STORAGE хранение
Оператор CREATE CLUSTER создает кластер для одной или нескольких таблиц.
Кластеризация вынуждает базу данных хранить таблицы с одинаковыми клас-
терными ключами вместе, что сокращает время доступа к ним. Как правило,
имеет смысл объединять в кластер таблицы, над которыми часто производит-
ся операция соединения.
'Столбец' -- это имя или имена столбца (столбцов), которые являются
кластерными ключами. 'тип_данных' не может быть NULL или NOT NULL. Пара-
метр SIZE задает средний размер области, необходимой для хранения всех
строк с одинаковыми значениями ключей.
Остальные параметры -- PCTUSED, PCTFREE, INITRANS, и MAXTRANS -- имеют
такое же значение, как и в операторе CREATE TABLE.
Смотри также: create index, create table, таблицы, меню.
CREATE DATABASE
(создать базу данных) Оператор SQL
CREATE DATABASE база_данных
CONTROLFILE REUSE ВНИМАНИЕ: Если в момент выполне-
LOGFILE файл, файл,... ния оператора база данных с таким
MAXLOGFILES целое же именем уже существует, то все
DATAFILE файл, файл,... данные в ней будут уничтожены.
MAXDATAFILES целое
-- 12 --
MAXINSTANCES целое
ARCHIVELOG | NOARCHIVELOG --подразумевается NOARCHIVELOG
SHARED | EXCLUSIVE --подразумевается SHARED
Оператор CREATE DATABASE выполняет начальную подготовку базы данных для
ее дальнейшего использования.
база_данных
это имя базы данных. Максимальная длина имени базы -- 8 симво-
лов. Если имя не указано, то подразумевается имя, заданное пара-
метром DB_NAME в файле INIT.ORA.
CONTROLFILE REUSE
вынуждает повторно использовать файлы, описанные параметром
CONTROL_FILES в файле INIT.ORA. При этом стирается вся информа-
ция, находящаяся в них в данный момент. Этот параметр как прави-
ло не используется при первичном создании базы данных.
LOGFILE файл
указывает на файлы, используемые для повтора работы. Если пара-
метр опущен, то ORACLE создаст два таих файла. Их имена и разме-
ры зависят от операционной системы, с которой работает ваша ЭВМ.
MAXLOGFILES целое
устанавливает максимально возможное число файлов повтора работы.
Это число должно находиться в диапазоне от 2 до 256. Увеличить
это число можно только создав базу заново. Указание большого
числа не повлияет на работу базы.
файл
описывает файл. Писать следует так:
'имя_файла' SIZE размер K | M REUSE.
Целое после SIZE определяет размер файла в байтах; Если после
размера стоит K, то в килобайтах (размер х 1024 байт); если M,
то в мегабайтах (размер x 1 048 576 байт). Если размер не ука-
зан, то подразумевается 10М для файлов данных и 500К для файлов
повтора работы.
DATAFILE файл
определяет один или несколько файлов как файлы для хранения базы
данных. Если имена опущены, то ORACLE сам создаст один файл. Его
имя засист от операционной системы вашей ЭВМ.
MAXDATAFILES целое
устанавливает максимально возможное число файлов данных, которое
может иметь база. Как правило, это число лежит в пределах от 1
до 255. Это число может быть увеличено только путем повторного
создания базы. Излишки, вызваные указанием большого числа, не
повлияют на работу базы.
MAXINSTANCES целое
устанавливает максимальное число инстанций, имеющих возможность
одновременно открыть базу. Диапазон значений -- 1 - 255.
ARCHIVELOG или NOARCHIVELOG
определяет начальный режим использования файлов повтора работы.
Параметр ARCHIVELOG сделает необходимым архивирование файлов пе-
ред их повторным использованием. NOARCHIVELOG сделает архивиро-
-- 13 --
вание необязательным. Изменить режим использования файлов повто-
ра работы у существующей базы можно при помощи оператора ALTER
DATABASE.
SHARED или EXCLUSIVE
определяет доступность базы после ее создания. Если использовать
слово SHARED, то к базе смогут подключаться несколько инстанций.
Если использовать слово EXCLUSIVE, то только одна инстанция смо-
жет получать доступ к базе. Для установки доступности базы при
дальнейшей ее эксплуатации используйте команду SQL*DBA STARTUP.
Смоти также: alter database, create rollback, create tablespace, команды.
-- 14 --
CREATE DB LINK
(создать связь с БД) Оператор SQL
CREATE PUBLIC DATABASE LINK имя_связи
CONNECT TO имя_пользователя IDENTIFIED BY пароль
USING 'строка_sql*net'
Оператор CREATE DATABASE LINK открывает связь между местной базой и
пользователем в удаленной базе данных. Чтобы извлечь данные из таблицы в
удаленной базе, следует после имени таблицы (в предложении FROM операто-
ра SELECT) добавить @имя_связи.
PUBLIC
делает связь доступной для всех пользователей, кроме тех, кто
имеет частную связь с таким же именем. Если в операторе нет слова
PUBLIC, то данная связь будет частной -- т.е. доступной только
создавшему ее пользователю.
имя_пользователя, пароль
имя и пароль существующего пользователя в удаленной базе. Если
эти параметры опущены, то подразумеваются имя и пароль пользова-
теля, выполняющего оператор.
'строка_sql*net'
описывает доступную через SQL*Net удаленную базу данных.
Смотри также: распределенный запрос, select, from, create synonym, команды,
меню.
-- 15 --
CREATE INDEX Оператор SQL
CREATE UNIQUE INDEX
индекс ON таблица (столбец ASC|DESC, столбец ASC|DESC,...) | CLUSTER кластер
INITRANS целое
MAXTRANS целое
TABLESPACE область_хранения
STORAGE хранение PCTFREE = 10 | n NOSORT
Оператор CREATE INDEX создает индекс к таблице или кластеру. Индексиро-
вание сокращает время доступа к данным, обеспечивая прямое обращение к
строкам таблицы. Индекс также может быть использован для обеспечения
уникальности значений. Индексировать данные можно максимум по 16 столб-
цам. Можно создавать несколько индексов к разным сочетаниям столбцов,
однако следует помнить, что каждый индекс увеличивает время, затрачивае-
мое на обновление данных.
UNIQUE
гарантирует, что в таблице никогда не будет строк с одинаковыми
значениями во всех индексируемых столбцах.
индекс, таблица
имя создаваемого индекса и имя таблицы, к столбцам которой соз-
дается индекс.
столбец имя столбца таблицы.
ASC или DESC
параметр, используемый для обеспечения совместимости с DB2. Ин-
дексы создаются в восходящем порядке (ASC).
кластер имя кластера, к которому создается индекс.
область_хранения
имя области хранения, в которой будет хранится индекс.
PCTFREE
процент пространства в каждом индексном блоке, оставляемого пус-
тым для дальнейших вставок и обновлений.
NOSORT
отключает сортировку строк перед созданием индекса (если строки
уже отсортированы в восходящем порядке). Употребление этого па-
раметра может значительно ускорить процесс создания индекса. Па-
раметр NOSORT не может применяться при создании кластерного ин-
декса.
Параметры INITRANS и MAXTRANS имеют такое же значение, как и в операторе
CREATE TABLE. Синтаксис параметра STORAGE приведен в описании предложе-
ния STORAGE.
Смотри также: alter index, drop index, validate index, команды, меню.
-- 16 --
CREATE ROLLBACK SEGMENT
(создать сегмент отката) Оператор SQL
CREATE PUBLIC ROLLBACK SEGMENT имя_сегмента_отката
TABLESPACE область_хранения
STORAGE хранение
Оператор CREATE ROLLBACK SEGMENT создает один сегмент отката (аннулиро-
вания транзакции). Область хранения, к которой добавляется сегмент,
должна быть активной (подключенной).
PUBLIC
указывает, что сегмент будет доступен для любой инстанции. Если
слово PUBLIC опущено, то сегмент отката будет частным.
имя_сегмента_отката
идентификатор сегмента отката (макс. длина -- 30 символов).
область_хранения
область хранения, в которой создается сегмент. Если область хра-
нения не указана, то будет использована область SYSTEM.
Смотри также: create tablespace, create database,
alter rollback segment, drop rollback segment, rollback,
savepoint, команды, меню.
-- 17 --
CREATE SEQUENCE
(создать последовательность) Оператор SQL
CREATE SEQUENCE польз.имя_последовательности
INCREMENT BY n
START WITH n
MAXVALUE n | NOMAXVALUE
MINVALUE n | NOMINVALUE
CYCLE | NOCYCLE
CACHE 20 | n | NOCACHE
ORDER | NOORDER
Оператор CREATE SEQUENCE создает в базе данных объект, при помощи кото-
рого пользователи могут генерировать неповторяющиеся целые числа. Произ-
водимые таким образом значения могут использоваться в качестве первичных
ключей.
польз
владелец объекта 'последовательность' (подразумевается пользова-
тель, выполняющий оператор CREATE SEQUENCE).
INCREMENT BY n
задает приращение для генерируемых чисел. Если n положительно,
то значения будут возрастать; если n отрицательно -- значения
будут уменьшаться. Подразумеваемое значение данного параметра =
(+1).
START WITH n
задает 1-ое генерируемое число. Подразумеваемыми 1-ми числами
являются: для восходящих последовательностей -- MINVALUE, для
нисходящих -- MAXVALUE.
MAXVALUE n | NOMAXVALUE
Самое большое число, которе сгенерирует данная последователь-
ность. Подразумеваемое значение = 10e- для восходящих и = 1 для
нисходящих последовательностей.
MINVALUE n | NOMINVALUE
Наименьшее число, которе сгенерирует данная последовательность.
Подразумеваемое значение: 1 для восходящих последовательностей,
10e2-1 для нисходящих.
CYCLE | NOCYCLE
если задать параметр CYCLE, то после выдачи MAXVALUE восходящая
последовательность снова начнет генерацию с MINVALUE (а нисходя-
щая после MINVALUE начнет с MAXVALUE). Если задать NOCYCLE (что
подразумевается), то генерация чисел данной последовательностью
прекратится после выдачи соотв. маскимального (или минимального)
числа.
CACHE n | NOCACHE
параметр CACHE вызывает опережающее размещение генерируемых чи-
сел в памяти, что приводит к увеличению скорости выполнения.
Значение n должно быть меньше разности MAXVALUE и MINVALUE. Под-
разумеваемым значением для CACHE является 20.
-- 18 --
ORDER | NOORDER
параметр ORDER гарантирует, что числа будут генерироваться соот-
ветственно порядку обращения к последовательности, что очень
важно для некоторых приложений. Но даже если задать NOORDER (что
подразумевается), числа как правило генерируются в правильном
порядке.
Смотри также: последовательности, nextval, keys, alter sequence, audit,
drop sequence, команды, меню.
-- 19 --
CREATE SYNONYM
(создать синоним) Оператор SQL
CREATE PUBLIC SYNONYM польз.имя_синонима
FOR польз.таблица_или_представл_данных @связь_c_БД
Оператор CREATE SYNONYM создает синоним для обзначения таблицы или
представления данных. Частный синоним должен иметь имя, отличное от имен
любых объектов, принадлежащих создающему синоним пользователю.
PUBLIC
сделает созданный синоним доступным для всех пользователей. Если
параметр PUBLIC не задан, то синоним будет частным (т.е. доступ-
ным только для пользователя, который его создал).
польз
имя пользователя. Если оно не указано, то подразумевается что
таблица (или представлениек данных) принадлежит пользователю,
выполняющему оператор.
связь_c_БД
указывает на существующую связь с удаленной базой. Если конкрет-
ный пользователь не указан, то синоним будет создаваться для
объекта, принадлежащего пользователю, описанному в связи с уда-
ленной БД.
Смотри также: синонимы, user id, create database link, create table,
create view, удаленные базы данных, меню.
-- 20 --
CREATE TABLE
(создать таблицу) Оператор SQL
CREATE TABLE польз.имя_таблица описание_столбца | эл-т_таблицы,
описание_столбца | эл-т_таблицы,...
PCTFREE n PCTUSED n
INITRANS n MAXTRANS n
TABLESPACE область_хранения
STORAGE хранение
CLUSTER кластер столбец, столбец,...
AS запрос
Оператор CREATE TABLE создает таблицу в базе данных. Таблица может иметь
от 1 до 254 столбцов. Созданная таблица будет пуста (если не был указан
запрос в предложении AS). Строки данных как правило добавляются в табли-
цу с помощью оператора INSERT.
польз
владелец создаваемой таблицы (подразумевается пользователь, вы-
полняющий оператор).
описание_столбца
описание столбцов и возможных ограничений таблицы.
эл-т_таблицы
описание ограничений для таблицы.
PCTFREE n
определяет процент пространства (n) в каждом блоке таблицы, ре-
зервируемого для дальнейших обновлений и вставок данных. Число n
должно быть целым от 0 до 100. Подразумеваемое значение n -- 10.
n = 100 не имеет смысла, т.к. данные не смогут быть вставлены.
Сочетание значений параметров PCTFREE и PCTUSED определяет, бу-
дут ли новые данные запиываться в существующие блоки или для них
будут созданы дополнительные.
PCTUSED n
задает процент минимального использования пространства в каждом
блоке таблицы. n должно быть целым числом в диапазоне от 0 до
100. Подразумеваемое значение -- 40. Блок будет считаться сво-
бодным (т.е. готовым к принятию новых данных) если он заполнен
меньше, чем на указанное после PCTUSED число процентов. Блок пе-
рестает считаться свободным, когда он заполняется данными до
предела PCTFREE. Большие значения PCTUSED позволяют более эффек-
тивно использовать пространство таблицы, правда, за счет пониже-
ния производительности.
INITRANS n
устанавливает начальное число транзакционных записей в каждом
блоке. n должно быть целым числом в диапазоне от 1 до 255 (если
опущено, то подразумевается n = 1). При первом использовании
блока ORACLE резервирует в его свободной части 23 байта для каж-
дой транзакции. Когда число одновременных транзакций превысит
INITTRANS, новые транзакционные записи будут размещаться динами-
чески до тех пор, пока их число не достигнет MAXTRANS или пока
не заполнится блок.
-- 21 --
MAXTRANS n
устанавливает максимальное число транзакций, имеющих возможность
конкурентно модифицировать данные в блоке. n -- целое, от 1 до
255. Подразумеваемое значение n = 255.
область_хранения
область хранения, в которой будет существовать таблица. Если па-
раметр TABLESPACE опущен, то подразумевается область хранения
STORAGE.
STORAGE
устанавливает схему распределения пространства для хранения таблицы.
CLUSTER кластер столбец, столбец,...
включает таблицу в указанный кластер. Кластер должен принадле-
жать пользователю, выполняющему оператор.
Указывайте один столбец таблицы для каждого кластерного ключа.
Первый столбец таблицы должен соответствовать первому кластерно-
му столбцу, и т.д. Имена таблицы и кластерного столбца могут
быть разными. Кластеризуемые столбцы как правило являются пер-
вичным ключом (или частью первичного ключа) таблицы.
запрос
есть предложение SELECT. Столбцы, извлекаемые запросом, должны
соответствовать столбцам, перечисленным в операторе CREATE
TABLE. Тип данных и ширина столбцов создаваемой таблицы при этом
получаются такими же, как у столбцов, извлекаемых запросом. Если
столбцы в запросе имеют полностью определенные уникальные имена,
то имена столбцов после CREATE TABLE можно опустить -- они будут
унаследованы от запроса. После создания таблицы в нее загружают-
ся данные, извлеченные запросом. В запросе нельзя употреблять
предложения ORDER BY и FOR UPDATE OF.
Параметры эл-т_таблицы, в случае использования запроса, могут
содержать только имена столбцов. Чтобы добавить столбец или ог-
раничение, следует использовать оператор ALTER TABLE...ADD. Что-
бы модифицировать ограничение его нужно сначала удалить (ALTER
TABLE.. DROP CONSTRAINT), а затем вновь добавит (ADD).
Пример: Чтобы описать таблицу staff (предполагается, что Вы польз.
scott), следует ввести:
CREATE TABLE staff (
empno NUMBER NOT NULL PRIMARY KEY,
ename CHAR(20) NOT NULL CHECK (ename = UPPER),
job CHAR(10),
mgr NUMBER REFERENCES scott.staff(empno),
hiredate DATE CHECK (hiredate >= SYSDATE - 7),
sal NUMBER(10,2) CHECK (sal > 800),
comm NUMBER(9,2) DEFAULT NULL,
deptno NOT NULL REFERENCES scott.dept(deptno)
)
PCTFREE 5 PCTUSED 75
Смотри также: alter table, create cluster, create index,
create tablespace, drop table, ограничение, таблицы,
команды, меню.
-- 22 --
CREATE TABLESPACE
(создать область хранения) Оператор SQL
CREATE TABLESPACE область_хранения
DATAFILE (файл, файл,...)
DEFAULT STORAGE хранение
ONLINE | OFFLINE
Оператор CREATE TABLESPACE создает область хранения, состоящую из ука-
занных файлов, имеющую определенные параметры хранения и состояние
ONLINE (подключенное) или OFFLINE (отключенная). Для выполнения этого
оператора необходимо иметь право DBA.
файл
файл базы данных, описаний след. образом:
'имя_файла SIZE целое K | M REUSE
Параметр REUSE вынудит систему использовать заново файл с таким
же именем, предварительно стерев хранящуюся в нем информацию.
Областью хранения (TABLESPACE) в базе данных называется логическая еди-
ница, содержащая таблицы, индексы, временные сегменты и сегменты отката.
Также она является логической единицей для процедур создания резервной
копии и восстановления. При создании базы данных автоматически создается
одна область хранения с именем SYSTEM. Системные файлы можно добавлять
потом по мере надобности. Перед уничтожением (DROP) области зхранения ее
необходимо перевести в отключенное состояние. Рекомендуется создать в
области хранения хотя бы один сегмент отката.
Смотри также: alter tablespace, drop tablespace, команды, меню.
-- 23 --
CREATE VIEW
(создать представление данных) Оператор SQL
CREATE VIEW польз.имя_предст альт_имя, альт_имя,...
AS запрос
WITH CHECK OPTION CONSTRAINT ограничение
Оператор CREATE VIEW создает "логическое окно" (виртуальную таблицу,
представление данных) для одной иди нескольких таблиц или таких предс-
тавлений.
запрос
есть оператор SELECT (без предложений ORDER BY и FOR UPDATE OF),
который определяет, из каких столбцов и строк будет состоять
создаваемое предст. данных.
WITH CHECK OPTION
указывает, что следует не допускать вставки и обновления данных
через данное предст. данных, если они не будут "видны" через не-
го. Это бывает полезно, когда предст. данных основывается на
других представлениях.
Представление данных можно использовать вместо настоящей в операторах
SELECT, INSERT, UPDATE и DELETE, но при этом в операторе SELECT должны
присутствовать:
- объединение
- предложения GROUP BY, CONNECT BY или START WITH
- предложение DISTINCT, псевдо-столбцы (например, ROWNUM) или выра-
жения в списке столбцов. Можно также обновлять вирт. таблицы, со-
держащие псевдо столбцы (с помощью оператора UPDATE), если не пы-
таться изменить их значения.
Смотри также: views, create table, create synonym, drop view, rename,
меню.
-- 24 --
Команды
Наберите HELP и
Команды SQL*Plus Операторы SQL и PL/SQL название темы
------------------- ----------------------------------------------
@ get alter cluster create sequence noaudit
/ host alter database create synonym null
accept input alter index create table open
append list alter rollback create tablespace raise
break pause alter sequence create view rename
btitle prompt alter table declare revoke
change remark alter tablespace delete rollback
clear run alter user drop (objectname) savepoint
column runform audit end select
compute save begin exception set transaction
connect set close exit update
copy show comment fetch validate index
define spool commit goto constraints
del sqlplus create cluster grant
describe start create database if
disconnect timing create db link insert
edit undefine create index lock table
exit whenever create rollback loop
==== СМОТРИ ТАКЖЕ ====
меню (меню тем помощи)
старые команды (SQLPlus
примеры (SQL-PL/SQL)
Комментарии (SQL и PL/SQL)
Комментарии -- это поясняющие замечания, вставляемые в текст программы.
Они никак не влияют на ход выполнения программы. В PL/SQL можно отметить
начало комментария двумя минусами ("--"). Такой комментарий оканчивается
вместе со строкой. Например:
x NUMBER := 0; --инициализация местной переменной x
BEGIN
FOR i IN 1..4 LOOP
x := x+1; --прирастить x
В SQL (и в PL/SQL тоже) можно начать комментарий символами /* и продол-
жить его на сколько угодно строк. Такой комментарий заканчивается симво-
лами */. Эти цепочки (/* и */) можно использавать для временного исклю-
чения частей текста программы.
SELECT ename, sal, mgr /* Извлечь имена, оклады и начальников
служащих, получающих $2000 или больше.
(счастливчики) */
FROM emp
WHERE sal >= 2000;
Смотри также: comment, команды, меню.
-- 25 --
Операторы сравнения
Оператор Значение/действие в SQL
------------------------------------------------------------------------
= равно
!= <> не равно
>= больше или равно
<= меньше или равно
IN равен любому эл-ту в
NOT IN не равен любому эл-ту в
ANY Сравнивает знач. с любым из знач. в списке. Употребляется
после =, !=, >, <, <=, >=
ALL Сравнивает знач. с каждым знач. в списке. Употребляется
после =, !=, >, <, <=, >=
BETWEEN больше или равно знач1 и меньше или равно знач2
NOT Не больше и не равно
EXISTS Истина, если подзапрос извлек хотя бы одну строку
IS NULL Истина, если значение пусто (NULL) (проверка вида x = NULL
не годится)
IS NOT NULL Истина, если значение не пустое (не пишите x != NULL)
Все вышеперечисленные операторы вырабатывают значения TRUE (истина),
FALSE (ложь) или NULL (пустое значение).
Смотри также: like, булевы сравнения, подзапрос, пустые значения, меню.
-- 26 --
Условия
Условием в языке SQL называется сочетание одного или нескольких выраже-
ний и логических операторов, вырабатывающих значение TRUE (истина) или
FALSE (ложь). Условия могут использоваться:
- в предложении WHERE операторов SELECT, INSERT, UPDATE, и DELETE,
например:
SELECT ename, sal FROM emp WHERE job = 'ANALYST'...
- в предложениях CONNECT BY, START WITH, и HAVING оператора SELECT,
например:
SELECT ename, mgr FROM emp
CONNECT BY PRIOR empno = mgr START WITH ename = 'KING';
В языке PL/SQL условия употребляются в операторах IF и WHILE.
Смотри также: логические операторы, where, select, insert, update,
delete, connect by, if, while (цикл),
сравнение (операторы), булевы сравнения, меню.
-- 27 --
Ограничения
Язык SQL
Синтаксис описания ограничений для таблицы:
UNIQUE | PRIMARY KEY столбец, столбец,...
CONSTRAINT имя_ограничения
FOREIGN KEY столбец, столбец,...
REFERENCES польз.таблица столбец, столбец,...
CONSTRAINT имя_ограничения
CHECK условие CONSTRAINT имя_ограничения
Синтаксис описания ограничений для таблицы:
столбец NULL | NOT NULL CONSTRAINT имя_ограничения
UNIQUE | PRIMARY KEY CONSTRAINT имя_ограничения
REFERENCES польз.таблица столбец CONSTRAINT имя_ограничения
CHECK условие CONSTRAINT имя_ограничения
Предложение, описывающее ограничение, позволяет определить диапазон до-
пустимых значений одного столбца (ограничение для столбца) или группы
столбцов (ограничение для таблицы). Каждый оператор INSERT, UPDATE и
DELETE будет проверяться на соответствие правилам, установленных ограни-
чением, и будет выполнен успешно только если он удовлетворяет этим пра-
вилам.
Ограничения для таблиц являются частью глобального описания таблицы, ти-
па
CREATE TABLE project_employee (PROJECT NUMBER,
EMPLOYEE NUMBER, PRIMARY KEY (PROJECT, EMPLOYEE))
В свою очередь ограничения для столбцов являются локальными для указан-
ных столбцов, к примеру,
CREATE TABLE dept (DEPTNO NUMBER PRIMARY KEY,...)
Ограничения описываются в операторах CREATE TABLE и ALTER TABLE. Опера-
тор ALTER TABLE позволяет добавлять и уничтожать ограничения. Все опре-
деленные ограничения заносятся в словарь данных. Если Вы не дали ограни-
чению имя, то оно будет названо SYS_Cn, где n -- целое число,
используемое для обеспечения уникальности имени в базе данных.
столбец
имя столбца, к которому отностися ограничение
NULL or NOT NULL
разрешает или запрещает столбцу иметь пустое значение (NULL)
UNIQUE
указывает, что все значения в этом столбце дожны быть разными.
Каждый столбец должен быть описан с атрибутом NOT NULL. Столбец
не должен быть первичным ключом.
PRIMARY KEY
определяет столбец как первичный ключ
-- 28 --
FOREIGN KEY столбец, столбец... REFERENCES польз.таблица столбец,
столбец...
определяет столбец (или столбцы) как внешний ключ к польз.табли-
ца столбец. Подразумеваемый столбец -- первичный ключ таблицы.
Подробности смотри ниже.
CHECK условие
устанавливает условие, которому должно удовлетворять значение
столбца. В описании условия CHECK для столбца можно ссылаться
только на тот столбец, к которому оно относится. Условие CHECK
для таблицы может ссылаться на несколько столбцов.
Ограничение FOREIGN KEY/REFERENCES:
- не дает выполнится операторам INSERT и UPDATE, если соответствующих
значений нет в таблице, содержащей первичный ключ.
- не позволяет выполнится оператору DELETE, если его результат приво-
дит к нарушению ограничения REFERENCES.
- должно ссылаться на столбец первичной таблицы (т.е. содержащей пер-
вичный ключ), определенный как PRIMARY KEY или UNIQUE.
- если не указан столбец (столбцы), то ограничение будет использовать
тот столбец первичной ключа, который определенный как PRIMARY KEY.
- может ссылаться только на таблицу. На представление данных или клас-
тер ссылаться нельзя.
- требует, чтобы таблица, хранящая первичный ключ, принадлежала Вам и
чтобы Вы имели к доступ с правом REFERENCE либо к таблице, либо
только к столбцам, на которые Вы ссылаетесь при описании ограниче-
ния.
- никак не ограничивает использование тех же таблиц в описании других
ограничений.
- требует совпадения типов данных в столбце (столбцах) внешнего ключа
и в столбце (столбцах), к которым описывается ограничение.
- может ссылаться на ту же таблицу, что и в операторе CREATE TABLE.
- в одном ограничении не может ссылаться на столбец более одного раза.
Смотри также: tables, keys, nulls, create table, команды, меню.
-- 29 --
Функции преобразования
Функции преобразования в языке SQL выполняют преобразования данных из
одного типа в другой.
TO_CHAR(выражение, формат) Превращает численное выражение или выражение
с использованием дат в символьное представ-
ление по образцу, заданному форматом.
TO_DATE(char, формат) Преобразует дату из char в значение типа
DATE, используя указанный формат.
TO_NUMBER(char) Преобразует число из CHAR в значение типа
NUMBER.
CHARTOROWID(char) Преобразует символьные значения в значения
для ROWID.
ROWIDTOCHAR(ROWID) Преобразует значение ROWID в символьное.
CONVERT(char, Переводит char из исходной системы кодировки
new, source) символов в другую систему кодировки.
HEXTORAW(char) Преобразует шестнадцатеричные числа в двоич-
ные бесформатные значения (тип данных RAW).
RAWTOHEX(raw) Преобразует бесформатные (двоичные) данные в
символьное (шестнадцатеричное) представ-
ление.
Смотри также: char, date, number, неявные преобразования,
псевдо-столбцы, форматирование чисел, форматирование дат,
модификаторы формата, меню.
-- 30 --
Соотносящийся подзапрос
Соотносящийся подзапрос вычисляет запрос для КАЖДОЙ СТРОКИ запроса-роди-
теля. Для ясности рекомендуется использовать альтернативные имена таблиц
или столбцов.
SELECT список_столбцов FROM таблица1 алиас1 WHERE выраж оператор
(SELECT список_столбцов
FROM таблица2 алиас2
WHERE алиас1.столбец оператор алиас2.столбец);
UPDATE список_столбцов SET столбец =
(SELECT выражение
FROM таблица2 алиас2
WHERE алиас1.столбец = алиас2.столбец);
DELETE FROM таблица1 алиас1 WHERE столбец оператор
(SELECT выражение
FROM таблица2 alias2
WHERE алиас1.столбец = алиас2.столбец);
See also: пример соотносящегося подзапроса, пример delete, query,
алиас, select, where, update, delete, uses of select, menu.
-- 31 --
Атрибуты курсора
Выражение Курсор открыт; последний FETCH последний
до 1-й выборки (извлечена FETCH (нет
(FETCH) строка) строки)
возвращает: возвращает: возвращает:
---------------------------------------------------------------------------
cursor_name%FOUND NULL TRUE FALSE
cursor_name%NOTFOUND NULL FALSE TRUE
cursor_name%ROWCOUNT 0 Общее кол-во строк
выбранных с помощью
FETCH с момента
открытия (OPEN).
cursor_name%ISOPEN TRUE, если курсор
открыт (OPEN),
или FALSE, если
он закрыт.
Returns TRUE
if cursor is
OPEN, FALSE
if closed
Обращение к %FOUND, %NOTFOUND, и %ROWCOUNT возбуждают исключительное
состояние INVALID_CURSOR (ORA-01001), если курсор не находится в состоя-
нии OPEN.
Смотри также: open, fetch, nulls, курсоры, обработка ошибок,
атрибуты (%type и %rowtype), команды, меню.
-- 32 --
Цикл FOR с курсором
Оператор PL/SQL
FOR имя_записи IN имя_курсора(параметр, параметр,...) LOOP
операторы...
END LOOP;
При выполнении цикла FOR с курсором PL/SQL производит следующие дейс-
твия: порождает и неявно открывает курсор, затем делает неявную выборку
(FETCH) в (INTO) область имя_записи, извлекая строки, соответствующие
прикркпленному к курсором запросу. Для каждой извлеченной строки выпол-
няется последовательность операторов 'операторы...'. После извлечения
всех строк PL/SQL неявно закрывает курсор (CLOSE) и выходит из цикла.
Используемый курсор должен быть предварительно объявлен и закрыт к нача-
лу выполнения цикла. Необязательные параметры будут использованы (если
они есть) до выполнения 1-го прохода по циклу при неявном открытии кур-
сора. Типы данных этих параметров должны быть совместимы с типами данных
объявленных параметров курсора, или хотя бы преобразуемы.
Область 'имя_записи' неявно описывается как переменная типа имя_курсора%
ROWTYPE. Для ссылки на содержащиеся в этой области значения следует ис-
пользовать следующую форму записи:
имя_записи.имя_столбца
Описание других циклов смотри в: loop, while, численный цикл for.
Смотри также: пример for с курсором, open, fetch,
неявные преобразования, атрибуты, работа с курсорами,
команды, меню.
-- 33 --
Курсоры
Курсор -- это рабочая область PL/SQL, хранящая обрабатываемую в данный
момент строку данных. В текстах помощи к нижеперечисленным темам описы-
вается управление курсорами в процессе выполнения операций UPDATE,
INSERT и DELETE. Чтобы пролистать текст по определенной теме, введите
help, пробел и название темы.
declare cursor
open
fetch
close
цикл for с курсором
атрибуты курсора (явные)
курсор sql% (неявный)
where current of
Смотри также: update, insert, delete, меню.
-- 34 --
DATE
Каждое значение типа DATE состоит из века, года, месяца, числа, часа,
минут и секунд. Время хранится в 24-х часовой форме исчисления.
Подразумеваемые значения:
Если используется дата без времени, то время будет = 00:00:00 (пол-
ночь). Если используется время без даты, то дата будет сегодняшней
(SYSDATE). Если не указан формат даты, то подразумевается ДД-МЕС-ГГ
('09-JAN-42').
К датам можно прибавлять и отнимать от них числовые значения. Например,
SYSDATE + 1 = завтра;
SYSDATE - HIREDATE = всего отработанных дней
Представлением дат в отчетах можно управлять с помощью функций обработки
дат, форматов дат и модификаторов форматов дат.
Смотри также: функции обработки дат, форматирование дат,
модификаторы форматов, char, number, boolean, raw, меню.
-- 35 --
DBA
Пользователь с именем SYSTEM является DBA (АБД -- админстратором БД). Он
владеет таблицей PRODUCT_USER_PROFILE и имеет все права доступа к ней.
Все остальные пользователи могут иметь на эту таблицу только право
SELECT (только выборка). Командный файл PUPBLD, при выполнении, предос-
тавляет всем пользователям (PUBLIC) право SELECT на таблицу PRODUCT_USER
_PROFILE.
Если АБД захочет запретить какому-то пользователю выполнять определенную
команду SQL млм SQL*Plus, то он может (если он пользователь DBA) внести
в таблицу PRODUCT_USER_PROFILE запись со следующей информацией:
столбец USERID = имя пользователя
ATTRIBUTE = команда
CHAR_VALUE = слово DISABLED
столбцы SCOPE, NUMERIC_VALUE и DATE_VALUE должны быть пустыми. Например:
NUMERIC CHAR DATE
PRODUCT USERID ATTRIBUTE SCOPE VALUE VALUE VALUE
-------- ------ --------- ----- ------- -------- -----
SQL*Plus SCOTT HOST DISABLED
SQL*Plus % INSERT DISABLED
SQL*Plus % UPDATE DISABLED
SQL*Plus % DELETE DISABLED
Чтобы снова разрешить поьзователю выполнять запрещенную команду, DBA
должен стереть строку, описывающую запрет.
Пользователь с правом DBA может использовать таблицу
PRODUCT_USER_PROFILE для обеспечения недоступности след. команд:
Команды SQL*Plus Команды SQL
----------------- ------------------------------
CONNECT QUIT ALTER DROP RENAME
EDIT RUN AUDIT GRANT REVOKE
EXIT SAVE CONNECT INSERT SELECT
GET SPOOL CREATE LOCK UPDATE
HOST START DELETE NOAUDIT VALIDATE
Столбцы в таблице PRODUCT_USER_PROFILE имеют след. назначение:
PRODUCT содержит название продукта (в нашем случае SQL*Plus). Шабло-
ны (% и _) использовать нельзя.
USERID содержит имя_пользователя (написанное прописными буквами), к
которому относится запрет. Чтобы распостранить область действия
запрета на более чем одного пользователя, можно использовать
шаблонный символ % или делать несколько записей.
ATTRIBUTE содержит запрещаемую для выполнения команду (прописными
буквами). Нельзя использовать шаблоны.
SCOPE не имеет значения для SQL*Plus. Рекомендуется заносить NULL.
NUMERIC_VALUE не имеет значения для SQL*Plus. Рекомендуется заносить
NULL.
-- 36 --
CHAR_VALUE должно содержать слово "DISABLED". Шаблоны испоьзовать
нельзя.
DATE_VALUE не имеет значения для SQL*Plus. Рекомендуется заносить
NULL.
Смотри также: команды, меню.
-- 37 --
DECLARE
(объявить) Оператор PL/SQL
DECLARE
имя_константы CONSTANT тип_данных;
имя_переменной тип_данных;
CURSOR имя_курсора;
имя_исключ_состояния EXCEPTION;
BEGIN
...
Оператор DECLARE начинает раздел описания переменных и констант, доступ-
ных только в текущем блоке и его подблоках, но недоступных в объемлющих.
Раздел DECLARE заканчивается оператором BEGIN.
Использование раздела DECLARE не обязательно.
Смотри также: пример while, переменные, char, number, date, exception,
declare cursor, begin, блоки, команды, меню.
-- 38 --
DECLARE CURSOR
(объявить курсор) Оператор PL/SQL
DECLARE
CURSOR имя_курсора
(имя_параметра тип_данных),... --необязательно
IS SELECT_оператор
FOR UPDATE OF имя_столбца; --необходимо, если в данном блоке
... есть операторы UPDATE или
DELETE с предложением
WHERE CURRENT OF.
Оператор DECLARE CURSOR присваивает курсору имя и запрос. Если Вы ис-
пользуете параметры 'имя_параметра', то необходимо использовать их также
и в операторе SELECT_оператор, описывающем запрос для данного курсора.
Во избежание путаницы рекомендуется давать параметрам имена, отличающие-
ся от имен столбцов.
Тип данных 'тип_данных' может быть CHAR, NUMBER, DATE или BOOLEAN, без
каких-либо ограничений.
Смотри также: курсоры, пример курсоров, update, delete,
where current of, запрос, char, number, date, boolean,
declare, команды, меню.
-- 39 --
DELETE (удалить)
Вариант в SQL: Вариант в PL/SQL:
DELETE FROM таблица_или_предст DELETE FROM таблица_или_предст
WHERE предложение; WHERE CURRENT OF имя_курсора;
Оператор DELETE удаляет одну или несколько строк из указанной таблицы
или представления данных. Предложение WHERE определяет, какие именно
строки будут удалены. Если Вы хотите удалить все строки, то опустите
предложение WHERE.
Оператор PL/SQL DELETE с фразой WHERE CURRENT OF имя_курсора удаляет
только текущую строку -- последнюю, извлеченную при помощи FETCH.
Чтобы получить информацию о ходе выполнения оператора PL/SQL DELETE,
можно использовать атрибуты неявного курсора SQL% и атрибуты соотв. яв-
ного курсора.
Смотри также: пример delete, where, where current of, курсор sql%,
атрибуты курсора, форма НФБ, примеры, меню.
-- 40 --
DROP CLUSTER (уничтожить кластер)
Оператор SQL
DROP CLUSTER польз.кластер INCLUDING TABLES
Оператор DROP CLUSTER удаляет указанный кластер из базы данных. Уничто-
жение кластера вызывает также уничтожение индекса кластера и освобожде-
ние занимаемого пространства в области хранения. Чтобы уничтожить клас-
тер, созданный другим пользователем, Вы должны иметь прива DBA.
INCLUDING TABLES
вызывает уничтожение всех таблиц, входящих в кластер. Если эта
фраза опущена, то таблицы должны быть удалены до уничтожения
кластера.
Удаление кластеризованной таблицы исключает ее из кластера. Таблицу
нельзя просто "разкластеризовать". Для этого нужно создать такую же таб-
лицу, только без использования параметра CLUSTER. Например:
CREATE TABLE new AS SELECT * FROM old
Затем уничтожьте старую таблицу: DROP TABLE old
и переименуйте новую: RENAME new TO old
Смотри также: drop table, create cluster, alter cluster, команды, меню.
-- 41 --
DROP DATABASE LINK (уничтожить связь с БД)
Оператор SQL
DROP PUBLIC DATABASE LINK имя_связи
Оператор DROP DATABASE LINK уничтожает указанную связь с БД. Слово
PUBLIC нужно использовать, если связь доступна для всех пользователей.
Чтобы уничтожить общедоступную связь или связь, принадлежащую другому
пользователю, необходимоиметь права DBA.
Смотри также: связи, удаленные БД, create db link, команды, меню.
-- 42 --
DROP INDEX (уничтожить индекс)
Оператор SQL
DROP INDEX польз.индекс
Оператор DROP INDEX удаляет указанный индекс из базы данных. Чтобы сде-
лать это, Вы должны либо быть владельцем индекса, либо иметь права DBA.
Если имя польз. опущено, то подразумевается пользователь, выполняющий
оператор.
После уничтожения индекса освобождается все пространство, занимаемое им
в области хранения.
Смотри также: alter index, create index, create table, команды, меню.
-- 43 --
DROP ROLLBACK SEGMENT (уничтожить сегмент отката)
Оператор SQL
DROP PUBLIC ROLLBACK SEGMENT сегмент
Оператор DROP ROLLBACK SEGMENT уничтожает указанный сегмент отката. Сло-
во PUBLIC нужно использовать, если сегмент создан как PUBLIC (общедос-
тупный). Уничтожить сегмент отката может только пользователь с правами
гией DBA. Уничтожать можно только неиспользуемые сегменты.
После уничтожения сегмента освобождается все занимаемое им пространство
в области хранения.
Смотри также: rollback, alter rollback, create rollback,
create tablespace, dba, команды, меню.
-- 44 --
DROP SEQUENCE (уничтожить последовательность)
Оператор SQL
DROP SEQUENCE польз.последовательность
Оператор DROP SEQUENCE удаляет из базы данных указанную последователь-
ность. Чтобы удалить последовательность, Вы должны либо быть ее владель-
цем, либо иметь права DBA. Если имя польз. опущено, то подразумевается
имя пользователя, выполняющего оператор.
Единственный способ "перезапустить" последовательность -- это унич-
тожить и заново создать ее. К примеру: предположим, что принадлежа-
щая Вам последовательность POWERS находится на числе 288, а Вы хоти-
те заново начать генерацию чисел с 12. Тогда нужно выполнить
следующее:
DROP SEQUENCE powers
CREATE SEQUENCE powers . . .
START WITH 12
Смотри также: последовательности, alter sequence, create sequence,
команды, меню.
-- 45 --
DROP SYNONYM (уничтожить синоним)
Оператор SQL
DROP PUBLIC SYNONYM польз.синоним
Оператор DROP SYNONYM удаляет из базы данных указанный синоним. Слово
PUBLIC нужно употреблять, если синоним доступен всем пользователям. Что-
бы уничтожить общедоступный или чужой синоним, необходимо иметь права
DBA.
Для модификации синонима его следует уничтожить и создать заново.
Смотри также: синонимы, create synonym, команды, меню.
-- 46 --
DROP TABLE (уничтожить таблицу)
Оператор SQL
DROP TABLE польз.таблица
Оператор DROP TABLE удаляет из базы данных указанную таблицу и всю хра-
нящуюся в ней информацию. Чтобы уничтожить таблицу Вы должны быть либо
ее владельцем, либо иметь права DBA.
Все соответствующие индексы уничтожаются вместе с таблицей. Представле-
ния данных и синонимы, ссылающиеся на уничтоженную таблицу, остаются, но
становятся ошибочными. Их нужно или тоже уничтожить, или откорректиро-
вать их так, чтобы они стали действительными.
Блоки в соответствующей области хранения, которые занимали данные и ин-
дексы таблицы, освобождаются (если таблица не была кластеризована).
Оператор DROP CLUSTER INCLUDING TABLES уничтожает все таблицы, входящие
в кластер.
Небесполезно перед уничтожением таблицы просмотреть предст. данных USER_
CROSS_REFS в словаре данных, чтобы найти все ссылки на подлежащую унич-
тожению таблицу.
Смотри также: drop cluster, alter table, create index, create table,
таблицы, команды, меню.
-- 47 --
DROP TABLESPACE (уничтожить область хранения)
Оператор SQL
DROP TABLESPACE область_хранения INCLUDING CONTENTS
Оператор DROP TABLESPACE удаляет из базы данных указанную область хране-
ния. Область хранения по имени SYSTEM не может быть удалена. Удалить об-
ласть хранения может только пользователь с правами DBA.
INCLUDING CONTENTS
уничтожает все объекты, находящиеся в указанной области, включая
таблицы, кластеры, сегменты отката и временные сегменты. Если
фраза INCLUDING CONTENTS опущена, то все объекты в области долж-
ны быть предварительно уничтожены.
Перед удалением области хранения ее нужно перевести в отключенное состо-
яние. Область хранения не может быть уничтожена когда пользователи рабо-
тают с находящимися в ней данными, индексами, сегментами отката или вре-
менными сегментами.
Смотри также: alter tablespace, create database, create tablespace, dba,
команды, меню.
-- 48 --
DROP VIEW (уничтожить представление данных)
Оператор SQL
DROP VIEW польз.предст_данных
Оператор DROP VIEW удаляет из базы данных указанное представление данных
(виртуальную таблицу). Чтобы уничтожить представление данных нужно быть
либо его владельцем, либо иметь права DBA.
После уничтожения представления данных все ссылающиеся на него предст. и
синонимы остаются, но становятся недействительными. Их нужно либо уда-
лить, либо откорректировать так, чтобы они стали действительными.
Чтобы изменить представление данных его следует уничтожить и создать за-
ново.
Небесполезно перед уничтожением предст. просмотреть предст. данных USER_
CROSS_REFS в словаре данных, чтобы найти все ссылки на подлежащее унич-
тожению предст.
Смотри также: представление данных, синонимы, create table, create view,
create synonym, словарь данных, команды, меню.
-- 49 --
Словарь данных.
Словарь данных предназначен для хранения информации об объектах и собы-
тиях в СУРБД ORACLE, которая доступна пользователям через множество
представлений данных. Для получения полного перечня таблиц и представле-
ний словаря данных, выполните запрос в DICTIONARY.
Имя представления Описание
------------------------------------------------------------------------
ACCESSIBLE_COLUMNS столбцы всех таблиц, представлений и кластеров
ACCESSIBLE_TABLES таблицы и представления, доступные пользователю
AUDIT_ACTIONS перекодировка номеров действий в их наименования
ALL_CATALOG доступные таблицы, представления, минонимы и
последовательносьти.
ALL_COL_COMMENTS комментарии к столбцам доступных таблиц и предст.
ALL_COL_GRANTS права на столбцы, к которым польз. имеет отношение
как давший, получивший или владелец, или же полу-
чившим является PUBLIC
ALL_COL_GRANTS_MADE права на столбцы, к которым польз. имеет отношение
как владелец или как давший право
ALL_COL_GRANTS_RECD права на столбцы, полученные польз. или всеми
ALL_DB_LINKS доступные пользователю связи с удаленными БД
ALL_DEF_AUDIT_OPTS подразумеваемые парам. ревизии для таблиц и системы
ALL_INDEXES описание индексов к доступным таблицам
ALL_IND_COLUMNS столбцы, включающие индексы к доступным таблицам
ALL_OBJECTS объекты, доступные пользователю
ALL_SEQUENCES описания принадлежащих польз. последовательностей
Имя представления Описание
--------------------------------------------------------------------------
ALL_SYNONYMS синонимы, доступные пользователю
ALL_TABLES описания таблиц, доступных пользователю
ALL_TAB_AUDIT_OPTS парам. ревизи для доступных таблиц и представлений
ALL_TAB_COLUMNS столбцы всех таблиц, представлений и кластеров
ALL_TAB_COMMENTS комментарии к доступным пользователю таблицам и
представлениям данных.
ALL_TAB_GRANTS права на объекты, к которым польз. имеет отношение
как давший, получивший или владелец, или же полу-
чившим является PUBLIC
ALL_TAB_GRANTS_MADE права польз. и права на его объекты
ALL_TAB_GRANTS_RECD права на объекты, полученные польз. или всеми
ALL_USERS информация обо всех пользователях базы данных
ALL_VIEWS тексты доступных польз. представлений данных
AUDIT_ACTIONS коды действий и их описание
COLUMN_PRIVILEGES то же, что и ALL_COL_GRANTS
CONSTRAINT_COLUMNS доступные столбецs в описаниях ограничений
CONSTRAINT_DEFS описания ограничений к доступным таблицам
DICTIONARY описание таблиц и представлений словаря данных
DICT_COLUMNS столбцы таблиц и представлений словаря данных
TABLE_PRIVILEGES то же, что и ALL_TAB_GRANTS
USER_AUDIT_CONNECT ревизионные записи о пользовательских подключениях
к БД и отключениях от нее
USER_AUDIT_TRAIL ревизионные записи, относящиеся к пользователю
USER_CATALOG доступные таблицы, представления данных, синонимы
и последовательности.
USER_CLUSTERS описания принадлежащих польз. кластеров
USER_CLU_COLUMNS соответсвие между столбцами таблицы и столбцами
-- 50 --
кластера
USER_COL_COMMENTS комментарии к столбцам таблиц и предст. данных
пользователя
USER_COL_GRANTS права на столбцы, где польз. является владельцем,
давшим право, или же получившим его
USER_COL_GRANTS_MADE права на столбцы объектов, принадл. польз.
USER_COL_GRANTS_RECD права на столбцы, предоставленные польз
USER_CROSS_REF перекрестные ссылки на предст. данных, синонимы и
ограничения пользователя
USER_DB_LINKS принадлежащие польз. связи с удаленными БД
USER_EXTENTS экстенты, содержащие принадл. польз. сегменты
USER_FREE_SPACE свободные экстенты в принадлежащей польз. области
хранения
USER_INDEXES описания принадлежащих пользователю индексов
USER_IND_COLUMNS индексированные столбцы таблиц польз.
USER_OBJECTS объекты, принадлежащие пользователю
USER_SEGMENTS пространство, занятое всеми сегментами БД
USER_SEQUENCES описания принадлежащих польз. последовательностей
USER_SYNONYMS частные синонимы пользователя
USER_TABLES описания принадлежащих польз. таблиц
USER_TABLESPACES описания доступных областей хранения
USER_TAB_AUDIT_OPTS парам. ревизии для таблица и предст. пользователя
USER_TAB_COLUMNS столбцы таблиц, представлений данных и кластеров польз.
USER_TAB_COMMENTS комментарии к принадл. польз. таблицам и предст.
USER_TAB_GRANTS права на объекты, к которым польз. имеет отношение
как давший, получивший или владелец, или же полу-
чившим является PUBLIC
USER_TAB_GRANTS_MADE права на объекты пользователя
USER_TAB_GRANTS_RECD права на объекты, полученные польз.
USER_TS_QUOTAS квоты области хранения для польз.
USER_USERS информация о текущем польз.
USER_VIEWS тексты принадлежащих польз. представлений данных
Смотри также: sequences, синонимы, команды, меню.
-- 51 --
Функции обработки дат
Почти все нижеперечисленные ф-ции возвращают значение типа DATE. Ф-ция
MONTHS_BETWEEN возвращает численное значение.
ADD_MONTHS(d, n) Прибавляет к дате d n месяцев (n = целое).
LAST_DAY(d) Возвращает последнее число месяца в заданной
дате d.
MONTHS_BETWEEN(d, e) Возвращает кол-во месяцев между датами d и e.
NEW_TIME(d, a, b) По заданной дате d во временном поясе a вычисляет
соотв. им дату/время во временном поясе b. Для
обозназначения врем. поясов используются сокраще-
ния (см.ниже).
NEXT_DAY(d, day) Вычисляет дату, выпадающую на ближайший день
недели (по имени), наступающий после даты d.
SYSDATE Возвращает текущую дату и время.
ROUND(d, формат) Округляет дату d в соответствии с указанным
форматом (см. ниже).
TRUNC(d, формат) "Обрезает" дату d в соответствии с указанным форматом
(см. ниже). TRUNC без формата "отрезает" от даты
время.
Временной Стандар- Летнее
пояс тное время
--------------------------------
Атлантика 'AST' 'ADT'
Беринг 'BST' 'BDT'
Центральный 'CST' 'CDT'
Восточный 'EST' 'EDT'
Гавайские о-ва/
Аляска 'HST' 'HDT'
Горный 'MST' 'MDT'
Ньюфаундленд 'NST' ---
Тихоокеанский 'PST' 'PDT'
Юкон 'YST' 'YDT'
Среднее время по Гринвичу = 'GMT'
Формат ROUND или TRUNC
------------------------------------------------------------------------
CC век
SCC век до н.э.
YYYY/YEAR/YYY год
YY/Y/SYEAR
Q квартал (округляется по 16-тым и 2-м частям мес.)
MONTH/MON/MM месяц
WW неделя года
W неделя мес.
DDD/DD/J число
DAY/DY/D ближайшее воскресенье
HH/HH12/HH24 час
MI минута
Прочие функции: Построчные символьные, построчные числовые, преобразование,
диагностика ошибок, группы, прочие функции.
-- 52 --
Смотри также: date (тип данных), форматировние дат, модификаторы формата,
меню.
@/ /@ Разделители
( ) оператор; служит для объединения параметров
+ - * / арифметические операторы
= < > логические операторы
; признак конца оператора SQL
% признак атрибута PL/SQL
, разделитель эл-тов в списке
. ссылка на таблица.имя_поля и запись.имя_поля (в PL/SQL) (Точка . на
отдельной строке свидетельствует об окончании блока PL/SQL)
@ ссылка на удаленную БД; @ имя_файла выполняет командный файл
' ' ограничивает строки символов ('еклмн оклжп чшц')
" " позволяет писать в идентификаторах что угодно
: простые переменные или переменные связи включающего языка
<> != ~= ^= <= >= операторы сравнения в PL/SQL
<< >> ограничители имен циклов, блоков и меток (для GOTO) в PL/SQL
-- начало строки комментария в блоке PL/SQL
/* начало многострочного комментария
*/ конец многострочного комментария
.. диапазон числового цикла FOR в PL/SQL
:= присвоение значения переменной в PL/SQL
** возведение в степень
|| объединение строк
Смотри также: идентификаторы, арифметика, команды, меню.
-- 53 --
Распределенный запрос
Для выполнения распределенного запроса необходимо наличие связи между
БД, расположенными на разных ЭВМ, через SQL*Net. Синтаксис распределен-
ноого запроса такой же, как и у обычного, только после имени таблицы на-
до указывать имя связи с удаленной БД (или его синоним).
SELECT столбец2, столбец3,...
FROM удаленная_таблица@связь_с_БД, местная_таблица
WHERE удаленная_таблица.столбец1 = местная_таблица.столбец_1;
Ссылки на удаленные таблицы возможны в предложении FROM операторов
SELECT и INSERT INTO...SELECT. Также, они допустимы в префиксах для
ссылки на столбцы таблиц в этих операторах.
Смтори также: связи, удаленные БД, синонимы, select, insert, from,
применение select, меню.
-- 54 --
END
(конец) Оператор PL/SQL
<<имя_метки_1>> --<<имя_метки>> необязательно. Если оно
BEGIN есть перед словом BEGIN, то оно должно
часть_блока стоять после оператора END.
END имя_метки_1;
часть_предыдущ_оператора_LOOP
END LOOP имя_метки; --имя_метки необязательно.
часть_предыдущ_оператора_IF
END IF;
Оператор END должен быть последним в каждом блоке PL/SQL. имя_метки поз-
воляет ссылаться на переменные объемлющего блока, или на индекс внешнего
цикла.
Смотри также: пример numeric for, begin, loop, if, блоки, declare,
команды, меню.
-- 55 --
EXCEPTION
(особая ситуация) Оператор PL/SQL
EXCEPTION --данная секция необязательна.
WHEN имя_искл_ситуации THEN операторы;
WHEN имя_искл_ситуации OR имя_искл_ситуации THEN операторы;
...
WHEN OTHERS THEN последовательность_операторы; --необязательно
Процедуры обработки особых ситуаций описываются перед оператором END,
заканчивающим блок. В каждом предложении WHEN указывается имя особой си-
туации и действия, которые необходимо предпринять, если эта ситуация
возникнет. Определяемые пользователем особые ситуации должны быть описа-
ны в секции DECLARE текущего (или объемлющего) блока. PL/SQL также имеет
набор предопределенных особых ситуаций.
Фраза OTHERS описывает порядок обработки всех ситуаций, не перечисленных
во фразах WHEN. Эта фраза должна быть последней.
Смотри также: пример обработки ошибок, обработка ошибок, блоки, declare,
особые ситуации в pl/sql, команды, меню.
-- 56 --
EXIT PL/SQL
(выход) Оператор PL/SQL
EXIT имя_метки WHEN условие_plsql;
Оператор EXIT без имени метки и фразы WHEN вызывает выход из текущего
цикла. Чтобы выйти во внешний цикл с именем, следует использовать его имя в
качестве имени_метки.
Если употребить фразу WHEN и условие, то выход будет происходить только если
указанное условие истинно.
При выполнении в теле цикла FOR с курсором, оператор EXIT закрывает курсор.
Смотри также: пример where current of, loop, условия, cursor for,
курсоры, команды, меню.
-- 57 --
Обработка ошибок
Определенные заранее (внутренние) или определенные пользователем усло-
вия, возникновение которых считается ошибкой, называются особыми состоя-
ниями. В PL/SQL можно определить действия, выполняемые в случае возник-
новения ошибки.
Особые состояния можно описывать в секции DECLARE, а затем проверять их
наличие в теле блока. Если особая ситуация существует, то можно выпол-
нить оператор RAISE, который остановит нормальное выполнение блока и пе-
редаст управление обработчику особых ситуаций, описанному в секции
EXCEPTION данного блока.
Смотри также: declare, exception, pragma exception_init, raise,
особые ситуации, диагностирование ошибок (функции),
пример обработки ошибки, блоки, команды, меню.
-- 58 --
Функции диагностирования ошибок
SQLCODE Возвращает код внутреннего состояния, вызвавшего передачу уп-
равления обработчику особых состояний. Если состяние, вызвавшее
обработчик, не является внутренним для ORACLE, а описано поль-
зователем в текущем (или объемлющем) блоке, то SQLCODE возвра-
щает +1. Вне обработчика особых состояний SQLCODE возвращает 0.
Ф-ция SQLCODE позволяет распознавать особые ситуации в обработ-
чике состяний OTHERS.
SQLERRM(код_ошибки) возвращает сообщение, соответствующее заданному
коду ошибки. Чтобы получить сообщ., соответствующее текущему
коду ошибки в SQLCODE, нужно опустить код ошибки. Вне обработ-
чика особых ситуаций SQLERRM выдает сообщение "normal,
successful completion" (успешное завершение).
Чтобы использовать SQLCODE или SQLERRM в операторе SQL, нужно присвоить
их значение переменной, например:
sql_code_num := SQLCODE
Прочие функции: Построчные символьные, построчные числовые,
преобразование, группы, прочие функции.
Смотри также: обработка ошибок, переменная, особая ситуация, команды, меню.
Пример CONNECT BY
Для получения списка служащих со структурой управляющий/служащий и соот-
ветствующими такой структуре отступами в тексте, используйте "древовид-
ный" запрос типа
SELECT LPAD(' ', 2*LEVEL)||ename organization, level, empno, mgr
FROM emp
CONNECT BY PRIOR empno = mgr START WITH ename = 'KING';
ORGANIZATION LEVEL EMPNO MGR
-------------------------------
KING 1 7839 (корень = KING)
JONES 2 7566 7839
SCOTT 3 7788 7566
ADAMS 4 7876 7788
FORD 3 7902 7566
SMITH 4 7369 7902
BLAKE 2 7698 7839
ALLEN 3 7499 7698
WARD 3 7521 7698
Смотри также: connect by, древовидный запрос, select, меню.
-- 59 --
Пример FOR с курсором
DECLARE
CURSOR emp_cursor(dnum NUMBER) IS Подсчет суммы полных
SELECT sal, comm FROM emp WHERE deptno=dnum; зарплат (оклад + пре-
total_wages NUMBER(11,2) := 0; миальные) служащих
high_paid NUMBER(4) := 0; отдела #20 и у сколь-
BEGIN ких человек оклад
FOR emp_record IN emp_cursor(20) LOOP превышает $2000.
emp_record.comm := NVL(emp_record.comm, 0);
total_wages := total_wages + emp_record.sal + emp_record.comm;
IF emp_record.sal > 2000.00 THEN high_paid := high_paid + 1;
END IF;
END LOOP;
INSERT INTO temp VALUES (high_paid, higher_comm,
'Сумма выплат: ' || TO_CHAR(total_wages));
COMMIT;
END;
Смотри также: цикл for с курсором, курсоры, declare, loop, if, insert,
примеры, меню.
-- 60 --
Примеры функций преобразования
Вычисление кол-ва оставшихся дней в году после 31 Мая 1989:
SELECT SYSDATE, TO_DATE('01-JAN-90') - ROUND(SYSDATE) "Осталось"
FROM dummy;
SYSDATE Осталось
-------------------
31-May-89 214
Подсчет кол-ва служащих, нанятых в разные годы.
Нанято в COUNT(*)
SELECT TO_CHAR(hiredate,'YYYY') "Нанято в", COUNT(*) ------------------
FROM emp 1986 1
GROUP BY TO_CHAR(hiredate, 'YYYY'); 1987 10
1988 1
1989 2
Смотри также: преобразование (функции), select, group by, примеры, меню.
Пример соотносящ. подзапроса
Данный соотносящийся подзапрос извлекает всех служащих, чья зарплата
превышает среднюю в их же отделе.
SELECT ename, deptno, sal DEPTNO ENAME SAL
FROM emp emp_twin ------------------
WHERE sal > (SELECT AVG(sal) 10 KING 5000
FROM emp 20 JONES 2975
WHERE emp.deptno = emp_twin.deptno) 20 SCOTT 3000
ORDER BY deptno; 20 FORD 3000
В пример ROWID с DELETE продемонстрирован другой вариант соотносящегося
подзапроса.
Смори также: соотносящийся подзапрос, select, пример delete, примеры, меню.
-- 61 --
Примеры курсоров
DECLARE Извлекает из таблицы emp информацию
CURSOR c1 IS о 5 самых высокооплачиваемых служа-
SELECT ename, sal FROM emp щих и заносит ее в предварительно
ORDER BY sal DESC; созданную таблицу tmp.
name emp.ename%TYPE;
salary emp.sal%TYPE; Результат: SELECT * FROM tmp
BEGIN ORDER BY earns DESC;
OPEN c1;
FOR i IN 1..5 LOOP EMPLOYEE EARNS
FETCH c1 INTO name, salary; --------------------
EXIT WHEN c1%NOTFOUND; KING 5000
INSERT INTO tmp VALUES(name, salary); SCOTT 3000
COMMIT; FORD 3000
END LOOP; JONES 2975
CLOSE c1; BLAKE 2850
END;
Смотри также: курсоры, declare, open, loop, fetch, exit plsql, insert,
commit, close, примеры, меню.
@/
/@
Пример DELETE
В данном примере оператора DELETE внутри соотносящегося запроса исполь-
зуется ROWID, позволяющий избежать дублирования строк в таблице DEPT.
DELETE FROM dept x WHERE ROWID > (SELECT MIN(ROWID)
FROM dept y
WHERE x.deptno = y.deptno
AND x.dname = y.dname
AND x.loc = y.loc);
Использование соотносящегося подзапроса в операторе SELECT показано в
примере соотносящегося подзапроса.
Смтри также: rowid, соотносящийся подзапрос, delete, примеры, меню.
@/
/@
Примеры типов данных
Из командного файла, создающего таблицы для примеров:
DROP TABLE accounts;
CREATE TABLE accounts(
account_id NUMBER(4) NOT NULL, --до 4 разрядов; не может быть пустым
bal NUMBER(11, 2)); --до 11 разрядов, 2 из которых
DROP TABLE action; --находятся после дес. точки.
CREATE TABLE action(
account_id NUMBER(4) NOT NULL,
oper_type CHAR(1) NOT NULL, --только один символ
new_value NUMBER(11, 2),
status CHAR(45),
-- 62 --
time_tag DATE NOT NULL); --должно быть датой; не может быть
--пустым
...
Смотри также: переменные, number, char, date, create table, drop table,
пустые значения, примеры, меню.
@/
@/
Примеры функций обработки дат
Ф-ция обработки дат используется для получения списка служащих, нанятых
с 1982 г.
SELECT ename, hiredate ENAME HIREDATE
FROM emp ------------------
WHERE hiredate BETWEEN '1-JAN-82' AND SYSDATE MILLER 23-JAN-89
ORDER BY hiredate; SCOTT 05-JAN-89
WARD 08-JAN-89
. . .
Получение дат 1-й аттестации каждого служащего.
SELECT ename, hiredate, ENAME HIREDATE 1-я Атт.
ADD_MONTHS(hiredate, 6) "1-я Атт." ----------------------------
FROM emp ADAMS 12-JAN-83 12-JUL-83
ORDER BY ename; ALLEN 20-FEB-81 20-AUG-81
BLAKE 01-MAY-81 01-NOV-81
Фраза "1-я Атт." является альтернатив- . . .
ным именем столбца.
Смотри также: функции обработки дат, select, алиас,
примеры, меню.
@/
/@
Пример обработки ошибок
DECLARE
bad_employee_num EXCEPTION; --определено польз.
bad_acct_num EXCEPTION; --определено польз.
. . . --прочие определения
BEGIN
. . . --Оператор PL/SQL
EXCEPTION
WHEN bad_employee_num OR bad_acct_num THEN ROLLBACK;
WHEN ZERO_DIVIDE THEN --особая ситуация PL/SQL
INSERT INTO inventory_table VALUES (product_name, quantity);
COMMIT;
END;
Смотри также: обработка ошибок, declare, exception,
особые ситуации в pl/sql, rollback, insert, commit,
примеры, меню.
@/
/@
Примеры форматов
-- 63 --
Посмотрите, как форматы дат и чисел влияют на получаемые результаты.
SELECT TO_CHAR(hiredate, 'MM-DD-YY') hired, HIRED MONTHLY ENAME
TO_CHAR(sal, '$9999') monthly, ename -----------------------
FROM emp 06-09-89 $2450 CLARK
WHERE sal >= 2000 05-01-89 $2850 BLAKE
ORDER BY sal; 04-02-89 $2975 JONES
01-05-89 $3000 SCOTT
12-03-89 $3000 FORD
11-17-89 $5000 KING
Смотри также: форматирование дат, форматирование чисел,
модификаторы формата, преобразование, select, примеры,
меню.
@/
/@
Пример GROUP BY
Вывод самой маленькой и самой большой зарплаты, получаемой клерками в
каждом отделе, записанном в таблице emp.
DEPTNO MIN(SAL) MAX(SAL)
SELECT deptno, MIN(sal), MAX(sal) --------------------------
FROM emp WHERE job = 'CLERK' 10 1300 1300
GROUP BY deptno; 20 800 1100
30 950 950
Если нужно получать информацию, только если
самая низкая зарплата в отделе меньше 1000:
DEPTNO MIN(SAL) MAX(SAL)
SELECT deptno, MIN(sal), MAX(sal) --------------------------
FROM emp WHERE job = 'CLERK' 20 800 1100
GROUP BY deptno 30 950 950
HAVING MIN(sal) < 1000;
Смотри также: group by, групповые функции, select, примеры, меню.
@/
/@
Примеры групповых функций
Вот несколько примеров использования групповых функций:
SELECT 12 * AVG(sal) Вычисляет сред- 12*AVG(sal)
FROM emp нюю годовую зарпла- -----------
WHERE job = 'CLERK'; ту секретарей. 12450
SELECT COUNT(comm) eligible Подсчитывает кол-во ELIGIBLE
FROM emp; служащих, заслужива- --------
ющих премии. 4
SELECT COUNT(*) Подсчитывает кол-во COUNT(*)
FROM emp служащих в отд. #20. --------
-- 64 --
WHERE deptno = 20; Ф-ция COUNT(*) считает 5
только строки, удолвлет-
воряющие условие WHERE.
Смотри также: групповые функции, запрос, select, where, примеры, меню.
@/
/@
Пример INSERT
Добавление информации о новом служащем в таблицу emp:
INSERT INTO emp(empno, ename, job, mgr, hiredate, sal, comm, deptno)
VALUES(7979, 'POWERS', 'ANALYST', 7839, '1-JUN-89', 3600, NULL, 10);
Чтобы добавить информацию из другой таблицы, следует заменить подзапро-
сом список VALUES, например:
INSERT INTO bonus (ename, job, sal, comm)
SELECT ename, job, sal, comm
FROM emp
WHERE ename = 'KING';
Смотри также: insert, подзапрос, select, примеры, меню.
@/
/@
Пример LIKE
Нахождение служащих с двойной фамилией (т.е. с двумя фамилиями, разде-
ленными дефисом):
SELECT ename
FROM emp
WHERE ename LIKE '%-%'
ORDER BY ename;
Нахождение служащих с фамилией, начинающейся с буквы 'M':
SELECT ename, job, deptno
FROM emp
WHERE ename LIKE 'M%';
Смотри также: like, select, order by, примеры, меню.
@/
/@
Пример LOCK TABLE
В данном примере оператор LOCK TABLE запрещает выполнять все действия,
кроме запросов, с таблицей emp. Слово NOWAIT говорит о том, что если
таблица заблокирована другим пользователем, то следует продолжить выпол-
нение программы, не дожидаясь снятия блокировки.
-- 65 --
LOCK TABLE emp IN EXCLUSIVE MODE NOWAIT;
ост_часть_транзакции
COMMIT;
В следующем примере таблица accounts блокируется в разделенном режиме
(SHARED), который позволяет выполнять запросы, но запрещает добавления,
обновления и стирания.
LOCK TABLE accounts IN SHARE MODE;
ост_часть_транзакции
COMMIT;
Смотри также: lock table, запрос, commit, примеры, меню.
@/
/@
Пример NEXTVAL
Предположим, что существует последовательность по имени custnoseq, опи-
санная след. образом
CREATE SEQUENCE custnoseq INCREMENT BY 10;
и таблица customer (клиент) со столбцами custno (номер), fname (имя) и
lname (фамилия). Значение custnoseq.NEXTVAL используется для создания
уникального номера нового клиента, добавляемого в таблицу. Этот номер
будет на 10 больше, чем наибольший существующий номер клиента.
INSERT INTO cust VALUES (custnoseq.NEXTVAL, 'Stanley', 'Daleson');
Предполагая, что существует таблица custbal со столбцами custno и bal,
можно выполнить нижеприведенный оператор для добавления записи о балансе
неуплаты нового клиента, только что внесенного в таблицу customer.
INSERT INTO custbal VALUES (custnoseq.CURRVAL, 144.12);
Смотри также: nextval, insert, последовательности, псевдостолбцы,
примеры, меню.
@/
/@
Примеры пустых значений
Служащие, недостойные премирования, отмечены пустым значением в столбце
comm. Чтобы посмотреть перечень достойных премии служащих, выполняем
след. оператор:
SELECT ename, comm, sal, deptno ENAME COMM SAL DEPTNO
FROM emp --------------------------
WHERE comm IS NOT NULL MARTIN 1400 1250 30
ORDER BY comm DESC; WARD 500 1250 30
ALLEN 300 1600 30
TURNER 0 1500 30
Заметьте, что всегда следует испоьзовать IS или IS NOT. Операции сравне-
ния <> или = со значением NULL всегда вырабатывают FALSE (ложь).
-- 66 --
Чтобы записать в столбец пустое значение используйте два следующих друг
за другом апострофа, вот так:
INSERT INTO emp VALUES (8905, 'POST', '', 7698,...);
Смотри также: пустые значения, select, insert, примеры, меню.
@/
/@
Пример численного цикла FOR
DECLARE
x NUMBER := 100;
BEGIN
FOR i in 1..4 LOOP
IF MOD(i,2) = 0 THEN --если i четно
INSERT INTO temp VALUES (i, x, 'четный индекс');
ELSE
INSERT INTO temp VALUES (i, x, 'нечетный индекс');
END IF;
x := x + 25;
END LOOP;
COMMIT; COL1 COL2 MESSAGE
END; ------------------------------
1 100 четный индекс
SQL> SELECT * FROM temp 2 125 нечетный индекс
ORDER BY col1; 3 150 четный индекс
4 175 нечетный индекс
Смотри также: численный цикл for, number, if, insert, примеры, меню.
@/
/@
Пример избыточного соединения
Соединить таблицы EMP и DEPT (избыточным соединением) и извлечь перечень
отделов 30 и 40, со служащими или без них.
ENAME DEPTNO DNAME
--------------------------
SELECT ename, deptno, dname OPERATIONS
FROM emp, dept ALLEN 30 SALES
WHERE dept.deptno = emp.deptno (+) BLAKE 30 SALES
AND dept.deptno IN (30, 40) JAMES 30 SALES
ORDER BY ename; MARTIN 30 SALES
TURNER 30 SALES
WARD 30 SALES
Смотри также: избыточное соединение, соединение, select, примеры, меню.
@/
/@
Примеры запросов
Найти управляю- SELECT ename, sal, job ENAME SAL JOB
щих и служащих FROM emp -------------------------
с окладом $5000 WHERE job = 'MANAGER' KING 5000 PRESIDENT
или выше и вывести OR sal >= 5000 JONES 2975 MANAGER
-- 67 --
их список в поряд- ORDER BY sal DESC; BLAKE 2850 MANAGER
ке уменьшения CLARK 2450 MANAGER
оклада.
Перечислить имена SELECT ename, job, deptno ENAME JOB DEPTNO
и отделы служащих, FROM emp -------------------------
занимающих должно- WHERE job IN ('ANALYST', ADAMS CLERK 20
сти аналитиков, 'CLERK', 'PRESIDENT') FORD ANALYST 20
клерков или прези- ORDER BY ename; JAMES CLERK 20
дента. KING PRESIDENT 10
...
Смотри также: запрос, select, from, примеры, меню.
@/
/@
Пример оператора ROLLBACK
При обновлении информации о заработной плате Вы можете установить нес-
колко точек сохранения, присваивая каждой уникальное имя. Чтобы отменить
действия, произведенные в базе данных после некоторой точки сохранения,
надо выполнить оператор ROLLBACK с указанием имени данной точки. Напри-
мер:
UPDATE emp SET sal = 2000 WHERE ename = 'BLAKE';
SAVEPOINT blakesal;
UPDATE emp SET sal = 1500 WHERE ename = 'CLARK';
SELECT SUM(sal) FROM emp;
ROLLBACK TO SAVEPOINT blakesal; --отменяет изменения информации
COMMIT; --о зарплате служащего Clark.
Смотри также: rollback, savepoint, update, commit, примеры, меню.
@/
/@
Пример SELECT INTO
DECLARE
dept_rec dept%ROWTYPE;
name emp.ename%TYPE;
job_title empjob%TYPE;
wages emp.sal%TYPE;
BEGIN
SELECT * INTO dept_rec
FROM dept
WHERE deptno = 20;
SELECT ename, job, sal INTO name, job_title, wages
FROM emp
WHERE empno = 1440;
... --остальная часть блока
END;
-- 68 --
Смотри также: select into, атрибуты (%ROWTYPE, %TYPE), примеры, меню.
@/
/@
Пример списка SELECT
В списке оператора SELECT могут присутствовать:
- Реальные и альтернативные SELECT ename, deptno "#", dname "отд"
имена столбцов FROM emp...
- Групповые функции: SELECT 12 * AVG(sal + comm)
FROM emp
WHERE job = 'SALESMAN'
- Негрупповые функции: SELECT TO_CHAR(hiredate, 'YYYY'),
INITCAP(ename), sal
FROM emp...
Смтри также: список select, альтернативные имена, select,
групповые функции, примеры, меню.
@/
/@
Пример SET TRANSACTION
Некая компания в конце каждого месяца прверяет кол-во имеющихся у нее
кораблей и контейнеров. Для этого используется такая последовательность
операторов:
COMMIT;
SET TRANSACTION READ ONLY;
SELECT COUNT(*) FROM ship;
SELECT COUNT(*) FROM container;
COMMIT;
Последний оператор COMMIT служит для завершения транзакции типа READ
ONLY.
Каждый оператор SELECT во время транзакции типа READ ONLY (только чте-
ние) выбирает записи из "моментального снимка" базы данных, не замечая
изменения, вносимые другими пользователями.
Смотри также: set transaction, групповые функции, commit, примеры,
меню.
@/
/@
Примеры операций с множествами
Предположим, есть три таблицы типа emp и нужно найти в таблице emp слу-
жащих, имеющих такой же окдлад, как у Скотта из Белмонта, Джонса из Чи-
каго или Смита из Нью Йорка.
-- 69 --
SELECT ename, job, sal
FROM emp
WHERE sal IN
(SELECT sal
FROM belmont
WHERE ename = 'SCOTT'
UNION
SELECT sal
FROM chicago
WHERE ename = 'JONES'
UNION
SELECT sal
FROM new_york
WHERE ename = 'SMITH');
Запросы, использующие операторы множеств UNION, INTERSECT и MINUS должны
извлекать одинаковое кол-во столбцов. Типы данных соотв. столбцов в раз-
ных запросах должны совпадать.
Смотри также: операции с множествами, select, запрос, примеры, меню.
@/
/@
Пример простого соединения
Для получения списка сотрудников, получающих $3000 или больше, с указа-
нием оклада, отдела и его местонахождения, используем простое соедине-
ние.
SELECT ename, sal, dname, loc ENAME SAL DNAME LOC
FROM emp, dept ----------------------------------
WHERE emp.deptno = dept.deptno KING 5000 ACCOUNTING NEW YORK
AND sal >= 3000; SCOTT 3000 RESEARCH DALLAS
FORD 3000 RESEARCH DALLAS
Чтобы найти ранг оклада каждого служащего, делаем:
ENAME JOB GRADE SAL
SELECT ename, job, grade, sal ---------------------------
FROM emp, salgrade ADAMS CLERK 1 1100
WHERE sal BETWEEN losal AND hisal ALLEN SALESMAN 3 1600
ORDER BY ename BLAKE MANAGER 4 2850
CLARK MANAGER 4 2450
Смотри также: простое соединение, select, примеры, меню.
@/
/@
Пример подзапроса
Этот подзапрос позволяет повысить оклад каждому завотделом в Далласе до
самой высокой ставки в компании.
UPDATE emp
SET sal = (SELECT MAX(sal) FROM emp)
WHERE JOB = 'MANAGER'
AND DEPTNO IN (SELECT deptno FROM dept WHERE loc = 'DALLAS');
-- 70 --
Если подзапрос извлекает только одно значение, то для сравнения с ним
используется знак '='. Если же подзапрос извлекает более одного значе-
ния, то вместо '=' следует писать слово IN.
Чтобы посмотреть список поощренных сотрудников, не менявших место рабо-
ты, вводим:
SELECT empno, ename
FROM emp
WHERE (job, ename) = (SELECT job, ename FROM bonus);
Смотри также: подзапрос, update, select, where, сравнение, примеры,
меню.
@/
/@
Пример WHERE CURRENT OF
Приведенная здесь процедура на языке PL/SQL делает отметки в таблице
today, устанавливая для закончившихся операций поле status = DONE (сде-
лано). Подобные действия могут выполняться, к примеру, над таблицей
счетовых балансов в конце каждого дня.
DECLARE
CURSOR c1 IS SELECT action, acct FROM today
FOR UPDATE OF status;
the_action today.act%TYPE;
acct_num today.acct%TYPE;
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO the_action, acct_num;
EXIT WHEN c1%NOTFOUND;
... --операторы, выполняющие какие-то действия
UPDATE today SET status = 'done'
WHERE CURRENT OF c1;
END LOOP;
CLOSE c1;
COMMIT;
END;
Смотри также: where current of, курсоры, declare, for update of, open,
loop, fetch, exit plsql, update, примеры, меню.
@/
/@
Пример WHILE
Предположим, что в фонде заработной платы ваших служащих имеется свыше $
50 000 и Вы хотите пропорционально увеличить оклад каждого из них. При-
веденный в данном примере цикл последовательно увеличивает каждый оклад
на 10% до тех пор, пока общая сумма окладов не станет равна или не пре-
высит $50 000.
DECLARE
total_sal NUMBER(5);
BEGIN
SELECT SUM(sal) INTO total_sal FROM emp;
WHILE total_sal < 50000 LOOP
-- 71 --
UPDATE emp SET sal = sal * 1.10;
SELECT SUM(sal) INTO total_sal FROM emp;
END LOOP;
END;
Смотри также: цикл while, declare, number, select into, update, примеры,
меню.
@/
/@
Примеры
Чтобы посмотреть пример к определенной теме подсказки, введите HELP
EXAMPLE имя_темы. Чтобы увидеть все имеющиеся примеры, введите HELP
EXAM. Список имеющихся примеров прилагается. Фразы в скобках приведены в
качестве пояснений к списку, и их вводить не надо.
пример connect by (и start with)
пример преобразования (функции)
пример соотн. подзапроса
пример for с курсором (цикл)
пример курсоров (с insert into)
пример тип данных (параметры)
пример обработки дат (арифметической)
пример delete (с rowid)
пример обработки ошибок
пример форматирования (чисел и дат)
пример group by (и having)
пример групповых функций
пример insert
пример like (оператор)
пример lock table
пример nextval (и currval)
пример null (пустых значений)
пример численного for (цикл с if)
пример избыточного соединения
пример запроса
пример rollback (до точки сохранения)
пример списка select
пример select into
пример операторов множеств
пример set transaction (read only)
пример простого соединения
пример подзапроса
пример where current of
пример while (цикл)
Смотри также: select, команды, меню.
@/
/@
Виды выражений
Вид выражения Возможные эл-ты языка SQL
------------------------------------------------------------------------
Столбец, константа, таблица.столбец, таблица.ROWID, ROWNUM, текст,
или спец. значение number, sequence.NEXTVAL, sequence.CURRVAL, NULL,
LEVEL, SYSDATE, UID, USER
-- 72 --
Переменная связи :переменная
Употребление функции имя_ф-ции(DISTINCT или ALL выражение,
выражение...)
Сочетание прочих (выражение), +выражение, -выражение,
выражений PRIOR выражение, выражение*выражение,
выражение/выражение, выражение+выражение,
выражение-выражение, выражение||выражение
Список выражений в (выражение1, выражение2, выражение3,
скобках выражение4,...)
Смотри также: выражениея, nextval, псевдостолбцы, меню.
@/
/@
Выражения
Выражениями в языке SQL называются совокупность литералов, переменных и
констант, соединенных операторами, выполняющими над ними какие-либо
действия. Значение, получающееся в результате вычисления выражения, бу-
дет иметь тот же тип данных, что и эл-ты выражения.
Выражения можно использовать:
- в списке оператора SELECT
- в условиях после предложений WHERE и HAVING
- в предложениях CONNECT BY, START WITH и ORDER BY
- в предложении VALUE оператора INSERT
- в предложении SET оператора UPDATE
Порядок вычисления (старшинство операций)
1: эл-ты, заключенные в скобки
2: возведение в степень
3: одноместные операторы
4: умножение и деление
5: сложение, вычитание и конкатенация
Смотри также: виды выражений, литералы, переменные, список оператора
select, where, условия, connect by, order by, insert,
update, меню.
@/
/@
FETCH
(извлечь запись)
Оператор PL/SQL
FETCH имя_курсора INTO имя_переменной1, имя_переменной2,...;
FETCH имя_курсора INTO имя_записи;
Оператор FETCH извлекает очередную строку данных из явно описанного и
открытого в данный момент курсора и помещает данные в:
- INTO имя_переменной: список простых (скалярных) переменных. Каждому
извлеченному столбцу должна соответствовать одна переменная с анало-
гичным ему типом данных (или с совместимым, автоматически преобразуе-
мым типом).
-- 73 --
- INTO имя_записи: переменная для хранения записи, описанная при помощи
%ROWTYPE.
Для извлечения множества строк данных можно использовать цикл FOR с кур-
сором. В таком случае не будет необходимости открывать (OPEN), извлекать
данные (FETCH) и закрывать (CLOSE) курсор для каждой строки.
Смотри также: пример курсоров, курсоры, неявные преобразования,
атрибуты, цикл for с курсором, меню.
@/
/@
FOR UPDATE OF
(чтобы обновить)
Предложение SQL
SELECT list FROM...
FOR UPDATE OF столбец, столбец,... --обязателен хотя-бы один
NOWAIT; столбец
Блокировка FOR UPDATE OF "запирает" извлеченные строки таблицы перед вы-
полнением одного или нескольких операторов UPDATE...WHERE. Остальные
пользователи не смогут заблокировать или изменить эти строки до тех пор,
пока они не будут освобждены операторами COMMIT или ROLLBACK. Предложе-
ние FOR UPDATE OF можно использовать также и с операторами INSERT и
DELETE.
Оператор FOR UPDATE OF нельзя использовать вместе с операциями над мно-
жествами, с функциями от множеств и с фразами DISTINCT, GROUP BY, UNION,
INTERSECT или MINUS.
Слово NOWAIT вызовет пропуск оператора, если хотя бы одна из выбранных
строк заблокирована другим пользователем (вместо ожидания снятия блоки-
ровки).
Смотри также: пример delete, select, update, commit, rollback, insert,
delete, команды, меню.
@/
/@
FROM
(из)
Предложение SQL
SELECT список
FROM таблица WHERE... --для SELECT требуется FROM
...
DELETE FROM таблица WHERE... --FROM и WHERE необязательны
...
FROM польз.таблица альт_имя @связь_с_БД,... --параметр в SELECT
... и DELETE
Предложение FROM определяет, из какой таблицы или таблиц надо извлекать
записи (оператор SELECT), или в какой таблице надо стирать строки (опе-
-- 74 --
ратор DELETE). Если таблица принадлежит не Вам, то следует указать имя
ее владельца. связь_с_БД испоьзуется для обращения к таблицам, находя-
щимся в удаленных БД.
Смотри также: пример запроса, список оператора select, delete,
ид. пользователя, алиас, связи, удаленные БД, select,
меню.
@/
/@
Файлы
Файлы, используемые SQL*Plus
Из SQL*Plus Вы можете записывать команды в командный файл. Кроме этого,
Вы можете записывать в файл результаты отчетов (в т.н. спул-файлы). Фи-
зическая структура командных и спул-файлов зависит от операционной сис-
темы вашей ЭВМ. Модифицировать их можно при помощи соотв. команд опера-
ционной системы.
Ввод и выполнение команд
Команды SQL, PL/SQL и SQL*Plus следует вводить в ответ на приглаше-
ние
SQL>
SQL*Plus сохраняет введенные Вами команды SQL и блоки PL/SQL в своем
буфере (т.н. буфере SQL). Вы можете, если хотите, создать дополни-
тельные буферы для хранения команд.
Смотри также: буфер, команды, меню.
@/
/@
Форматирование дат
Элемент Значение в TO_CHAR
------------------------------------------------------------------------
CC или SCC Век ил -век до н.э.
YYYY или SYYYY Год или -год до н.э.
YYY или YY или Y Последние 3,2,1 цифры года
Y,YYY Год с запятой в указанном месте
YEAR или SYEAR Произношение года
AD или BC Индикатор до н.э. -- AD (anno Domini) или BC
(before Christ)
A.D. или B.C. A.D. или B.C.
AM или PM Индикатор меридиана
A.M. или P.M. Индикатор меридиана с точками
HH или HH12 Часы (1-12)
HH24 Часы (0-23)
MI Минуты (00-59)
SS Секунды (00-59)
SSSSS Число секунд после полуночи (0-86399)
Q Квартал (1-4)
MM Месяц (01-12)
MONTH Название месяца (длина поля - 9 символов)
MON 3-х буквенное название месяца (ЯНВ)
-- 75 --
WW Неделя года (1-52)
W Неделя месяца (1-5)
DDD День года (1-366)
DD День месяца (1-31)
D Номер дня недели (номер) (1-7)
DAY Название дня (длина поля - 9 символов)
DY 3-х буквенное сокращение названия дня (Птн)
J Юлианская дата: число дней считая с 1 Января
4712 г. до н.э.
Смотри также: модификаторы формата, преобразование (функции),
форматирование чисел, меню.
@/
/@
Модификаторы формата
Модификаторы регистра букв в SQL:
MON = APRIL Mon = April mon = april
DAY = FRIDAY Day = Friday day = friday
Элемент Смысл
------------------------------------------------------------------------
fm Префикс, вызывающий подавление дополнения пробелами в
форматах MONTH и ему подобных, что приводит к получению
результ. строк переменной длины. Подавление остается в
силе вплоть до следующего использования fm, восстанавли-
вающего дополнение пробелами.
TH производит числительное (DDth для 5th)
SP произношение числа (ddSP для пяти)
THSP, SPTH произношение числительного (DdthSP для Fifth)
'string' Вставляет строку в результирующую.
Смотри также: форматирование дат, функции обработки дат,
date (тип_данных), меню.
@/
/@
Форматирование чисел
В параметрах преобразования TO_CHAR можно использовать след. элементы
описания формата в SQL.
Элемент Пример Описание
------------------------------------------------------------------------
9 99999 Число девяток задает ширину поля.
0 099 Вывести перед числом незначащие нули.
$ $999 Перед числом вывести знак доллара ($).
B B99 Изображать нули как пробелы, а не как '0'.
MI 999MI Вывести минус после отрицательного числа.
PR 999PR Заключить отрицательное число в угловые скобки
(<123>).
, 9,999 Вывести запятую в указанном разряде.
. 9.999 Вывести точку в указанном разряде.
-- 76 --
V 99V99 Умножить значение на 10 столько раз, сколько есть
девяток после 'V'.
E 9.99EEEE Вывести число в экспоненциальном формате.
DATE DATE Записывает дату в численном виде (в формате
ММ/ДД/ГГ).
Смотри также: преобразование (функции), форматирование дат, меню.
@/
/@
GOTO
(перейти к)
Оператор PL/SQL
<<имя_метки>>
оператор...
...
GOTO имя_метки;
Оператор GOTO передает управление на оператор, следующий после метки
<<имя_метки>>.
<<имя_метки>> должно находиться в том же блоке операторов, что и GOTO. В
цикле LOOP или в ветвлении IF оператор GOTO вызовет переход на метку_3
тоько если <<метка_3>> находится внутри LOOP или IF.
<<имя_метки>> должно быть уникальным в блоке. Совпадающие имена могут
употребляться в разных или во вложенных блоках.
Смотри также: примеры, loop, if, блоки, идентификаторы, команды, меню.
@/
/@
GRANT
(дозволить)
Оператор SQL
Оператор GRANT можно использовать для достижения 3-х целей:
1) для предоставления возможности доступа к БД;
2) для предоставления возмождости доступа к области хранения (можно
также указать предельное кол-во про пространства для каждого
пользователя);
3) для предоставления возможности доступа к объектам БД (типа таблиц,
представлений данных, генераторов последовательностей и т.п.).
*Для 1-й цели*
GRANT право_в_БД, право_в_БД,...
TO имя_пользователя, имя_пользователя,...
IDENTIFIED BY пароль, пароль,...
Такая форма оператора GRANT позволяет предоставить пользовтелю (пользо-
вателям) возможность получать доступ к БД. При помощи данного оператора
любой польз. может изменить свой пароль. Для других операций при помощи
GRANT нужно иметь права DBA.
право_в_БД
предоставляемое право: CONNECT, RESOURCE и/или DBA.
-- 77 --
пароль
пароль для соотв. имени польз. Если GRANT используется для пре-
доставления дополнительных прав уже существующему польз., то па-
роль можно опустить. Если используется несколько имен польз. и
паролей то 1-й пароль должен относиться к 1-му имени, 2-й -- ко
2-му и т.д.
Предоставление права CONNECT регистрирует в БД новое имя польз. и позво-
ляет этому пользователю подсоединяться к БД, манипулировать с объектами
на которые он имеет соотв. права и создавать представления данных, сино-
нимы и связи с удаленными БД.
Право RESOURCE разрешает пользователю создавать в БД различные объекты,
включая таблицы, индексы, кластеры и последовательности.
Право DBA дает пользователю возможность обойтись без многих прав, кото-
рые обычно требуются для использования объектов БД. Пользователи с пра-
вом DBA также могут выполнять различные административные действия, типа
CREATE TABLESPACE (создать область хранения) и CREATE ROLLBACK SEGMENT
(создать сегмент отката).
*Для 2-й цели*
GRANT RESOURCE квота K | M
ON область_хранения
TO PUBLIC | польз., польз.,...
Такая форма оператора GRANT делает область хранения доступной для поль-
зователей. Можно также указать предельное кол-во пространства, которое
может использовать конкретный пользователь.
RESOURCE
дает пользователям право создавать объекты в указанной области
хранения
квота K или M
кол-во байтов в области хранения, которое может использовать
пользователь. Если его ограничивать не нужно, то указание квоты
следует опустить. Чтобы отобрать право RESOURCE, укажите квоту =
0. K означает, что квота задается в килобайтах (квота x 1024), M
-- -- что в мегабайтах (квота x 1 048 576).
TO PUBLIC или польз., польз.,...
дает право RESOURCE всем (PUBLIC) или только перечисленным поль-
зователям.
*Для 3-й цели*
GRANT право_на_объект, право_на_объект,... | ALL
ON польз.объект
TO PUBLIC | польз, польз,...
WITH GRANT OPTION
Такой оператор GRANT делает возможным доступ к объектам БД типа таблиц,
представлений данных и последовательностей). Чтобы выполнить такой опе-
ратор Вы должны либо быть владельцем указанного объекта, либо иметь на
него право GRANT OPTION, либо иметь право DBA.
-- 78 --
право_на_объект, право_на_объект,...
для таблиц, любое из:
ALTER, DELETE, INDEX, INSERT, REFERENCES, SELECT, UPDATE
для предст. данных, любое из:
DELETE, INSERT, SELECT, or UPDATE
для последовательностей:
ALTER или SELECT
Право UPDATE позволяет ограничить возможность обновления опреде-
ленных столбцов. Синтаксис в этом случае следующий:
GRANT UPDATE столбец, столбец,...
ALL PRIVILEGES
предоставляет все возможные права на этот объект.
WITH GRANT OPTION
позволяет польз., получившему (получившим) указанные права, пре-
доставлять их другим польз.
Смотри также: alter user, revoke, create sequence, dba, команды, меню.
@/
/@
GROUP BY (и HAVING)
Предложения SQL
SELECT cgbcjr... --требуется только одно выражение
FROM таблица, таблица... --треб. только одна таблица
WHERE условие --необязательно
GROUP BY выражение, выражение,... --требуется только одно выражение
HAVING условие --необязательно
При использовании предложения GROUP BY оператор SELECT вычисляет на ос-
нове каждой выбранной группы строк одну итоговую строку. Каждый эл-т в
списке после SELECT должен:
- быть константой или функцией без параметров (типа SYSDATE);
либо
- быть эл-том, содержащим групповую ф-цию (типа SUM, COUNT, или MAX);
- соответствовать выражению в GROUP BY.
Условие HAVING определяет, какие группы, выбранные по GROUP BY, попадут
в результат.
Смотри также: пример group by, список select, выражения, условия,
групповые функции, select, команды, меню.
@/
/@
Групповые функции
Групповые ф-ции языка SQL производят вычисления с группами строк. Их
можно использовать только в запросах и подзапросах.
AVG(D|A выражение) Вычисляет среднее арифметическое значение
выражения по строкам.
-- 79 --
COUNT(D|A выражение) Вычисляет кол-ва строк, в которых 'выражение'
не пусто.
COUNT(*) Вычисляет полное кол-во строк, включая пустые
значения.
MAX(D|A выражение) Находит максимальное знач. выраж. по строкам.
MIN(D|A выражение) Находит минимальное знач. выраж. по строкам.
STDDEV(D|A выражение) Вычисляет стандартное отклонения.
SUM(D|A выражение) Вычисляет сумму выражений по строкам.
VARIANCE(D|A выражение) Вычисляет дисперсию выражения по строкам
D|A = DISTINCT или ALL (подразумевается ALL). Пустые значения (NULL) при
вычислениях игнорируются (кроме ф-ции COUNT(*)).
Смотри также: пример использования групповых функций, запрос,
построчные символьные функции, построчные числовые ф-ции,
преобразование, функции обработки дат, диагностика ошибок,
прочие функции, примеры, команды, меню.
@/
/@
HAVING (и GROUP BY)
Предложения SQL
SELECT список... --нужно хотя бы одно выражение
FROM таблица, таблица... --нужна хотя бы одна таблица
WHERE условие --не обязательно
GROUP BY выражение, выражение,... --нужно хотя бы одно выражение
HAVING условие --не обязательно
Условие после слова HAVING определяет, какие группы GROUP BY будут изв-
лечены.
При использовании предложения GROUP BY, оператор SELECT вычисляет на ос-
нове каждой выбранной группы строк одну итоговую строку. Каждый эл-т в
списке после SELECT должен:
- быть константой или функцией без параметров (типа SYSDATE);
либо
- быть эл-том, содержащим групповую ф-цию (типа SUM, COUNT, или MAX);
- соответствовать выражению в GROUP BY.
Смотри также: пример group by, список select, выражения, условия,
групповые функции, select, команды, меню.
@/
/@
HELP
(помощь)
HELP [тема] | help
Команда HELP служит для вывода на экран информации о командах и понятиях
SQL*Plus, SQL и PL/SQL. Для получения информации наберите HELP, пробел,
часть названия (или полное название) темы и нажмите [Ввод].
-- 80 --
Если Вы наберете только часть названия темы, то на экран в алфавитном
порядке выведется текст помощи ко всем темам с похожим названием. Напри-
мер, если Вы наберете HELP SE, то на экране последовательно появятся
описания операторов SELECT, SELECT INTO и команды SET.
ВВЕДИТЕ... ЧТОБЫ ПОСМОТРЕТЬ...
--------------------------------------------------------------
help menu меню тем, по которым есть помощь
help commands список команл SQL*Plus, SQL и PL/SQL
help comm пояснения к операторам comment и commit
help help данный экран
help примеры список примеров
@/
/@
IF
(если)
Оператор PL/SQL
IF условие_1 THEN
последовательность_операторов;
ELSIF условие_2 THEN
последовательность_операторов;
ELSIF условие_3 THEN
последовательность_операторов;...
ELSE последовательность_операторов;
ENDIF;
Оператор IF вычисляет условие_1 и, если оно истинно (имеет значение
TRUE), то будет выполнена последовательность_операторов. В противном
случае управление передается на оператор ELSIF, который таким же образом
обрабатывает условие_2, и т.д. до оператора ELSE, чья последовательность
_операторов будет выполнена только если все условия в IF и ELSIF ложны.
Смотри также: пример численного for, условия, булевы сравнения, end,
пустые значения, команды, меню.
@/
/@
INSERT
(добавить)
Оператор SQL
INSERT INTO имя_таблицы/представления (столбец, столбец,...) --список
VALUES(значение, значение,...); столбцов
необязателен
INSERT INTO имя_таблицы/представления (столбец, столбец,...) SELECT...;
Оператор INSERT предназначен для добавления строк в таблицу или предс-
тавление данных. Имена в списке столбцов могут быть перечислены в любом
порядке. В столбцы, не указанные в списке, заносится пустое значение.
Все столбцы с признаком NOT NULL должны быть указаны и иметь предназна-
чающиеся для них значения.
-- 81 --
В предложении VALUES перечисляются конкретные значения столбцов в добав-
ляемой строке. Каждый указанный столбец должен иметь соотв. ему значение
в предложении VALUES. Типы данных значения и столбца должен быть совмес-
тимы или преобразуемы. Значения типа CHAR и DATE надо заключать в оди-
нарные кавычки ('абв').
Чтобы добавить строки из другой таблицы следует использовать подзапрос.
Оператор SELECT в этом подзапросе должен извлекать значения для каждого
перечисленного столбца.
Смотри также: пример insert, пример for с курсором, курсор sql%,
пустые значения, подзапрос, команды, меню.
@/
/@
Идентификаторы
Идентификаторами называются имена, присваиваемые переменным и констан-
там, таблицам, предст. данных, столбцам, индексам и прочим объектам БД.
Идентификатор должен начинаться с латинской буквы и быть не длиннее 30
символов. Идентификатор может состоять из латинских букв, цифр и симво-
лов $ _ и #. Идентификатор не должен содержать пробелы и совпадать с ка-
кимнибудь ключевым словом SQL или PL/SQL. Регистр букв (т.е. пропис-
ные/строчные) не имеет значения.
Если идентификатор заключен в кавычки ("Id"), то он может совпадать с
ключевым словом и содержать любые символы, включая пробелы. Идентифика-
торы должны отделяться друг от друга как минимум одним пробелом или зна-
ком препинания.
ДОПУСТИМО НЕ ДОПУСТИМО и ПОЧЕМУ НЕДОПУСТИМО
------------- -------------------------------------
Balance_Due BALANCE DUE содержит пробел
client_1 1st_client начинается с цифры
"row" row ключевое слово
largest_$ $largest начинается не с буквы
Смотри также: переменные, алиас, правила видимости, ключевые слова,
меню.
@/
/@
Неявные преобразования
PL/SQL в некоторых случаях преобразует тип данных переменной в требуемый
путем неявного вызова ф-ций TO_NUMBER, TO_CHAR или TO_DATE. Например:
Присваивания (CHAR в NUMBER или DATE, NUMBER или DATE в CHAR)
переменная := выражение
INSERT INTO таблица VALUES...
UPDATE таблица SET столбец = выражение...
SELECT выражение INTO переменная FROM...
Вычисление выражений (CHAR в NUMBER, CHAR в DATE)
Простые выражения : bal + '44'
Булевы выражения : bonus > salary / '20'
Ф-ции и вызовы процедур : MOD(counter, '3')
Условия в предложении WHERE: WHERE hiredate = '15-MAR-89'
-- 82 --
Для преобразования из CHAR в DATE требуется строка в виде ДД-МЕС-ГГ.
Смотри также: преобразование (функции), выражения, where, меню.
@/
/@
Алфавитный указатель
Наберите HELP, пробел и название (или часть названия) темы., по которой
Вы хотите получить подсказку.
Алиас
Алфавитный указатель
Арифметические операторы
Атрибуты
Атрибуты курсора
Блоки
Булевы сравнения
Буфер
Виды выражений
Выражения
Групповые функции
Древовидный запрос
Запрос
Зарезервированные слова
Идентификаторы
Идентификация пользователя
Избыточное соединение
Ключи
Команды
Комментарии
Курсор SQL%
Курсоры
Логические операторы
Литералы
Модификаторы формата
Меню
Неявные преобразования
Ограниченмя
Обзор
Обработка ошибок
Оператор LIKE
Операторы обработки множеств
Операторы сравнения
Особые ситуации в PL/SQL
-- 83 --
Параметры
Подзапрос
Подстановка
Переменные
Правила видимости
Пределы
Представления данных
Применение SELECT
Пример CONNECT BY
Пример DELETE
Пример FOR с курсором
Пример GROUP BY
Пример INSERT
Пример LIKE
Пример LOCK TABLE
Пример NEXTVAL
Пример ROLLBACK
Пример SELECT INTO
Пример SET TRANSACTION
Пример WHERE CURRENT OF
Пример WHILE
Пример групповых функций
Пример запроса
Пример избыточного соедмнения
Пример курсоров
Пример обработки ошибок
Пример подзапроса
Пример операторов обработки множеств
Пример преобразования
Пример простого соединения
Пример пустых значений
Пример списка SELECT
Пример соотносящегося подзапроса
Пример типов данных
Пример форматов
Пример функций обработки дат
Пример численного FOR
Примеры
Прочие операторы
Прочие функции
Псевдостолбцы
Последовательности
Построчные символьные функции
Построчные численные функции
Пустые значения
Разделители
Распределенный запрос
Связи
Соединение
Синонимы
Словарь данных
Соотносящийся подзапрос
Таблицы
Транзакции
-- 84 --
Удаленные БД
Условия
Устаревшие команды
Файлы
Форма записи НФБ
Форматирование чисел
Форматрование дат
Функции диагностирования ошибок
Функции обработки дат
Функции преобразования
Цикл FOR с курсором
Циклы
Численный цикл FOR
/ (косая черта)
@ (коммерческое "при")
ACCEPT
ALTER CLUSTER
ALTER DATABASE
ALTER INDEX
ALTER ROLLBACK SEGMENT
ALTER SEQUENCE
ALTER TABLE
ALTER TABLESPACE
ALTER USER
APPEND
AUDIT
BEGIN
BOOLEAN
BREAK
BTITLE
CHANGE
CHAR
CLEAR
CLOSE
COLUMN
COMMENT
COMMIT
COMPUTE
CONNECT
CONNECT BY
COPY
CREATE CLUSTER
CREATE DATABASE
CREATE DB LINK
CREATE INDEX
CREATE ROLLBACK SEGMENT
CREATE SEQUENCE
CREATE SYNONYM
CREATE TABLE
CREATE TABLESPACE
CREATE VIEW
DATE
DBA
DECLARE
-- 85 --
DECLARE CURSOR
DEFINE
DEL
DELETE
DESCRIBE
DISCONNECT
DROP CLUSTER
DROP DATABASE LINK
DROP INDEX
DROP ROLLBACK SEGMENT
DROP SEQUENCE
DROP SYNONYM
DROP TABLE
DROP TABLESPACE
DROP VIEW
EDIT
END
EXCEPTION
EXIT
EXIT PL/SQL
FETCH
FOR UPDATE OF
FROM
GET
GOTO
GRANT
GROUP BY
HAVING
HELP
HOST
IF
INPUT
INSERT
LIST
LOCK TABLE
LONG
LONG RAW
LOOP
NEXTVAL
NOAUDIT
NOWAIT
NULL
NUMBER
OPEN
ORDER BY
PAUSE
PRAGMA EXCEPTION_INIT
PROMPT
QUIT
RAISE
RAW
REMARK
RENAME
REVOKE
ROLLBACK
RUN
RUNFORM
SAVE
-- 86 --
SAVEPOINT
SELECT
SELECT INTO
SET
SET TRANSACTION
SHOW
SPOOL
SQLPLUS
SQL в PL/SQL
START
START WITH
TIMING
TOPICS
TTITLE
UNDEFINE
UPDATE
VALIDATE INDEX
WHENEVER SQLERROR
WHERE
WHERE CURRENT OF
WHILE
Смотри также: select, применение select, примеры, алфавитный указатель,
команды, меню.
@/
/@
Соединение
SELECT столбец, таблица.столбец, ... --'таблица.' необязательна
FROM таблица1, таблица2, ...
WHERE таблица1.столбец1 = таблица2.столбец1 --предложение WHERE необя-
зательно
Операция соединения позволяет извлекать данные и комбинировать строки из
двух или более таблиц одновременно. В результате каждая извлеченная
строка может содержать данные из разных таблиц. Предложение WHERE задает
порядок составления строк.
Если извлекаемый столбец существует в нескольких соединяемых таблицах,
то перед ним необходимо указывать имя таблицы. Например, столбец sal
таблицы emp:
emp.sal
Простое соединение позволяет извлечь строки из двух таблиц. Извлекаться
будут только те строки, у которых значения столбцов отвечают условию в
предложении WHERE. Если предложения WHERE нет, то будут извлечены все
строки. К примеру, соединив без WHERE 2 таблицы по 300 строк каждая, мы
получим 90 000 строк -- вряд ли это то, что нам нужно.
Смотри также: пример простого соединения, select, where,
применение select, меню.
@/
/@
Ключи
-- 87 --
Первичным ключом (PRIMARY KEY) называется один или несколько столбцов,
предназначенных для однозначной идентификации строк в таблице. Значения
первичных ключей не должно изменяться и не должно быть пустым.
Внешним ключом (FOREIGN KEY) называется столбец, содержащий значения
первичного ключа другой таблицы. Внешний ключ может принимать пустое
значение. К примеру, если столбец DEPTNO является первичным ключом в
таблице DEPT, то столбец DEPTNO в таблице EMP будет внешним ключом, т.к.
он содержит ссылки на DEPTNO таблицы EMP.
Уникальный ключ (UNIQUE KEY) во всем аналогичен первичному, за исключе-
нием того, что он предназначается для обеспечения уникальности каждой
записи, например, номера телефона или номера водительских прав. Первич-
ный ключ может и не содержать никакой полезной информации, а служить
только для идентификации строк. В таблице может быть несколько первичных
ключей.
Смотри также: таблицы, create table, alter table, пустые значения, меню.
@/
/@
Оператор LIKE
SELECT...
WHERE симв LIKE 'образец'
...
Оператор SQL LIKE сравнивает строку 'симв' с образцом. В образце можно
использовать метасимволы % и _.
% (знак процента) соотв. любым символам или пустой строке
_ (подчеркивание) соотв. любому одиночному символу.
Символьные литералы должны заключаться в апострофы ('ABC'). При сравне-
нии учитывается регистр букв (прописные/строчные).
Выражение... вызовет извлечение... но не...
---------------------------------------------------------------------
lname LIKE 'S_ile%' Smile, Stiles, Skilerson smile, Samiler
title LIKE '%ager' Manager, dowager, pager MANAGER, agent
Смотри также: пример like, сравнение (операторы), выражение, меню.
@/
/@
LOCK TABLE
(заблокировать таблицу)
Оператор SQL
LOCK TABLE польз.таблица, польз.таблица... --польз. необязателен
IN режим MODE NOWAIT; --NOWAIT необязательно
Оператор LOCK TABLE ограничивает доступ к одной или нескольким таблицам.
РЕЖИМ ПОЗВОЛЯЕТ ЗАПРЕЩАЕТ
-------------------------------------------------------------------------
SHARE запросы, блокировки блокировки, обновления,
-- 88 --
в режиме SHARE удаления
EXCLUSIVE только запросы все прочие операции
ROW SHARE конкурентное использ. блокировку всей таблицы
ROW EXCLUSIVE конкурентное использ. блокир. в режиме SHARE
SHARE ROW EXCLUSIVE запросы блокир. в режиме SHARE,
обновления.
Таблица остается заблокированной на протяжении всей операции DELETE,
INSERT или UPDATE. Блокировка снимается при выполнении COMMIT или
ROLLBACK. Если таблица уже заблокирована другим пользователем, то пара-
метр NOWAIT вынудит вернуть управление (а не ждать освобождения табли-
цы).
Смотри также: пример lock table, запрос, delete, insert, update, commit,
nowait, rollback, savepoint, форма НФБ, команды, меню.
@/
/@
LONG
LONG --только в SQL. В PL/SQL нельзя использовать
переменные типа LONG.
Столбцы, имеющие тип данных LONG, могут хранить строки переменной длины
(вплоть до 65 535 символов). В таблице может иметься только один столбец
типа LONG. Столбцы с таким типом данных могут использоваться тольк в
списке оператора SELECT и в предложениях SET операторов UPDATE и DELETE.
Столбцы типа LONG нельзя индексировать и их нельзя использовать в ка-
честве аргументов функций. Они не могут употребляться:
- в выражениях
- в списке SELECT вложенного запроса
- в списке SELECT распределенного запроса
- в запросах с использованием редложений UNION, INTERSECT или
MINUS
- в предложениях WHERE, GROUP BY, ORDER BY, CONNECT BY, и
DISTINCT
Смотри также: преобразование, переменные, number, char, long raw, date,
boolean, raw, меню.
@/
/@
LONG RAW
LONG RAW
Тип данных LONG RAW в SQL предназначен для хранения двоичных данных, ти-
па символьных строк и цепочек графических символов. ORACLE выводит дан-
ные типа RAW в шестнадцатеричном представлении.
Тип данных LONG RAW аналогичен типу LONG, за исключением того, что при
передаче данных через SQL*Net может производится перекодировка символов
из системы ASCII в EBCIDIC или наоборот.
Смотри также: connect, char, date, number, long, boolean, raw, меню.
@/
/@
-- 89 --
LOOP
Оператор PL/SQL
<<имя_метки>> --<<имя_метки>> необязательно
LOOP
последовательность_операторов
END LOOP имя_метки; --Если перед оператором LOOP стоит
имя_метки, то оно же должно стоять и в
операторе END LOOP.
Циклы чаще всего используются вместе с оператором FETCH. Для прекращения
работы в цикле можно использовать операторы GOTO, RAISE или EXIT.
<>
LOOP
FETCH имя_курсора INTO имя_записи;
EXIT WHEN имя_курсора %NOTFOUND;
обработка_данных
END LOOP first;
Другие циклы: while, for с курсором, численный цикл for.
Смотри также: fetch, goto, raise, exit, end, команды, меню.
@/
/@
Пределы
Эти ограничения имеются на многих системах, но не на PDP11 и mc68000.
Параметр Предельное значение в SQL*Plus
--------------------------------------------------------------------------
длина имени файла зависит от ОС
длина имени пользователя 30 символов
длина имени переменной 30 символов
длина значения переменной 240 символов
число пользовательских переменных 1024
кол-во перем. в списке INSERT INTO 50
переменных в команде SQL 100
длина командной строки 500 символов
длина знач. типа LONG в SQL*Plus 250 символов
размер выходной строки 500 символов (минимум = 5 символов)
длина строки после подстановки
переменных 1 000 символов (внутренний параметр)
число строк в команде 500 (предполагая 80 симв. в строке)
число строк на странице 50 000
макс. ширина строки таблицы 60 000 символов в ОС VMS;
в других = 32,767
кол-во строк в выборке в массив 5 000 строк
вложенные командные файлы 20 в ОС VMS, CMS, Unix;в других -- 5
номеров страниц 99 999 страниц
Смотри также: команды, меню.
@/
/@
Связи
-- 90 --
Связь с БД делает возможной работу с данными в удаленной БД. Чтобы поль-
зоваться связью нужно знать имя пользователя в удаленной базе. При этом
между системами (местной и удаленной) должно быть установленно соедине-
ние и SQL*Net должен быть активным и на местной, и на удаленной. Для
связи с БД, отличающимися от ORACLE, нужен активный SQL*Connect.
При ссылке на таблицу, находящуюся в удаленной БД, в предложении FROM
запроса или подзапроса необходимо указать имя связи. Например, запрос
SELECT * FROM powers.dept@PACIFIC
через связь с именем PACIFIC извлекает данные из таблицы DEPT, принадле-
жащей пользователю POWERS.
Связь с БД используется в распределенных запросах. Кол-во связей в прос-
том операторе как правило ограничено четырьмя. Через связь нельзя извле-
кать данные типа LONG.
Смотри также: распределенный запрос, удаленные базы данных,
create db link, меню.
@/
/@
Литералы
Литералами в языке SQL называются числа или строки символов символов.
ЧИСЛОВЫЕ ЛИТЕРАЛЫ:
могут быть целыми числами (типа 3, 1444, 23) или ве-
щественными (типа 3.14159, .25, -12, 2.e, 7E). В спис-
ках числовые литералы отделяются друг от друга запяты-
ми. Для облегчения читаемости неплохо после каждой
запятой добавлять пробел.
СТРОКОВЫЕ ЛИТЕРАЛЫ:
один или несколько символов, заключенные в апострофы
('одинарные кавычки'). Апостроф в самом литерале запи-
сывается в виде двух смежных апострофов. Например,
'You''re a strong, happy person, aren''t you?'. Заметь-
те, что используется именно два апострофа, а не кавычки
("). В кавычки иногда заключают индентификаторы.
ЛИТЕРАЛЫ ДАТ:
строковые литералы в формате дат ('09-ЯНВ-42').
БУЛЕВЫ ЛИТЕРАЛЫ:
предопределенные константы TRUE (истина), FALSE (ложь)
и NULL (пусто).
Смотри также: идентификаторы, меню.
@/
/@
Логические операторы.
Логические операторы в SQL позволяют обрабатывать результаты вычисления
условий. В приведенной ниже таблице перечислены имеющиеся логические
оператоы (список составлен в порядке старшинства).
-- 91 --
Оператор Действие Пример
------------------------------------------------------------------------
NOT (НЕ) Инвертирует результат SELECT...WHERE NOT (bal = 0)
логического выражения
Исключение: NOT (NULL)
равно NULL.
AND (И) Вырабатывает TRUE (истина), ...WHERE A >= 1 AND B <= 5000
если все условия истинны
OR (ИЛИ) Вырабатывает TRUE, если ...WHERE A IS NULL OR B IS NULL
истинно любое из условий
Смотри также: условия, выражениея, булевы сравнения, меню.
@/
/@
Циклы
В языке PL/SQL существует множество итерационных конструкций для повтор-
ного выполнения или пропуска частей блока. Более подробно см. в описани-
ях:
***** !
цикл end loop пример численного for
while exit plsql пример for с курсором
численный цикл for goto
цикл for с курсором
Смотрит также: блоки, команды, меню.
@/
/@
Меню
Список тем, по которым можно получить подсказку.
Язык SQL Язык PL/SQL Функции SQL*PLUS
--------------- ---------------- ---------------- ---------------
alias attributes 1 row number help
comments blocks 1 row char commands
условиеs commands conversion old commands
data dictionary cursors date functions overview
delimiters error handling error reporting buffer
выражениеessions examples group functions files
identifiers loops other functions substitution
keys scoping rules format dates parameters
links sql in pl/sql format numbers remote databases
literals variables format modifiers dba
nulls limits
pseudo-столбецs DATATYPES OPERATORS
reserved words ---------------- ------------------- ===DIRECTIONS===
sequences boolean number arithmetic (& char) Type help, a
-- 92 --
synonyms char raw comparison space, and then
таблицаs date like all or part of
transactions implicit logical operators a topic name.
user id long set operators
views (& indexes) long raw other operators
Смотри также: алфавитный указатель.
@/
/@
NEXTVAL
Псевдостолбец последовательность.NEXTVAL предназначен для получения сле-
дующего числа из последовательности, в то время как псевдостолбец после-
довательность.CURRVAL служит для получения последнего числа, сгенериро-
ванного последовательностью. Если Вы используете NEXTVAL и CURRVAL в
одном операторе SELECT, то вы все равно получите число NEXTVAL.
NEXTVAL и CURRVAL:
МОЖНО использовать... НЕЛЬЗЯ использовать...
-------------------------------------------------------------------
в списке оператора SELECT в списке SELECT, извлекающего данные
(кроме выборки из предст. данных) из предст. данных и в подзапросах
в списке значений оператора вместе с параметром DISTINCT или с
INSERT операциями над множествами
в выражениях SET оператора UPDATE в предложениях ORDER BY, GROUP BY или
HAVING оператора SELECT.
Смотри также: пример nextval, псевдостолбцы, sequence, список select,
select, insert, update, order by, group by, команды, меню.
@/
/@
NOAUDIT
Оператор SQL
Оператор NOAUDIT может быть использован в двух целях:
1) чтобы частично или полностью отменить ревизию (AUDIT) работы сис-
темы
2) чтобы частично или полностью отменить действие последнего операто-
ра AUDIT.
*1-й случай*
NOAUDIT сист_параметр, сист_параметр,... | ALL
WHENEVER SUCCESSFUL | WHENEVER NOT SUCCESSFUL
Использование оператора NOAUDIT в такой форме приведет к частичной или
полной отмене ревизии работы системы. Чтобы выполненить этот оператор
необходимо иметь права DBA.
параметр (или ALL)
параметром могут быть CONNECT, DBA, NOT EXISTS или RESOURCE.
Слово ALL означает все возможные параметры.
-- 93 --
WHENEVER SUCCESSFUL или WHENEVER NOT SUCCESSFUL
(если успешно или если неуспешно)
отключает слежение соответственно за успешными или за неуспешны-
ми обращениями к системе. Если не указано явно, то отключается
любое слежение.
*2-й случай*
NOAUDIT параметр, параметр,... | ALL
ON объект | DEFAULT
WHENEVER SUCCESSFUL | WHENEVER NOT SUCCESSFUL
Такой оператор NOAUDIT частично или полностью отменит действие предыду-
щего оператора AUDIT. Указанный 'объект' должен принадлежать Вам. Чтобы
использовать слово DEFAULT нужно иметь права DBA. Оператор NOAUDIT вызы-
вает подтверждение текущей транзакции.
параметр (или ALL)
для таблиц:
ALTER, AUDIT, COMMENT, DELETE, GRANT, INDEX,
INSERT, LOCK, RENAME, SELECT или UPDATE
для предст. данных:
AUDIT, DELETE, GRANT, INSERT, LOCK, RENAME,
SELECT или UPDATE
для последовательностей:
ALTER, AUDIT, GRANT или SELECT
для синонимов:
такие же, как для таблиц/представлений данных, к
которым они относятся.
Слово ALL означает все возможные параметры.
объект | DEFAULT
либо принадлежащие Вам таблица или представление данных, либо
(DEFAULT) подразумеваемые параметры ревизии для новых таблиц.
WHENEVER SUCCESSFUL или WHENEVER NOT SUCCESSFUL
(если успешно или если неуспешно)
отключает слежение соответственно за успешными или за неуспешны-
ми обращениями к таблице. Если не указано явно, то отключается
любое слежение.
Смотри также: audit, grant, команды, меню.
@/
/@
NOWAIT
Предложение SQL
SELECT список... FROM...
FOR UPDATE OF столбец, столбец,... NOWAIT; --требуется хотя бы один
столбец
LOCK TABLE [польз.]таблица [,[польз.]таблица]...
IN режим MODE [NOWAIT]
-- 94 --
Предложение NOWAIT используется в операторах SELECT и LOCK TABLE. В опе-
раторе SELECT предложение NOWAIT указывает СУБД ORACLE, что если строка
таблицы заблокирована другим пользователем, то не надо ждать ее освобож-
дения, а просто не выполнять SELECT и вернуть управление польз. В опера-
торе LOCK TABLE предл. NOWAIT означает что ORACLE не должен ждать осво-
бождения таблицы, заблокированной кем-то другим, а должен в таком случае
вернуть управление пользователю.
Смотри также: for update of, lock table, select, пример delete, commit,
rollback, insert, delete, команды, меню.
@/
/@
NULL
(ничего)
Оператор PL/SQL
NULL;
Оператор NULL необязателен и никак не влияет на ход вычислений в блоке.
Он может использоваться для улучшения наглядности условий. Например:
EXCEPTION IF job_title = 'DESIGNER' THEN
WHEN VALUE ERROR THEN GOTO calc_bonus;
INSERT INTO parts ELSE
VALUES ('ZZ', 9999); NULL;
WHEN OTHERS THEN END IF;
NULL;
Оператор NULL не имеет никакого отношения к пустым значениям. Операторы
IS NULL и IS NOT NULL являются операторами сравнения.
Смотри также: пустые значения, сравнение (операторы), условия, команды,
меню.
@/
/@
NUMBER
NUMBER(ширина, масштаб) --ширина и масштаб необязательны
Данные типа NUMBER предназначены для хранения числовых величин. При опи-
сании столбца типа NUMBER можно указать макс. допустимое число разрядов
(precision) и кол-во разрядов после десятичной точки (scale). Если зна-
чение, заносимое в столбец, имеет больше разрядов чем указано в описа-
нии, то выдается сообщение об ошибке "exceeds precision". Лишние разряды
после дес. запятой округляются.
Если масштаб отрицателен, то заносимое значение будет округляться до
указанного числа разрядов СЛЕВА от дес. точки. Если указана только шири-
на, а масштаб опущен, то заносимое значение будет округлено до целого
числа. Если не указана ширина, то значение будет записано как есть (ог-
раничиваясь только макс. допустимыми шириной и масштабом).
Смотри также: преобразование, переменные, char, long, date, raw,
boolean, меню.
-- 95 --
@/
/@
Пустые значения
Пустое значение означает, что данные не известны, отсутствуют или бесс-
мысленны в данном контексте. Пустое значение могут иметь столбцы с любым
типом данных, если они не были определены как NOT NULL.
Пустые значения применяются в случаях, когда конкретные значения неиз-
вестны или бессмысленны. Пустое значение и значение=ноль представляют
собой совершенно разные вещи. Все выражения, содержащие хотя бы одно
пустое значение, равны также пустому значению.
Для оперативной подстановки непустых знач. вместо пустых следует исполь-
зовать функцию NVL. Например, NVL(comm, 0) вернет значение comm, если
оно не пустое, или 0, если оно пустое.
При проверке на пустое значение надо использовать только операторы IS
или IS NOT. Любой другой оператор при сравнении с пустым значением всег-
да вернет пустое значение.
Групповые функции при вычислениях игнорируют пустые значения.
Смотри также: пример пустых значений, null (оператор),
прочие функции (NVL), групповые функции,
сравнение (операторы), меню.
@/
/@
Численный цикл FOR
Оператор PL/SQL
FOR индекс_цикла IN 1-ое_целое..2-е_целое LOOP
последовательность_операторов
END LOOP;
FOR индекс_цикла IN REVERSE 1-ое_целое..2-е_целое LOOP
последовательность_операторов
END LOOP;
Последовательность_операторов в численном цикле FOR выполняется по одно-
му разу для каждого значения индекса цикла. Индекс цикла увеличивается
на 1 с каждой итерацией, начиная со значения=1-ое_целое и заканчивая 2-м
_целым. Когда индекс становится больше 2-го целого, выполнение цикла за-
канчивается. Если использовано предложение IN REVERSE, то перед началом
цикла индексу присваивется значение=2-е_целое. Индекс неявно описывается
как принадлежащий к типу данных NUMBER. Он "видим" только в теле цикла и
обрабатывается как константа: т.е. на его значение можно ссылаться, но
нельзя изменять.
Описания других циклов: loop, цикл while, цикл for с курсором.
Смотри также: пример численного for, number, команды, меню.
@/
/@
OPEN
(открыть)
-- 96 --
Оператор PL/SQL
OPEN курсор
(знач_парам1, знач_парам2...); --не обязательно
Оператор OPEN вычисляет запрос, прикрепленный к указанному курсору. Кур-
сор должен быть объявлен до выполнения OPEN. Если курсор был описан (в
DECLARE CURSOR) с параметрами, то в операторе OPEN после имени курсора
должны присутствовать значения для каждого параметра.
Смотри также: пример курсоров, курсоры, declare cursor, close, команды,
меню.
@/
/@
ORDER BY
(упорядочив по)
Предложение SQL
SELECT ... SELECT ...
ORDER BY выражение ASC,... ORDER BY выражение DESC,...
ORDER BY позиция ASC,... ORDER BY позиция DESC,...
Предлжение ORDER BY определяет, как при выводе будут упорядочены данные,
извлеченные запросом. 'выражение' может быть одним или несколькими
столбцами из списка SELECT, или из предложения FROM. 'позиция' может
быть порядковым номером столбца в предложении SELECT. ASC и DESC указы-
вают порядок сортировки: ASC -- восходящий, DESC -- нисходящий. Подразу-
меваемый порядок -- восходящий.
Предложение ORDER BY нельзя использовать в подзапросах операторов
INSERT, UPDATE, CREATE TABLE и CREATE VIEW. Предложение ORDER BY отменя-
ет действие предложения CONNECT BY, если они используются в одном опера-
торе.
Смотри также: примеры обработки дат, select, запрос, подзапрос, insert,
update, create table, create view, connect by, меню.
@/
/@
Устаревшие команды
Перечисленные ниже команды SQL*Plus работают, но являются устаревшими,
т.к. в данной версии SQL*Plus имеются новые, более эффективные команды.
BTI[TLE] текст
BTITLE включает печать колонтитула в нижней части каждой страницы.
Старая команда BTITLE имеет более ограниченные возможности формати-
рования, но зато она совместима с UFI (предшественник SQL*Plus).
Старая команда BTITLE позволяет определить нижний колонтитул как
пустую строку со следующей за ней строкой с выравненным по центру
текстом. Больше подробностей можно найти в описании старой команды
TTITLE.
-- 97 --
COL[UMN] {столбец|выражение} DEF[AULT]
Новая команда: COLUMN CLEAR
Команда COLUMN DEFAULT присваевает атрибутам изображения указанного
столбца подразумеваемые значения. Работает также, как COLUMN CLEAR.
DOC[UMENT]
Новая команда: REMARK
Команда DOCUMENT начинает блок комментариев в тексте командного фай-
ла. Когда Вы вводите DOCUMENT и нажимаете [Ввод], SQL*Plus начинает
вместо приглашения SQL> выводить приглашение DOC>. Такой блок ком-
ментариев заканчивается символом # на отдельной строке. Если пара-
метр DOCUMENT установлен в OFF, то введенные комментарии будут восп-
риниматься как команды (см SET DOCUMENT).
NEWPAGE [1|n]
Новая команда: SET команда NEWPAGE
NEWPAGE пропускает в спул-файле n строк после начала следующей стра-
ницы.
SET BUF[FER] {буфер|SQL}
Команда SET BUFFER делает указанный буфер для хранения команд актив-
ным. SQL*Plus использует только один буфер -- т.н. SQL-буфер. В на-
чале сеанса активным будет именно он. Как правило, одного буфера
вполне хватает. Если Вы введете имя несуществующего буфера, то он
будет автоматически создан и ему будет присвоено указанное имя. До-
полнительные буферы исчезают при выходе из SQL*Plus.
Запуск выполнения запрома автоматически делает SQL-буфер активным.
Для копирования текста из буфера в буфер можно использовать команды
GET и SAVE. Команда CLEAR BUFFER уничтожает текст в активном буфере.
Команда CLEAR SQL уничтожает текст в SQL-буфере, даже если в данный
момент активен другой буфер.
SET DOC[UMENT] {OFF|ON}
При помощи команда SET DOCUMENT можно включать (ON) и отключать
(OFF) возможность ввода комментариев после команды DOCUMENT. После
выполнения SET DOCUMENT OFF (отключение) все строки, введенные после
команды DOCUMENT будут восприниматься как команды, а не как коммен-
тарии. Подробности можно найти в описании команды DOCUMENT.
SET TRU[NCATE] {OFF|ON}
Команда SET TRUNCATE позволяет указывать, что данные, которые при
выводе результатов не умещаются на одной строке следует отбрасывать
(ON), а не переносить (OFF). Следует заметить, что результаты команд
SET TRUNCATE ON и SET WRAP OFF аналогичны. Рекомендуется, однако,
пользоваться командой SET WRAP, т.к. команда SHOW не "знает" пара-
метра TRUNCATE.
TTI[TLE] текст
Команда TTITLE предназначена для определения верхнего колонтитула
для каждой страницы отчета. Старая команда TTITLE имеет довольно ог-
раниченные возможности форматирования, но зато она совместима с UFI
-- 98 --
(предшественником SQL*Plus). Старая команда BTITLE определяет верх-
ний колонтитул как состоящий из двух строк: 1-я состоит из даты,
указанного в команде текста и номера страницы; 2-я, следующая за
ней, пуста. Дата в 1-й строке выравнивается по левому краю, номер
страницы -- по правому, а текст -- по центру.
SQL*Plus выравнивает текст по центру страницы исходя из заданной ко-
мандой SET LINESIZE ширины строки. Вертикальная черта (|) в тексте
означает переход на новую строку. Две вертикальные черты (||) озна-
чают пропуск одной строки. Чтобы изменить символ, которым разделяют-
ся строки при выводе, следует использовать команду SET HEADSEP. Уп-
равлять форматированием в старых TTITLE и BTITLE можно при помощи
переменной _page, содержащей шаблон формата ("page &P4"). Чтобы из-
менить формат, нужно переопределить эту переменную с помощью команды
DEFINE, например:
SQL> SET ESCAPE /
SQL> DEFINE _page = 'Страница /&P2'
Теперь будет в колонтитулах будет печататься "Страница" и номер
страницы. Чило 2 в данном случае устанавливает кол-во разрядов поля
для номера страницы = 2. Вместо слова 'Страница' можно использовать
любой текст. Ширину поля номера страницы тоже можно задавать произ-
вольно. Заметьте, что перед амперсендом (&) должен стоять
ESCAPE-символ, чтобы SQL*Plus не воспринял его как символ подстанов-
ки значения переменной. ESCAPE-символ задается командой SET ESCAPE.
SQL*Plus воспринимает команду TTITLE как старую если сразу после нее
не следует одно из предложений, использующихся в современной коман-
де.
Пример: Если нужно, используя старую форму TTITLE, установить верх-
ний колон-титул как дату и номер страницы на 1-й строке,
слово MARKETING на 2-й и PERSONNEL REPORT на 3-й, то следует
ввести:
SQL> TTITLE 'MARKETING | PERSONNEL REPORT'
Смотри также: команды, меню.
@/
/@
Прочие функции
DECODE(выражение, образец1, результат1, Возвращает результат1,
образец2, результат2,...не_найден) если 'выражение' = 'образец1',
результат2, если 'выражение' =
'образец2' или 'не_найден',
если не обнаружено ни одного
совпадения.
Если параметра 'не_найден' нет,
то в случае отсутствия совпаде-
ний возвращается пустое значе-
ние.
DUMP(выражение, формат, начало, Изображает выражение в заданном
длина) формате -- 8=восьмеричный, 10=
дес., 16=шестнадцатеричный, 17=
символьный. 'начало' и 'длина'
-- 99 --
указывают, какую часть выраже-
ния надо обработать. Что бы
изобразить все выражение опус-
тите 'начало' и 'длину'.
GREATEST(выраж1, выраж2, выраж3...) Возвращает наибольшее из
перечисленных значение выраже-
ния. Возвращаемое значение бу-
дет преобразовано в такой же
тип данных, как и 'выраж1'.
LEAST(выраж1, выраж2, выраж3...) Возвращает наименьшее из
перечисленных значение выраже-
ния. Возвращаемое значение бу-
дет преобразовано в такой же
тип данных, как и 'выраж1'.
Функции DUMP, GREATEST и LEAST нельзя использовать в PL/SQL.
NVL(выраж1, выраж2) Возвращает 'выраж1', если его значение не пусто и
'выраж2' в противном случае. Типы данных возвра-
щаемого значения должен соответсвовать типу дан-
ных 'выраж1'.
UID Возвращает уникальное целое число, идентифициру-
ющее пользователя.
USER Возвращает имя текущего пользователя.
USERENV('ENTRYID') Возвращает доступный идентификатор ревизионной
записи.
USERENV('LANGUAGE') Возвращает язык, установленный параметром
LANGUAGE в файле INIT.ORA.
USERENV('SESSIONID') Возвращает идентификатор ревизионного сеанса
пользователя.
USERENV('TERMINAL') Возвращает идентификатор терминала в ОС.
VSIZE(выражение) Возвращает число байтов, использованное для
хранения 'выражения' во внутреннем представлении
ORACLE.
Смотри также: выражения, null, user id, меню.
@/
/@
Прочие операторы
Оператор Смысл или действие в SQL
------------------------------------------------------------------------
(+) Предыдущий столбец является столбцом избыточного
соединения (в соединении таблиц).
* Извлекать все столбцы таблицы (SELECT * FROM...).
-- 100 --
таблица.* Извлекать все столбцы указанной таблицы
(SELECT таблица.* FROM...).
ALL В запросе или группировании не отбрасывать повторяющиеся
значения, а извлекать все.
DISTINCT В запросе или группировании отбрасывать повторяющиеся
данные (извлекать только одно вхождение). Подразумевает-
ся всегда ALL.
PRIOR Используется в предложении START WITH ... древовидного
запроса для определения отношения отец-сын.
Смотри также: избыточное соединение, select, запрос, древовидный запрос,
меню.
/@
/@
Избыточное соединение
SELECT ...
FROM таблица1, таблица2, ...
WHERE таблица1.столбец = таблица2.столбец (+)
Оператор избыточного соединения (+) вызывает извлечение из соединенных
таблиц не только строк, удовлетворяющих условию соединения, но еще и
строк, не отвечающих условию, из таблицы.столбца, помеченных оператором
(+).
Избыточное соединение в операторе SELECT можно производить только с од-
ной таблицей.
Смотри также: пример избыточного соединения, select, применение select,
меню.
@/
/@
Обзор (SQL*Plus)
В SQL*Plus можно работать на языке SQL и на его расширенном процедурном
варианте PL/SQL. С помощью языка SQL можно хранить и извлекать данные из
реляционной базы данных ORACLE. SQL*Plus позволяет выполнять команды
языка SQL, блоки команд на языке PL/SQL и многое другое. В частности,
работая в SQL*Plus Вы можете:
- вводить, редактировать, сохранять, читать и выполнять команды SQL и
блоки PL/SQL;
- использовать в вычислениях результаты выполнения запросов, а также
форматировать и сохранять эти результаты;
- увидеть описание структуры любой таблицы;
- обрабатывать информацию в других БД и копировать данные из одной
БД в другую;
- обмениваться сообщениями с пользователями.
-- 101 --
Основные понятия SQL*Plus:
Команда - Указываемое Вами действие, которе должен выполнить
SQL*Plus или СУРБД ORACLE.
Блок - Группа команд SQL и PL/SQL, логически связанные
между собой по логике алгоритма.
Таблица - Основная единица хранения информации в СУРБД ORACLE.
Запрос - Оператор SELECT, предназначенный для извлечения
данных из одной или из нескольких таблиц.
Результаты запроса - Данные, извлеченные из БД при выполнении запроса.
Отчет - Результаты запроса, отформатированные Вами с помощью
команд SQL*Plus.
Ввод и выполнение команд:
Курсор на экране вашего дисплея (как правило курсор выглядит либо как
подчеркивание, либо как светящийся прямоугольник, либо как крсая черта)
находится в конце строки приглашения. Курсор указывает на место, в кото-
ром появится следующий введенный Вами символ. Команды можно вводить как
строчными, так и прописными буквами. При вводе команд SQL*Plus, SQL или
PL/SQL вводите между словами хотя бы один пробел (или символ табуляции,
а можно и [Ввод]). Лишние пробелы, табуляция и переходы на новые строки
можно использовать для облегчения последующего чтения команд.
В ответ на приглашение можно вводить три типа команд:
- команды языка SQL, предназначенные для работы с информацией в БД;
- блоки команд PL/SQL, предназначенные для работы с информацией в БД;
- команды SQL*Plus, предназначенные для форматирования результатов зап-
роса, или для установки параметров, редактирования и сохранения ко-
манд SQL и PL/SQL.
Команды SQL нужно заканчивать:
либо
символом ; (точка с запятой) в конце команды
либо
символом / (наклонная черта) на отдельной строке
либо
пустой строкой.
Точка с запятой (;) вызовет выполнение команды. В конце последней строки
введите ;, затем нажмите [Ввод] и команда выполнится. Если Вы нажмете
[Ввод]не введя предварительно ;, то SQL*Plus откроет новую строку и вы-
ведет на экран ее номер. Косая черта (/), стоящая на отдельной строке,
также вызывает выполнение крманды. После последней строки команды нажми-
те [Ввод], затем на открывшейся строке введите / и снова нажмите [Ввод].
Выполнение блоков PL/SQL
-- 102 --
Блок на языке PL/SQL начинается либо с операторов DECLARE или BEGIN, ли-
бо с имени блока. Операторы блока вводятся так же, как и команды SQL, за
исключением того, что точка с запятой (;) и пустые строки не завершают
ввод блока. Ввод блока PL/SQL нужно заканчивать точкой (.), стоящей на
отдельной строке. Чтобы выполнить блок, хранящийся в активном буфере,
надо ввести команду RUN или / (наклонная черта).
Например, Вы можете ввести и выполнить следующий блок PL/SQL:
SQL> DECLARE
2 x NUMBER := 100;
3 BEGIN
4 FOR i IN 1..10 LOOP
5 IF TRUNC(i,2) = i / 2 THEN --i = четное число
6 INSERT INTO temp VALUES (i, x, 'i -- четное число');
7 ELSE
8 INSERT INTO temp VALUES (i, x, 'i -- нечетное число');
9 END IF;
10 x := x + 100;
11 END LOOP;
12 END;
13 .
SQL> Процедура PL/SQL успешно завершена.
При исполненни блока команды SQL могут вести себя чуть-чуть
иначе, чем если бы они исполнялись не в блоке.
Выполнение команд SQL*Plus
Команды SQL*Plus служат для управлением командами SQL и PL/SQL, а также
для форматирования и печати результатов запросов. Для экономии времени
многие команды SQL*Plus можно сокращать до одной или нескольких букв.
Выполнение команд операционной системы
Из SQL*Plus можно выполнять команды операционной стстемы. Это может по-
надобиться, например, чтобы посмотреть содержимое файла. Чтобы выполнить
команду ОС наберите HOST и собственно команду. Например, чтобы выполнить
команду ОС DIRECTORY *.SQL следует ввести:
SQL> HOST DIRECTORY *.SQL
Смотри также: команды, меню.
@/
/@
Особые ситуации в PL/SQL
Предопределенная Значение Код ошибки Причины возникновения
особ. сит. в PL/SQL SQLCODE ORACLE ситуации
------------------------------------------------------------------------
DUP_VAL_ON_INDEX -1 ORA-00001 Оператор INSERT/UPDATE
попытался повторно занести
какое-то значение в столбец
с атрибутом UNIQUE
(уникальный).
-- 103 --
INVALID_CURSOR -1001 ORA-01001 В операторе неправильно
указан курсор
INVALID_NUMBER -1722 ORA-01722 Ошибка при преобразовании
из CHAR в NUMBER: строка не
является числом
LOGIN_DENIED -1017 ORA-01017 Ошибочные имя_пользователя/
пароль
NO_DATA_FOUND +100 ORA-01403 Оператор SELECT не извлек ни
одной строки
NOT_LOGGED_ON -1012 ORA-01012 Обращение к ORACLE без
предварительного подсоедине-
ния к нему
PROGRAM_ERROR -6501 ORA-06501 Внутрення ошибка PL/SQL
STORAGE_ERROR -6500 ORA-06500 Область памяти PL/SQL
заполнена или испорчена
TIMEOUT_ON_RESOURCE -51 ORA-00051 Ресурс не освободился за
указанное время
TOO_MANY_ROWS -1427 ORA-01427 Оператор SELECT извлек более
чем одну строку
VALUE_ERROR -6502 ORA-06502 Ошибка при преобразовании
(арифм/числ/строк)
ZERO_DIVIDE -1476 ORA-01476 Попытка деления на 0
Смотри также: exception, диагностика ошибок (функции), insert, update,
char, number, user id, select, обработка ошибок, меню.
@/
/@
PRAGMA EXCEPTION_INIT
Оператор PL/SQL
PRAGMA EXCEPTION_INIT(имя_особ_ситуации, код_ошибки);
Оператор PRAGMA EXCEPTION_INIT позволяет присвоить коду ошибки неописан-
ной внутренней особой ситуации некоторое имя.
'имя_особ_ситуации' должно присутствовать в секции DECLARE текущего или
объемлющего блока. Одно 'имя_особ_ситуации' следует присваивать только
одной особой ситуации.
'код_ошибки' может быть любым кодом, возвращаемым функцией SQLCODE.
Слово PRAGMA передает оператор PL/SQL при компиляции (т.е. он выполняет-
ся при компиляции блока, а не при его исполнении).
Смотри также: обработка ошибок, declare, exception,
особые ситуации в pl/sql, диагностика ошибок (функции),
команды, меню.
@/
/@
Параметры
Параметрами называются переменные, обозначаемые & (амперсендом) и следу-
ющим за ним числом (например, &1). Параметры используются только в ко-
мандных файлах. Значения для каждого параметры задаются как аргументы
команды START. Если параметр может быть датой или текстовой строкой, то
его следует заключить в апострофы:
-- 104 --
SELECT * FROM EMP
WHERE JOB='&1' /*текстовые данные*/
AND SAL=&2; /*число*/
Теперь, при выполнении командного файла, в команде START нужно вводить
значения для этих параметров. Значения следует писать после имени самого
запускаемого файла. 1-значение получит параметр &1, 2-е -- параметр &2 и
т.д. Например, приведенная ниже команда запускает командный файл MYFILE
и присваивает параметру &1 знач. 'СЕКРЕТАРЬ', а пар. &2 -- 7900.
SQL> START MYFILE CLERK 7900
Каждый параметр, получивший значение из аргументов команды START, авто-
матически описывается командой SQL*Plus DEFINE.
Смотри также: подстановка, ограничения, команды, меню.
@/
/@
Псевдостолбцы
Псевдостолбцы в SQL очень схожи с обыкновенными столбцами, за исключени-
ем того, что они не хранятся ни в одной таблице. Из псевдостолбцов можно
извлекать данные, но нельзя добавлять, обновлять и удалять (т.е. нельзя
делать INSERT, UPDATE и DELETE).
Псевдостолбец Содержит
---------------------------------------------------------------------
последоват.NEXTVAL следующее сгенерированное число
последоват.CURRVAL последнее сгенерированное число
ROWID уникальный идентификатор строки таблицы
ROWNUM порядковый номер строки в результатах выборки из
одной или нескольких таблиц
LEVEL 1= отец, 2= сын, 3= внук, и т.д.
Смотри также: запрос, nextval, пример nextval, древовидный запрос,
последовательности, меню.
@/
/@
QUIT
(покинуть)
{QUIT | EXIT} [SUCCESS | FAILURE | WARNING | n | переменная]
Команда QUIT подтверждает все неподтвержденные изменения в БД и заверша-
ет работу SQL*Plus, возвращая управление операционной системе.
QUIT или EXIT
полностью взаимозаменяемы
SUCCESS
нормальное завершение
-- 105 --
FAILURE
завершение с возвратом соотв. кода ошибки
WARNING
завершение с возвратом кода, означающнго предупреждение. Команда
QUIT без каких либо параметров вызывает такое же завершение, как
и QUIT SUCCESS
n
n = возвращаемый при завершении код (целое число)
переменная
определенная польз. или системная переменная (например,
SQL.SQLCODE). Команда QUIT переменная заканчивает работу, возв-
ращая значение переменной в качестве кода завершения.
Благодаря команде QUIT можно использовать коды возврата, принятые в
конкретной ОС и, следовательно, распознавать неожиданные ситуации при
выполнении командных файлов SQL*Plus в пакетном режиме. Способ распозна-
вания возвращаемых кодов зависит от ОС. Слова SUCCESS, WARNING и FAILURE
представляют значения, свойственные ОС, с которой работает ваша ЭВМ. В
некоторых системах коды WARNING и FAILURE однозначны. Чтобы выполнить
QUIT по возникновению какого-то условия, используйте оператор WHENEVER
SQLERROR.
Пример: В данном примере программа возвращает код результата последнего
выполненного оператора в блоке.
SQL> QUIT SQL.SQLCODE
Способ получения возвращенного кода зависит от ОС.
Смотри также: connect, disconnect, host, save, spool, SQLPlus,
whenever sqlerror, команды, меню.
@/
/@
EXIT
(выход)
{EXIT | QUIT} [SUCCESS | FAILURE | WARNING | n | переменная]
Команда QUIT подтверждает все неподтвержденные изменения в БД и заверша-
ет работу SQL*Plus, возвращая управление операционной системе.
EXIT или QUIT
полностью взаимозаменяемы
SUCCESS
нормальное завершение
FAILURE
завершение с возвратом соотв. кода ошибки
-- 106 --
WARNING
завершение с возвратом кода, означающнго предупреждение. Команда
QUIT без каких либо параметров вызывает такое же завершение, как
и QUIT SUCCESS
n
n = возвращаемый при завершении код (целое число)
переменная
определенная польз. или системная переменная (например,
SQL.SQLCODE). Команда QUIT переменная заканчивает работу, возв-
ращая значение переменной в качестве кода завершения.
Благодаря команде EXIT можно использовать коды возврата, принятые в
конкретной ОС и, следовательно, распознавать неожиданные ситуации при
выполнении командных файлов SQL*Plus в пакетном режиме. Способ распозна-
вания возвращаемых кодов зависит от ОС. Слова SUCCESS, WARNING и FAILURE
представляют значения, свойственные ОС, с которой работает ваша ЭВМ. В
некоторых системах коды WARNING и FAILURE однозначны. Чтобы выполнить
EXIT по возникновению какого-то условия, используйте оператор WHENEVER
SQLERROR.
Пример: В данном примере программа возвращает код результата последнего
выполненного оператора в блоке.
SQL> EXIT SQL.SQLCODE
Способ получения возвращенного кода зависит от ОС.
Смотри также: connect, disconnect, host, save, spool, SQLPlus,
whenever sqlerror, команды, меню.
@/
/@
Запрос
Запросом называется изложенное на языке SQL требование извлечь данные,
хранящиеся в одной или в нескольких таблицах. Подзапросом называется
запрос, находящийся в теле другого оператора.
Запросы используются:
- Для определения набора строк обрабатываемой таблицы в операто-
рах COPY, INSERT и CREATE TABLE.
- Для получения значений для сравнения в предложениях WHERE,
HAVING и START WITH, употребленных в операторах SELECT, UPDATE
или DELETE.
SELECT...WHERE выражение оператор запрос
...HAVING выражение оператор запрос
...START WITH выражение оператор запрос
UPDATE...SET(столбец, столбец,..) оператор запрос
...WHERE выражение оператор запрос
DELETE...WHERE выражение оператор запрос
-- 107 --
INSERT...запрос
Смотри: пример запроса, подзапрос, select, update, delete, where,
create table, применение select, команды, меню.
@/
/@
RAISE
Оператор PL/SQL
RAISE(имя_особой_ситуации);
RAISE;
Оператор RAISE прекращает выполнение блока блока PL/SQL и передает уп-
равление программе обработки указанной особой ситуации.
Оператор RAISE следует использовать только в теле обработчика особых си-
туаций для повторного ее возбуждения с целью перехода в обработчик, на-
ходящийся в объемлющем блоке.
Если PL/SQL не находит обработчик данной особой ситуации в текущем бло-
ке, то ситуация передается в объемлющий блок и т.д., пока обработчик не
будет найден. Если обработчик не обнаружится ни в одном блоке, то возни-
кает ошибка "необработанная особая ситуация" и выполнение прекратится.
Смотри также: declare, обработка ошибок, exception, блоки, команды,
меню.
@/
/@
RAW
RAW(размер)
Тип данных RAW в SQL предназначен для хранения двоичных данных, типа
символьных строк и цепочек графических символов. ORACLE изображает дан-
ные типа RAW в шестнадцатеричном представлении.
Максимальная ширина столбца типа RAW = 255. Тип данных RAW аналогичен
типу CHAR, за исключением того, что при передаче данных через SQL*Net
может производится перекодировка символов из системы ASCII в EBCIDIC или
наоборот.
Указывать размер не обязательно. Если он не указан, то подразумевается
размер = 1.
Смотри также: long, long raw, raw, char, date, number, boolean, connect,
меню.
@/
/@
RENAME
(переименовать)
Оператор SQL
RENAME текущее TO новое
-- 108 --
Оператор RENAME заменяет текущее имя таблицы, представления данных или
синонима на новое. Все дозволения и индексы переходят старого объекта
переходят к новому.
Оператор RENAME не может переименвать столбец. Чтобы сделать это, ис-
пользуйте оператор CREATE TABLE...AS SELECT. Например, если нужно переи-
меновать единственный столбец таблицы STATIC OLDCOL в NEWCOL, то нужно
ввести:
CREATE TABLE temporary (newcol) AS SELECT (oldcol) FROM static
DROP TABLE static
RENAME temporary TO static
Смотри также: create synonym, create table, create view, идентификаторы,
таблицы, представления данных, синонимы, команды, меню.
@/
/@
REVOKE
(отобрать)
Оператор SQL
Оператор REVOKE может использоваться для достижения одной из 3-х целей:
1) чтобы отобрать у одного или сразу у нескольких пользователей ка-
кие-то права на базу данных;
2) чтобы лишить одного или нескольких польз. возможности создавать объ-
екты в указанной области хранения (и, след., предотвратить увеличе-
ние объема пространства, занимаемое их объектами);
3) чтобы сделать какие-то таблицы, предст. данных или последовательнос-
ти недоступными для одного или нескольких польз.
*1-й случай*
REVOKE CONNECT, RESOURCE, DBA
FROM польз, польз,...
Такой оператор REVOKE лишает перечисленных пользователей всех прав в ба-
зе данных. Перед тем как лишить пользователя права CONNECT рекомендуется
предварительно уничтожить все принадлежащие ему объекты. Чтобы выполнить
оператор REVOKE нужно иметь права DBA.
*2-й случай*
REVOKE RESOURCE ON область_хранения
FROM польз, польз,...
Такой оператор REVOKE лишит указанных пользователей возможности созда-
вать объекты в указанной области хранения и предупредит увеличение зани-
маемого ими объема.
*3-й случай*
REVOKE право_на_объект, право_на_объект,... | ALL
ON польз.объект
FROM PUBLIC | польз, польз,...
-- 109 --
Такой оператор REVOKE лишает перечисленных пользователей прав доступа к
таблицам, предст. данных и последовательностям. Чтобы выполнить этот
оператор Вы должны быть владельцем объектов, либо иметь на таблицу право
WITH GRANT OPTION.
Если польз. получил право доступа к таблице от более чем одного челове-
ка, то он может пользоваться ими до тех пор, пока все давшие ему это
право не лишат его такового.
право_на_объект
для таблиц:
ALTER, DELETE, INDEX, INSERT, REFERENCES, SELECT или UPDATE
для представлений данных:
DELETE, INSERT, SELECT или UPDATE
для последовательностей:
ALTER или SELECT
Смотри также: audit, grant, dba, команды, меню.
@/
/@
ROLLBACK
(откат)
Оператор SQL
ROLLBACK WORK;
ROLLBACK TO SAVEPOINT точка_сохранения;
Оператор ROLLBACK аннулирует все изменения, внесенные в БД после послед-
него оператора COMMIT и уничтожает все точки сохранения.
Оператор ROLLBACK TO точка_сохранения аннулирует все изменения, внесен-
ные в БД после указанной точки сохранения.
СУРБД ORACLE автоматически создает неявную точку сохранения перед опера-
торами INSERT, UPDATE и DELETE, с тем, чтобы выполнить откат до этой
точки, если оператор не выполниться успешно.
Слова WORK и SAVEPOINT не являются обязательными. Их можно использовать
для большей наглядности.
Смотри также: пример rollback, commit, savepoint, insert, update,
delete, команды, меню.
@/
/@
Удаленные базы данных
СУРБД ORACLE часто используется на нескольких разных ЭВМ, объединенных в
сеть. Эти ЭВМ могут находится на любом расстоянии друг от друга. Напри-
мер, две ЭВМ могут стоять в соседних комнатах, а третья находится в дру-
гом городе.
Удаленной базой данных называется любая БД, находящаяся на другой ЭВМ
или находящаяся на вашей ЭВМ, но не являющаяся для Вас рабочей. Работать
с информацией в удаленной БД можно, если на ней есть SQL*Net и совмести-
-- 110 --
мый с местной БД сетевой драйвер. Получить доступ к удаленной БД можно
прямо из SQL*Plus (с помощью команды CONNECT), или при запуске SQL*Plus
(см. описание команды SQLPLUS).
Доступ к удаленной БД из SQL*Plus
Чтобы подсоединиться к удаленной БД из SQL*Plus надо в оператор
CONNECT включить описание этой БД в форме, пригодной для SQL*Net.
Например:
CONNECT SCOTT@описание_БД
CONNECT SCOTT/TIGER@описание_БД
После подсоединения эта база станет вашей рабочей БД до тех пор, по-
ка Вы не сделаете одно из трех:
1. соединитесть с другой БД
2. отсоединитесь от данной БД (оператор DISCONNECT)
3. закончите работу в SQL*Plus
Форма описания БД в операторе CONNECT зависит от эксплуатируемого на
вашей ЭВМ протокола SQL*Net.
Соединение с удаленной БД при запуске SQL*PLus
Чтобы подсоединиться к удаленной БД при запуске SQL*Plus, надо вклю-
чить в команду SQLPLUS опиание этой БД.
SQLPLUS SCOTT@описание_БД
SQLPLUS SCOTT/TIGER@описание_БД
имя_пользователя, пароль, и описание_БД должны быть допустимыми на
удаленной БД. В этом случае SQL*Plus после запуска соединит Вас с
указанной БД и она будет вашей рабочей до тех пор, пока Вы не сдела-
ете одно из трех:
1. соединитесть с другой БД
2. отсоединитесь от данной БД (оператор DISCONNECT)
3. закончите работу в SQL*Plus
Смотри также: команды, меню.
@/
/@
Заререзрвированные слова
Приведенные ниже слова имеют особые значения в SQL и PL/SQL. Они не мо-
гут быть использованы в качестве имен идентификаторов (если они не зак-
лючены в кавычки).
ABORT AUDIT CLUSTERS DATA_BASE DISPOSE
ACCEPT AUTHORIZATION COLAUTH DATE DISTINCT
ACCESS AVG COLUMN DBA DO
ADD BEGIN COMMENT DEBUGOFF DROP
ALL BETWEEN COMMIT DEBUGON ELSE
ALTER BODY COMPRESS DECIMAL ELSIF
AND BOOLEAN CONNECT DECLARE END
ANY BY CONSTANT DEFAULT ENTRY
ARRAY CASE COUNT DEFINITION EXCEPTION
AS CHAR CRASH DELAY EXCEPTION_INIT
ASC CHAR_BASE CREATE DELETE EXCLUSIVE
-- 111 --
ASSERT CHECK CURRENT DELTA EXISTS
ASSIGN CLOSE CURSOR DESC EXIT
AT CLUSTER DATABASE DIGITS FALSE
FETCH IF LIKE NOCOMPRESS OTHERS
FILE IMMEDIATE LIMITED NOT OUT
FLOAT IN LOCK NOWAIT PACKAGE
FOR INCREMENT LONG NULL PARTITION
FORM INDEX LOOP NUMBER PCTFREE
FROM INDEXES MAX NUMBER_BASE PRAGMA
FUNCTION INDICATOR MAXEXTENTS OF PRIOR
GENERIC INITIAL MIN OFFLINE PRIVATE
GOTO INSERT MINUS ON PRIVILEGES
GRANT INTEGER MOD ONLINE PROCEDURE
GRAPHIC INTERSECT MODE OPEN PUBLIC
GROUP INTO MODIFY OPTION RAISE
HAVING IS NEW OR RANGE
IDENTIFIED LEVEL NOAUDIT ORDER RAW
RECORD ROWTYPE SQLERRM THEN VARGRAPH
RELEASE RUN START TO VARIANCE
REM SAVEPOINT STATEMENT TRIGGER VIEW
REMARK SCHEMA STDDEV TRUE VIEWS
RENAME SELECT SUBTYPE TYPE WHEN
RESOURCE SEPARATE SUCCESSFUL UID WHENEVER
RETURN SESSION SUM UNION WHERE
REVERSE SET SYNONYM UNIQUE WHILE
REVOKE SHARE SYSDATE UPDATE WITH
ROLLBACK SIZE TABAUTH USE WORK
ROW SMALLINT TABLE USER XOR
ROWID SPACE TABLES VALIDATE
ROWNUM SQL TASK VALUES
ROWS SQLCODE TERMINATE VARCHAR
Смотри также: идентификаторы, команды, меню.
@/
/@
SAVEPOINT
(точка сохранения)
Оператор SQL
SAVEPOINT имя_точки;
Оператор SAVEPOINT ставит в ходе выполнения транзакции отметку, которую
можно использовать в операторе ROLLBACK для указания точки, до которой
нужно отменить изменения в БД.
- Если в одной транзакции повторно использовать имя точки сохранения,
то предыдущая точка с этим именем стирается.
- Оператор ROLLBACK TO имя_точки аннулирует все изменения, внесенные в
БД после установки указанной точки сохранения.
-- 112 --
- Операторы COMMIT и ROLLBACK без параметров уничтожают все точки сох-
ранения.
Смотри также: пример rollback, транзакции, rollback, commit, команды,
меню.
@/
/@
SELECT
Оператор SQL
SELECT ALL | DISTINCT * | таблица.* | выражение alias,...
FROM польз.таблица, таблица alias,...
WHERE условие
CONNECT BY условие START WITH условие
GROUP BY выражение, выражение... HAVING условие
UNION | INTERSECT | MINUS SELECT...
ORDER BY выражение | ASC | DESC,...
FOR UPDATE OF столбец, столбец... NOWAIT;
Оператор SELECT извлекает данные из столбцов одной или нескольких таб-
лиц. Оператор SELECT сам по себе является запросом. Если он используется
как предложение внутри другого оператора, то он называется подзапросом.
В операторе SELECT обязательно должно присутствовать предложение FROM.
Остальные предложения не являются необходимыми. При совместном использо-
вании нескольких предложений они должны быть записаны в указанном выше
порядке.
Смотри также: форма записи НФБ, применение оператора select, запрос,
подзапрос, from, where, алиас, connect by, group by,
order by, for update of, операторы обработки множеств,
прочие операторы, выражения, условия, пример запроса,
пример подзапроса, команды, меню.
@/
/@
SELECT INTO
Оператор PL/SQL
SELECT_перечень INTO список_переменных
FROM таблица, таблица,...
остальная_часть_оператора;
Оператор SELECT...INTO извлекает из таблицы (таблиц) значения указанных
столбцов и помещает их в соотв. переменные, перечисленные в списке_пере-
менных. Типы данных переменных и соотв. столбцов должны либо совпадать,
либо быть совместимыми.
Извлеченную строку данных можно хранить в переменной, объявленной с по-
мощью атрибута %ROWTYPE.
Смотри также: пример select into, список select, variables, select,
неявные преобразования, атрибуты, fetch, команды, меню.
@/
/@
Список SELECT
-- 113 --
SELECT list
FROM...
Список оператора SELECT состоит из одной или нескольких единиц информа-
ции, расположенных между словами SELECT и FROM и отделенных друг от дру-
га запятыми. Порядок эл-тов в этом списке определяет порядок расположе-
ния столбцов в результате. Эл-тами списка SELECT могут быть:
- Имена столбцов и их альтернативные имена (ename "Фамилия", deptno)
- выражения со столбцами и ограничениями, или переменные включающего
языка
- Групповые функции (MAX(sal), MIN(comm))
- Негрупповые функции (SYSDATE, INITCAP(ename))
Если в оператор SELECT используется предложение GROUP BY, то эл-тами
списка SELECT могут быть только групповые функции, выражения, стоящие
после предложения GROUP BY, константы и функции без параметров (типа
SYSDATE).
Смотри также: пример списка select, select, group by, алиас, выражения,
групповые функции, применение select, меню.
@/
/@
SET TRANSACTION
Оператор SQL
SET TRANSACTION READ ONLY
Оператор SET TRANSACTION READ ONLY устанавливает для текущей транзакции
режим работы "только чтение". После этого оператора все запросы, выпол-
няющиеся в текущей транзакции, будут игнорировать изменения данных, сде-
ланные друними пользователями. Оператор SET TRANSACTION READ ONLY осо-
бенно полезен, если нужно создать отчет на основе данных из множества
таблиц, постоянно обновляемых разными пользователями. Действие оператора
SET TRANSACTION READ ONLY заканчивается при выполнении операторов COMMIT
или ROLLBACK.
При активности действия оператора SET TRANSACTION READ ONLY нельзя вы-
полнять операторы DELETE, INSERT и UPDATE. Разрешается только выполнение
запросов. Оператор SET TRANSACTION READ ONLY должен быть первым операто-
ром в транзакции.
Смотри также: пример set transaction, транзакции, запрос, commit,
rollback, команды, меню.
@/
/@
SQL в PL/SQL
Язык SQL является непроцедурным языком системы управления реляционной
базой данных, который может обрабатывать записи группами и обеспечивает
автоматический поиск нужных данных. Язык SQL дает возможность указывать,
какие данные необходимо получить, не заботясь о том, как найти эти дан-
-- 114 --
ные. Язык PL/SQL, в свою очередь, является процедурным языком, способным
управлять ходом вычислений. В языке PL/SQL есть условные операторы, цик-
лы, средства для работы с курсорами ORACLE и обработки особых ситуаций.
Операторы - В блоках PL/SQL, вдобавок к установкам переменных PL/SQL
(var := var + 1), операторам управления ходом выполнения
программы (IF, GOTO, EXIT) и циклам (LOOP, FOR...LOOP,
WHILE...LOOP), можно использовать любые операторы SQL, от-
носящиеся к категориям обработки данных и управления тран-
закциями.
Функции - Внутри блока PL/SQL оператор SQL может обращаться к любой
функции языка SQL. Операторы PL/SQL внутри блока могут ис-
пользовать любые ф-ции языка SQL, кроме групповых.
Предикаты - В PL/SQL можно использовать все условия, пригодные для при-
менения в предл. WHERE и любые операторы сравнения.
Смотри также: циклы, обработка ошибок, курсоры, переменные, меню.
@/
/@
Курсор SQL%
При выполнениия любого операторав SQL, не связанного с явно описанным
курсором, PL/SQL автоматически открывает неявный курсор, называемый
"курсор SQL%". Атрибуты курсора SQL% позволяют получить полезную инфор-
мацию о ходе и результатах выполнения операторов DELETE, UPDATE и
INSERT.
АТРИБУТ ЕСЛИ СТРОКИ БЫЛИ УДАЛЕНЫ, ЕСЛИ НИ ОДНА СТРОКА НЕ БЫЛА
ОБНОВЛЕНЫ ИЛИ ДОБАВЛЕНЫ УДАЛЕНА, ОБНОВЛЕНА ИЛИ
ДОБАВЛЕНА.
------------------------------------------------------------------
SQL%NOTFOUND Имеет знач. FALSE Имеет знач. TRUE
SQL%FOUND Имеет знач. TRUE Имеет знач. FALSE
SQL%ROWCOUNT Имеет знач. = числу Имеет знач. = 0
удаленных/обновленных/
добавленных строк
Смотри также: declare cursor, курсоры, атрибуты курсора, delete, update,
insert, атрибуты (%type and %rowtype), меню.
@/
/@
START WITH
Предложение SQL
SELECT list FROM...
WHERE...
CONNECT BY PRIOR выраж1 оператор выраж2 --сначала вывести выраж1
CONNECT BY выраж1 оператор PRIOR выраж2 --сначала вывести выраж2
START WITH условие; --необязательно
Условие в предложении START WITH определяет "корень" ("корни") дерева.
Чтобы начинать с каждой строки, отвечающей условию WHERE, следует опус-
тить предложение START WITH.
-- 115 --
Смотри также: пример connect by, условия, connect by,
древовидный запрос, where, команды, меню.
@/
/@
Правила видимости
Идентификаторы (переменные, константы, записи, курсоры и особые ситуа-
ции) являются локальными для блока, в котором они объявлены, и глобаль-
ными для всех блоков, находящихся внутри такового. Если глобальный иден-
тификатор заново объявить в одном из вложенных блоков, то это новое
объявление заменит глобальное и станет действительным для этого блока и
для вложенных в него других блоков. В блоке нельзя ссылаться на иденти-
фикаторы, объявленные в других блоках,расположенных на том же уровне
вложенности.
Если идентификатор переобъявлен в блоке и нужно использовать его описа-
ние из внешнего блока, то во внешнем блоке следует перед объявлением
идент. написать <<имя_метки>>, и затем перед именем идент. писать имя
метки с точкой.
<>
DECLARE
day DATE;
BEGIN
...
DECLARE
day DATE;
BEGIN
IF day = top.day THEN...
Смотри также: идентификаторы, переменные, блоки, declare, end, меню.
@/
/@
Последовательности
Последовательностью называется объект БД ORACLE, генерирующий неповторя-
ющиеся целые числа. Полученные из последовательности числа очень часто
используются в качестве значений для первичных ключей. Чтобы пользовать-
ся не принадлежащей Вам посл., нужно иметь на нее право выборки
(SELECT). Доступные послед. перечисленны в представлениях словаря данных
USER_SEQUENCES и ALL_SEQUENCES. При созданни последовательности устанав-
ливаются:
Рост - Числа, создаваемые послед., могут либо возрастать постоянно, ли-
бо только до определенного предела, либо, по достижении предела,
начинать возрастание заново, с начального значения.
Приращение - Послед. может создавать цепочки как увеличиваюшихся чисел,
так и уменьшающихся. Можно задавать также и приращение значений.
Псевдостолбец последовательность.NEXTVAL содержит новое созданное число,
а псевдостолбец последовательность.CURRVAL содержит последнее созданное
число.
-- 116 --
Смотри также: keys, словарь данных, nextval, create sequence,
alter sequence, drop sequence, меню.
@/
/@
Операторы обработки множеств
Операторы обработки множеств объединяют результаты нескольких запросов в
один.
Оператор Действие в SQL Синтаксис
------------------------------------------------------------------------
UNION Объединяет неповторяющиеся SELECT...
строки, извлеченные ЛЮБЫМ UNION SELECT...
из запросов.
INTERSECT Сочетает запосы так, чтобы SELECT...
извлечь все неповторяющиеся INTERSECT SELECT...
строки, возвращаемые КАЖДЫМ
запросом.
MINUS Выдает все неповторяющиеся SELECT...
строки, извлеченные ПЕРВЫМ, MINUS SELECT...
а не вторым, запросом.
Смотри также: пример множеств, запрос, select, меню.
@/
/@
Подзапрос
Подзапросом называется оператор SELECT, стоящий в правой части выражения
после слова WHERE. Такой запрос является вложенным в другой. Подзапросы
можно помещать в другие подзапросы.
SELECT...WHERE выражение оператор (SELECT...);
UPDATE...WHERE выражение оператор (SELECT...);
DELETE...WHERE выражение оператор (SELECT...);
SELECT ename FROM emp WHERE cityname IN
(SELECT id FROM city WHERE stateabbr IN
(SELECT stateabbr FROM state WHERE
name = 'NEW YORK'));
В SQL можно использовать операторы сравнения с результ. запроса, извле-
кающего более чем одно значение. Для этого надо после оператора сравне-
ния использовать слова ANY, ALL или SOME.
SELECT ename FROM emp
WHERE job <> 'MANAGER' AND sal > ANY
(SELECT sal FROM emp WHERE job='MANAGER');
Смотри также: пример подзапроса, select, where, update, delete,
сравнение, запрос, применение select, меню.
@/
@/
Подстановка
-- 117 --
Переменными подстановки являются имена преременных, определенных польз.,
перед которыми стоит один или два амперсенда (&). Когда в команде есть
переменная подстановки, то SQL*Plus выполняет команду так, как будто
вместо ссылки на эту переменную стоит ее значение.
Например: Предположим, что переменная SORTCOL имеет значение = "JOB", а
переменная MYTABLE = "EMP". Тогда SQL*Plus выполнит команды
SQL> BREAK ON &SORTCOL SQL> SELECT &SORTCOL, SAL
2 FROM &MYTABLE
3 ORDER BY &SORTCOL;
так, как будто было написано
SQL> BREAK ON JOB
SQL> SELECT JOB, SAL
2 FROM EMP
3 ORDER BY JOB;
Подстановку значений переменных можно применять во любом месте команд
SQL и SQL*Plus, кроме 1-го слова, вводимого в ответ на приглашение. Если
SQL*Plus встречает подстановку переменной с неопределенным значением, то
он запрашивает это значение у пользователя.
Например: Предположим, что значение для переменной GIVENNAME не
определено, и Вы ввели след. команду:
SQL> SELECT * FROM EMP WHERE ENAME = '&GIVENNAME';
Тогда SQL*Plus выведет на экран приглашение:
Введите значение для givenname:
В качестве значения можно ввести любую последовательность символов,
включая пробелы и знаки препинания. Если сама переменная в команде зак-
лючена в кавычки, то их ввводить не надо. SQL*Plus в любом случае будет
читать вводимое Вами значение с клавиатуры терминала, даже если ввод или
вывод перенаправлены в файл. Если терминала нет (в случае, когда команды
выполняются из файла, в пакетном режиме), то SQL*Plus использует файл, в
который перенаправлен ввод. Чтобы добавить к подстанавливаемому значению
какие-нибудь символы, надо написать их сразу после имени переменной, от-
делив их точкой.
Например: SQL> SELECT * FROM EMP WHERE EMPNO='&E.01';
Введите значение для E: 123
воспринимается как
SQL> SELECT * FROM EMP WHERE EMPNO='12301';
символы & и &&
Если перед именем переменной стоит только один амперсенд, то SQL*Plus не
станет описывать ее неявной командой DEFINE. Это значит, что встретив
снова подстановку этой переменной, (в другой команде или при повторном
выполнении данной) SQL*Plus заново попросит ввести ее значение. Если пе-
ред именем переменной поставить два амперсенда, то после ввода значения
она будет автоматически опивана командой DEFINE и повторный ввод значе-
ния не потребуется.
-- 118 --
Например: В командном файле STATS (выполняющем некоторые статистические
вычисления) записано следующее:
SELECT &&GROUP_COL, MAX(&&NUMBER_COL) MAXIMUM,
MIN(&&NUMBER_COL) MINIMUM,
SUM(&&NUMBER_COL) TOTAL,
AVG(&&NUMBER_COL) AVERAGE
FROM &TABLE
GROUP BY &&GROUP_COL;
При запуске этого файла SQL*Plus до начала выполнения файла
запросит значения переменных:
Введите значение для group_col: PROJNO
Введите значение для number_col: SAL
Введите значение для table: EMP
Затем SQL*Plus выполнит следующий запрос:
SELECT PROJNO, MAX(SAL) MAXIMUM,
MIN(SAL) MINIMUM,
SUM(SAL) TOTAL,
AVG(SAL) AVERAGE
FROM EMP
GROUP BY PROJNO;
Если Вы повторно запустите выполнение этого запроса, то
SQL*Plus потребует ввести только значение переменной TABLE
(перед ней стоит один амперсенд). Для переменных с двумя ам-
персендами (GROUP_COL or NUMBER_COL) ввод значений не потребу-
ется.
Ограничения при подстановке переменных.
Подстановку переменных нельзя использовать в командах редактирования
APPEND, CHANGE, DEL и INPUT. Также подстановку нельзя использовать в ко-
мандах, в которых она бессмысленна (т.е. в командах типа HELP, REMARK и
TIMING). Команды APPEND, CHANGE и INPUT воспринимают текст, начинающийся
с амперсенда как простой текст.
Перечисленные ниже переменные, устанавливаемые командой SET, непосредс-
твенно влияют на процесс подстановки переменных и параметров.
SET SCAN включает и выключает подстановку.
SET DEFINE устанавливает символ подстановки.
Подразумеваемый символ -- &.
SET ESCAPE устанавливает символ отмены. Этот символ нужно ставить
перед символом замены, если мы хотим, чтобы он был воспри-
нят SQL*Plus как обыкновенный символ, а не как символ за-
мены. Подразумеваемый символ отмены -- \.
SET VERIFY ON вызывает печать на экране каждой строки командного файла
до и после подстановки переменных.
-- 119 --
SET CONCAT устанавливает символ, ставящийся между именем переменной и
подсоединяемой к ее значению строкой. Подразумеваемый сим-
вол -- . (точка).
Смотри также: &, команды, меню.
@/
/@
Синонимы
Синонимами называются дополнительные имена, присваиваемые таблицам,
представлениям данных или последовательностям. Синионимы имеет смысл
использовать для имен чужих или удаленных таблиц или представлений,
что позволяет не указывать каждый раз владельца или БД, в которой
расположен данный объект. Синонимы бывают частными или общедоступными.
Это определяется при их создании. Имя нового частного синонима должно
отличаться от всех имен объектов, принадлежащих его создателю. Синонимы
создаются при помощи оператора CREATE SYNONYM.
Смотри также: таблица, представление данных, последовательность,
create synonym, команды, меню.
@/
/@
Список доступных тем
----------------------------------------
Алиас
Алфавитный указатель
Арифметические операторы
Атрибуты
Атрибуты курсора
Блоки
Булевы сравнения
Буфер
Виды выражений
Выражения
Групповые функции
Древовидный запрос
Запрос
Зарезервированные слова
Идентификаторы
Идентификация пользователя
Избыточное соединение
Ключи
Команды
Комментарии
Курсор SQL%
Курсоры
Логические операторы
Литералы
Модификаторы формата
Меню
Неявные преобразования
Ограниченмя
Обзор
Обработка ошибок
Оператор LIKE
-- 120 --
Операторы обработки множеств
Операторы сравнения
Особые ситуации в PL/SQL
Параметры
Подзапрос
Подстановка
Переменные
Правила видимости
Пределы возможностей
Представления данных
Применение SELECT
Пример CONNECT BY
Пример DELETE
Пример FOR с курсором
Пример GROUP BY
Пример INSERT
Пример LIKE
Пример LOCK TABLE
Пример NEXTVAL
Пример ROLLBACK
Пример SELECT INTO
Пример SET TRANSACTION
Пример WHERE CURRENT OF
Пример WHILE
Пример групповых функций
Пример запроса
Пример избыточного соедмнения
Пример курсоров
Пример обработки ошибок
Пример подзапроса
Пример операторов обработки множеств
Пример преобразования
Пример простого соединения
Пример пустых значений
Пример списка SELECT
Пример соотносящегося подзапроса
Пример типов данных
Пример форматов
Пример функций обработки дат
Пример численного FOR
Примеры
Прочие операторы
Прочие функции
Псевдостолбцы
Последовательности
Построчные символьные функции
Построчные численные функции
Пустые значения
Разделители
Распределенный запрос
Связи
Соединение
Синонимы
Словарь данных
Соотносящийся подзапрос
Таблицы
Транзакции
Удаленные БД
-- 121 --
Условия
Устаревшие команды
Файлы
Форма записи НФБ
Форматирование чисел
Форматрование дат
Функции диагностирования ошибок
Функции обработки дат
Функции преобразования
Цикл FOR с курсором
Циклы
Численный цикл FOR
/
@
ACCEPT
ALTER CLUSTER
ALTER DATABASE
ALTER INDEX
ALTER ROLLBACK SEGMENT
ALTER SEQUENCE
ALTER TABLE
ALTER TABLESPACE
ALTER USER
APPEND
AUDIT
BEGIN
BOOLEAN
BREAK
BTITLE
CHANGE
CHAR
CLEAR
CLOSE
COLUMN
COMMENT
COMMIT
COMPUTE
CONNECT
CONNECT BY
COPY
CREATE CLUSTER
CREATE DATABASE
CREATE DB LINK
CREATE INDEX
CREATE ROLLBACK SEGMENT
CREATE SEQUENCE
CREATE SYNONYM
CREATE TABLE
CREATE TABLESPACE
CREATE VIEW
DATE
DBA
DECLARE
DECLARE CURSOR
DEFINE
DEL
DELETE
DESCRIBE
-- 122 --
DISCONNECT
DROP CLUSTER
DROP DATABASE LINK
DROP INDEX
DROP ROLLBACK SEGMENT
DROP SEQUENCE
DROP SYNONYM
DROP TABLE
DROP TABLESPACE
DROP VIEW
EDIT
END
EXCEPTION
EXIT
EXIT PL/SQL
FETCH
FOR UPDATE OF
FROM
GET
GOTO
GRANT
GROUP BY
HAVING
HELP
HOST
IF
INPUT
INSERT
LIST
LOCK TABLE
LONG
LONG RAW
LOOP
NEXTVAL
NOAUDIT
NOWAIT
NULL
NUMBER
OPEN
ORDER BY
PAUSE
PRAGMA EXCEPTION_INIT
PROMPT
QUIT
RAISE
RAW
REMARK
RENAME
REVOKE
ROLLBACK
RUN
RUNFORM
SAVE
SAVEPOINT
SELECT
SELECT INTO
SET
SET TRANSACTION
-- 123 --
SHOW
SPOOL
SQLPLUS
SQL в PL/SQL
START
START WITH
TIMING
TOPICS
TTITLE
UNDEFINE
UPDATE
VALIDATE INDEX
WHENEVER SQLERROR
WHERE
WHERE CURRENT OF
WHILE
@/
/@
Таблицы, столбцы и строки
Данные хранятся в БД в виде таблиц, состоящих из столбцов и строк. В
таблице с одним столбцом можно хранить одномерный список. Таблица с нес-
колькими столбцами хранит информацию, для которой имеет значение сочета-
ние строк и столбцов.
Каждый столбец представляет собой один атрибут строки. Каждая строка
таблицы содержит одну запись и однозначно идентифицируется значением
псевдостолбца ROWID. Один или несколько столбцов таблицы могут быть пер-
вичными, внешними или уникальными ключами. На таблицы и столбцы ссылают-
ся, используя их имена (например, emp.sal).
Смотри также: псевдостолбцы, идентификаторы, ключи, create table,
alter table, drop table, ограничения, меню.
@/
/@
Транзакции
Транзакцией в SQL называется логически неделимая последовательность опе-
раторов, рассматриваемая как единое целое. Результаты выполнения опера-
торов, входящих в транзакцию, могут быть либо сохранены в БД при помощи
оператора COMMIT, либо полностью аннулированы оператором RKLLBACK (или
ROLLBACK до точки сохранения). Транзакция начинается с 1-го выполняемого
оператора, либо с 1-го оператора после COMMIT или ROLLBACK. Транзакция
заканчивается при выполнении операторов COMMIT или ROLLBACK.
Чтобы оградить данные от модифицирования другими пользователями, в нача-
ле транзакции следует выполнить оператор SET TRANSACTION READ ONLY.
Смотри также: commit, rollback, savepoint, set transaction, меню.
@/
/@
Древовидный запрос
-- 124 --
Древовидным запросом называется запрос, в котором присутствует предложе-
ние CONNECT BY, предназначенное для отображения строк результата в опре-
деленном иерархическом порядке. Начиная с корня, описанного предложением
START WITH, запрос просматривает каждую соединенную с корнем ветвь. Нап-
ример: список зав. отделами (из таблицы EMP) и их подчиненных (директор
-- KING).
Уровень 1 KING (корень)
|-----------|----------------------|
| | |
Уровень 2 CLARK JONES BLAKE
| |---|---| |-----|------|-------|-------|
| | | | | | | |
Уровень 3 MILLER SCOTT FORD ALLEN WARD MARTIN TURNER JAMES
| |
| |
Уровень 4 ADAMS SMITH
Смотри также: пример connect by, select, запрос, применение select,
меню.
@/
/@
UPDATE
(обновить)
Оператор SQL и PL/SQL
UPDATE таблица/имя_предст_данных SET
столбец_имя = выражение
столбец_имя = (SELECT_с_одним_результатом) --допускается в SQL
(столбец_имя, столбец_имя,...) = оператор_SELECT --допускается в SQL
WHERE_предложение;
WHERE CURRENT OF имя_курсора; --допускается в PL/SQL
Оператор UPDATE заменяет значения одного или нескольких указанных столб-
цов на значения выражений или результат запроса. Оператор SELECT в этом
запросе должен возвращать как минимум одну строку и обеспечивать значе-
ния для каждого столбца, стоящего слева от знака =. Этот оператор SELECT
не может содержать фразы INTO. Для определения набора строк, подлежащих
обновлению, используется предложение WHERE. В нем указываются условия,
которым должна отвечать обновляемая строка. Если предложение WHERE опус-
тить, то будут обновлены все строки.
В PL/SQL, предлжение WHERE CURRENT OF вызывает обновление текущей строки
курсора.
Смотри также: example rollback, курсоры, where current of, курсор sql%,
пример where current of, select, команды, меню.
@/
/@
ИД. пользователя
(идентификация пользователя)
Пользователь, имеющий доступ к БД, идентифицируется в ней по имени и па-
ролю. Польз. может владеть таблицами, представлениями данных и последо-
вательностями. Также пользователю могут быть пожалованы права SELECT,
-- 125 --
INSERT, DELETE и UPDATE на аналогичные объекты других пользователей. Но-
вый пользователь создается при помощи оператора GRANT, выполняемого
польз., имеющим права DBA.
Смотри также: grant, select, insert, delete, update, dba, меню.
@/
/@
Применение SELECT
Оператор SELECT демонстрирует синтаксис предложений, используемых как в
нем самом, так и в других операторах SQL. В подсказке к перечисленным
ниже темам Вы сможете найти информацию о некоторых применениях оператора
SELECT. Для вывода текста подсказки на экран наберите HELP, пробел и
частично (или полностью) название нужной темы.
список select соотносящийся подзапрос
соединение (простое) распределенный запрос
избыточное соединение древовидный запрос
запрос select into (PL/SQL)
подзапрос курсоры (PL/SQL)
Смотри также: select, команды, примеры, меню.
@/
/@
VALIDATE INDEX
(проверить правильность индекса)
Оператор SQL
VALIDATE INDEX польз.индекс
Оператор VALIDATE INDEX проверяет, правильно ли указывает каждый индекс
на блок данных. Однако, это не означает, что у каждой строки будет со-
отв. эл-т индекса. Если ORACLE не выдаст сообщение о том, что индекс
проверен, то следует уничтожить индекс и снова создать его.
Смотри также: create index, alter index, команды, меню.
@/
/@
Переменные
Переменные могут использоваться для хранения результатов запроса, либо
для вычисления значений, заносимых в таблицы. Переменные могут иметь лю-
бой допустимый в SQL или PL/SQL тип данных: NUMBER, CHAR, DATE или
BOOLEAN. Например: balance NUMBER(5,2); wkphone CHAR(12); sex BOOLEAN
Существует два способа присвоения значений переменным. Это:
- оператор присваивания :=
например, discount := price * 0.15)
-- 126 --
- Выполнение SELECT INTO или FETCH INTO:
например:
SELECT price * 0.15 INTO discount FROM pricelist
WHERE stockdate <= SYSDATE - 60
Чтобы определить константу, следует после имени написать CONSTANT и сра-
зу присвоить значение. Например:
discount CONSTANT NUMBER(2,2) := 0.15;
Смотри также: declare, number, char, date, boolean, select into, fetch,
команды, меню.
@/
/@
Представления данных и индексы
Представления данных (иногда называемые виртуальными таблицами) не со-
держат данные как таковые, а являются неким отображением информации,
хранящейся в какой-то одной или в нескольких таблицах (т.н. базовых таб-
лицах). Предст. данных позволяют:
- Ограничить доступ к данным, хранящимся в некоторых столбцах и
(или) строкам.
- Скрыть повышенную сложность информации; При помощи одного предст.
можно обрабатывать информацию из нескольких таблиц.
- Уменьшить сложность синтаксиса; Одно предст. может отображать дан-
ные из нескольких таблиц, не требуя каждый раз выполнения операций
соединения.
- Преподносить данные с разных точек зрения; Столбцам предст. можно
присваивать любые имена, не изменяя при этом имена столбцов базо-
вой таблицы.
Индекс, в свою очередь, обеспечивает быстрый доступ к строкам таблицы.
Если команда SQL обрабатывает меньше 25% строк, то использование индекса
существенно увеличивает скорость выполнения команды.
Уникальный индекс гарантирует, что в таблице не будет строк с совпадаю-
щими значениями некоторого столбца (являющегося первичным ключом).
Смотри также: tables, keys, create view, create index, меню.
@/
/@
WHENEVER SQLERROR
(в случае ошибки SQL)
WHENEVER SQLERROR {EXIT [SUCCESS|FAILURE|WARNING|n|переменная]|CONTINUE}
Оператор WHENEVER SQLERROR указывает, что в случае возникновения ошибки
при выполнении команды SQL или PL/SQL, следует завершить работу
SQL*Plus.
EXIT [SUCCESS | FAILURE | WARNING | n | переменная]
вынудит SQL*Plus, в случае возникновения ошибки SQL, завершить
работу, предварительно подтвердив все неподтвержденные изменения
в БД. Ошибки команд SQL*Plus не будут вызывать завершение рабо-
ты.
-- 127 --
CONTINUE
отменяет EXIT.
Прмер: Эти команды вызывают завершение SQL*Plus и печать кода ошибки, в
случае, если, команда UPDATE выполниться с ошибкой. В этом случае
также будет пропущена команда COPY.
SQL> GET RAISE
1 WHENEVER SQLERROR EXIT SQL.SQLCODE
2 UPDATE EMP SET SAL = SAL*1.1
3 COPY TO SCOTT/TIGER@D:BETHESDA -
4 REPLACE EMP -
5 USING SELECT * FROM EMP
6 WHENEVER SQLERROR CONTINUE
Смотри также: пример обработки ошибок, exit, команды, меню.
@/
/@
WHERE
Предложение SQL
SELECT ... UPDATE ... DELETE ...
WHERE условие WHERE условие WHERE условие
На основе указанных условий, предложение WHERE решает, какие строки в
таблице будут обработаны оператором (SELECT, UPDATE или DELETE), в кото-
ром это предложение записано. Каждое условие состоит из имени столбца,
оператора сравнения и некоторого критерия оценки, имеющего тот же тип
данных, что и оцениваемый столбец. В условиях можно использовать и логи-
ческие операторы. Оператор NOT превратит результат оценки в обратный;
AND позволяет указывать несколько обязательных условий; OR требует вы-
полнения одного из двух условий. Например, если нужно найти клиентов,
имеющих задолженность больше $100, просроченную на 90 или более дней, то
можно выполнить след. запрос:
SELECT * FROM clients WHERE bal > 100 AND SYSDATE - duedate >= 90;
Смотри также: подзапрос, select, update, delete, условия, сравнение,
логические операторы, команды, меню.
@/
/@
WHERE CURRENT OF
Предложение PL/SQL
Предложение WHERE CURRENT OF имя_курсора применяется в программах на
языке PL/SQL для ссылки на последнюю выбранную оператором FETCH строку.
Это предложение используется вкупе с операторами UPDATE и DELETE. Указы-
ваемый курсор должен быть открытым и иметь выбранную строку. Чтобы ис-
пользовать предложение WHERE CURRENT OF, курсор должен быть описан с ха-
рактеристикой FOR UPDATE OF.
Атрибуты неявного курсора SQL% и всех явных курсоров позволяют получить
полезную информацию о выполнении операторов UPDATE и DELETE.
-- 128 --
Смотри также: пример where current of, update, delete, for update of,
курсоры, курсор SQL%, атрибуты курсора, команды, меню.
@/
/@
WHILE
Оператор PL/SQL
WHILE условие LOOP
группа_операторов
END LOOP;
Цикл WHILE выполняет группу_операторов до тех пор, пока в начале каждой
итерации указапнное условие будет истинно. Цикл заканчивается после то-
го, как условие станет ложным или пустым (NULL).
Описания других циклов: loop, цикл for с курсором, численный цикл for.
Смотри также: пример while, условия, булевы сравнения, команды.
@/
/@
@
(знак "at" -- коммерческое "при")
@имя_файла[.расширение]
Команда @ служит для запуска командных файлов.
имя_файла
командный файл, который нужно выполнить. Если вы опустите расширение,
SQL*PLUS по умолчанию обычно использует расширение SQL. Подразумевае-
мое расширение имен файлов можно изменить при помощи команды SET.
Вы можете включать в командный файл любые команды, которые вы обычно
вводите интерактивно (команды SQL или SQL*PLUS).
Данная команда действует подобно START, но не позволяет передавать пара-
метры.
Например, чтобы выполнить командный файл PRINTRPT с расширением SQL,
введите:
SQL> @PRINTRPT
Чтобы выполнить командный файл WKRPT с расширением QRY, введите:
SQL> @WKRPT.QRY
Смотрит также: суффикс, start, edit, run, get, set (буфер), spool,
list, save, параметры, команды, меню.
@/
/@
/
(наклонная черта)
-- 129 --
Ввод наклонной черты вызывает выполнение команды SQL или блок PL/SQL,
находящейся (находящегося) в данный момент в буфере команд.
Вы можете вводить наклонную черту после командного приглашения или после
приглашения с номером строки, выдаваемого для ввода очередной строки.
Данная команда действует подобно команде RUN, но она не выводит на ваш
экран команду из буфера.
Выполнение команды SQL или блока PL/SQL, используя "/", не изменит номер
текущей строки в буфере, если команда в буфере не содержит ошибок. В
случае существования ошибки SQL*PLUS поставит указатель текущей строки
на строку с ошибкой.
Например, чтобы посмотреть команду, которую Вы будете выполнять, Вы мо-
жете вывести содержимое буфера:
SQL> LIST
1* SELECT ENAME, JOB FROM EMP WHERE ENAME = 'JAMES'
Чтобы выполнить эту команду, введите "/".
SQL> /
Для вышеприведенного запроса SQL*PLUS покажет следующее:
ENAME JOB
--------- ---------
AMES CLERK
Смотри также: @, edit, get, list, run, save, параметры, set (буфер),
spool, start, команды, меню.
@/
/@
ACCEPT
(принять)
ACC[EPT] переменная [NUM[BER] | CHAR] [PROMPT текст | NOPR[OMT]] [HIDE]
Команда ACCEPT читает строку с устройства ввода и сохраняет ее в указан-
ной пользователем переменной.
переменная
Имя переменной, в которой вы хотите сохранить значение. Если пере-
менная не существует, то SQL*PLUS создаст ее.
NUM[BER]
Ограничивает тип данных переменной типом NUMBER. Если ответ не со-
ответсвует типу данных, ACCEPT выдает сообщение об ошибке и завер-
шается.
CHAR
Ограничивает тип данных переменной типом CHAR. Если ответ не соот-
ветсвует типу данных, ACCEPT выдает сообщение об ошибке и заверша-
ется.
PROMPT текст
Выводит текст на экран до приема значения переменной от пользовате-
-- 130 --
ля.
NOPR[OMPT]
Пропускает строку и ожидает ввода без вывода подсказки.
HIDE
Подавляет отображение вводимых данных.
Например: Чтобы вывести подсказку "Оклад: " и поместить ответ в пере-
менную SALARY (с типом данных NUMBER), введите:
SQL> ACCEPT salary NUMBER PROMPT 'Оклад: '
Чтобы вывести подсказку "Пароль: " и поместить ответ в CHAR-
переменную PSWD и подавить показ вводимых данных, введите:
SQL> ACCEPT pswd CHAR PROMPT 'Пароль: ' HIDE
Смотри также: define, input, prompt, параметры, команды, меню.
@/
/@
APPEND
A[PPEND] текст
Команда APPEND добавляет указанный текст в конец текущей строки буфера.
текст
Текст, который вы хотите добавить. Если вы хотите отделить текст от
предшествующих символов пробелом, введите два пробела между APPEND
и текстом.
Пример: Чтобы добавить пробел и имя столбца DEPT во второй строке
буфера, сначала необходимо сделать ее текущей:
SQL> 2
2* FROM EMP,
Затем введите APPEND:
SQL> APPEND DEPT
SQL> 2
2* FROM EMP, DEPT
Обратите внимание на двойной пробел между APPEND и DEPT. Первый
разделяет APPEND от текста; второй пробел является первым до-
бавляемым символом.
Чтобы добавить точку с запятой, введите:
SQL> APPEND ;;
SQL*PLUS добавляет первую точку с запятой к текущей строке, а
вторую интерпретирует как конец команды APPEND.
Смотри также: change, del, edit, list, save, set (буфер), spool,
команды, меню.
-- 131 --
@/
/@
BREAK
BRE[AK] [ON элемент_отчета [действие [действие]]]
Команда BREAK определяет где и как форматирование будет изменять отчет.
BREAK используется для:
* подавления вывода дублированных значений для указанных столбцов
* пропуск строк при изменении значения столбца
* печати результата промежуточных вычислений при изменении значения
столбца или в конце отчета (см. команду COMPUTE)
Команда BREAK без параметров выводит перечень текущих установок BREAK.
элемент_отчета
Необходим следующий синтаксис:
{column | expr | ROW | REPORT}
действие
Необходим следующий синтаксис:
SKI[P] n | [SKI[P]] PAGE]
[NODUP[LICATES] | DUP[LICATES]]
ON столбец [действие [действие]]
Определяются действия для SQL*PLUS, которые необходимо произвести
при прерывании в указанном столбце (называется столбцом прерыва-
ния). Прерывание происходит по одной из трех причин:
* изменилось значение столбца или выражения
* окончание вывода записи
* конец отчета
Когда вы опускаете действие, "BREAK ON столбец" запрещает печать
дублированных значений в столбце и помечает место в отчете, в кото-
ром SQL*PLUS произведет вычисления, определенные вами в соответсву-
ющей команде COMPUTE.
Вы можете указать "ON столбец" один или несколько раз. Если вы ука-
зали фразу ON несколько раз, как в данном случае:
SQL> BREAK ON DEPTNO SKIP PAGE ON JOB SKIP 1 -
> ON SAL SKIP 1
сначала фраза ON рассматривает самое внешнее прерывание (в данном
случае ON DEPTNO) и в самую последнюю очередь фраза ON рассматри-
вает самое внутреннее прерывание (в данном случае ON SAL).
SQL*PLUS ищет прерывание в каждой выводимой записи в указанных ко-
лонках, начиная с самого внешнего прерывания до самого внутреннего
прерывания в заказанном вами порядке. В данном случае, SQL*PLUS
ищет измененные значения в DEPTNO, затем в JOB, затем в SAL.
Затем, SQL*PLUS выполняет действия начиная с действий указанных
для самого внутреннего прерывания и так обработка идет в обратном
-- 132 --
порядке к самому внешнему прерыванию (в данном случае от SKIP 1
для ON SAL к SKIP PAGE для ON DEPTNO). SQL*PLUS выполняет все
действия снизу вверх, включая действия и для столбца, в котором
произошло прерывание.
Если, например, в выводимой последовательности записей изменилось
значение столбца JOB, но значения DEPTNO и SAL не изменились, то
SQL*PLUS пропустит две строки перед тем как напечатать запись (од-
на строка- как результат SKIP 1 во фразе ON SAL, и другая строка-
как результат SKIP 1 во фразе ON JOB).
Всегда при использовании "ON столбец", вы должны также использо-
вать фразу ORDER BY в команде SQL SELECT. Обычно столбцы, исполь-
зуемые в команда BREAK, должны появляться в той же последователь-
ности во фразе ORDER BY (хотя все столбцы, указанные в ORDER BY
необязательно должны присутствовать в команде BREAK). Это предотв-
ращает бессмысленные прерывания в вашем отчете.
Для вышеприведенной команды BREAK, следующая команда SELECT полу-
чит следующие (осмысленные) результаты:
SQL> SELECT DEPTNO, JOB, SAL, ENAME
2 FROM EMP
3 ORDER BY DEPTNO, JOB, SAL, ENAME;
Все записи с одинаковым DEPTNO напечатаются вместе на одной стра-
нице, и на этой странице все записи с одинаковым JOB напечатаются
в одной группе. Внутри каждой группы профессий (job), работники с
одинаковым окладом (SAL) объединяются в группы. Прерывание в ко-
лонке ENAME не приводит ни к каким действиям, т.к. этот столбец не
задана в команде BREAK.
ON выражение [действие [действие]]
Определяются действия для SQL*PLUS, которые необходимо произвести
при изменении значения выражения. Если вы не задали действие,
"BREAK ON expr" запретит вывод дублированных значений expr и поме-
тит место в отчете, где SQL*PLUS произведет заданные вами вычисле-
ния в соответсвующей команде COMPUTE.
Вы можете использовать в выражении один или несколько столбцов таб-
лицы или алиас, присвоенный для столбца в команде SELECT или в ко-
манде COLUMN. Если вы используете выражение (expr) в команде
BREAK, вы должны ввести данное выражение точно также, как оно за-
дано в команде SELECT. Если выражение в SELECT равно a+b, напри-
мер, вы не можете использовать b+a или (a+b) в команде BREAK для
ссылки на данное выражение из команды SELECT.
То, что говорилось выше о "ON столбец", также применимо к "ON
expr".
ON ROW [действие [действие]]
Определяются действия для SQL*PLUS, которые надо произвести, когда
команда SQL SELECT возвращает запись. ROW-прерывание становится в
конец иерархии прерываний, независимо от того, где фраза ON ROW
задана в команде BREAK. Вы должны всегда задавать действие при ис-
пользовании данного прерывания.
-- 133 --
ON REPORT
Отмечает место в отчете, где SQL*PLUS произведет вычисления опре-
деленные вами в соответсвующей команде COMPUTE. Используйте BREAK
ON REPORT совместно с COMPUTE для печати общих сумм.
REPORT-прерывание становится в вершину иерархии прерываний, неза-
висимо от того, где вы его указали в команде BREAK.
Теперь рассмотрим список возможных действий:
SKI[P] n
Пропускает n строк перед выводом записи при возникновении прерыва-
ния.
[SKI[P]] PAGE
Переходит к новой странице перед выводом записи при возникновении
прерывания.
NODUP[LICATES]
Печатает пробелы вместо значения столбца прерывания, когда значе-
ние столбца равно значению столбца из предыдущей записи.
DUP[LICATES]
Печатает значение столбца прерывания для каждой выбранной записи.
Для печати текущих описаний прерываний необходимо просто ввести
BREAK без параметров.
Каждая новая команда BREAK, которую вы введете, заменяет предшествующую.
Примеры:
Для получения отчета, который выводит дублированые значения про-
фессий (job), выводит средний оклад (SAL) и вставляет пустую стро-
ку, когда изменяется значение JOB, и дополнительно печатает сумму
окладов и вставляет еще одну пустую строку, когда изменяется зна-
чение DEPTNO, вы можете ввести следующие команды. (В примере выби-
раются только отделы 10 и 30 и профессии клерк и продавец).
SQL> BREAK ON DEPTNO SKIP 1 ON JOB SKIP 1
DUPLICATES
SQL> COMPUTE SUM OF SAL ON DEPTNO
SQL> COMPUTE AVG OF SAL ON JOB
SQL> SELECT DEPTNO, JOB, ENAME, SAL FROM EMP
2 WHERE JOB IN ('CLERK','SALESMAN')
3 AND DEPTNO IN (10,30)
4 ORDER BY DEPTNO, JOB;
И получим следующее:
DEPTNO JOB ENAME SAL
---------- ---------- ---------- ----------
10 CLERK MILLER 1300
********** ----------
avg 1300
********** ----------
sum 1300
-- 134 --
30 CLERK JAMES 1045
********** ----------
avg 1045
SALESMAN ALLEN 1760
SALESMAN MARTIN 1375
SALESMAN TURNER 1650
SALESMAN WARD 1375
********** ----------
avg 1540
********** ----------
sum 7205
Смотри также: compute, order by, select, SQL в PL/SQL, команды, меню.
@/
/@
BTITLE
BTI[TLE] [специф_формата [текст | переменная] ...] | [OFF | ON]
Команда BTITLE размещает и форматирует заданные заголовки в конце каж-
дой страницы отчета, или показывает текущие определения BTITLE.
Замечание: Описание старого формата BTITLE смотри в теме "Устаревшие ко-
манды".
SQL*PLUS определяет новый формат BTITLE, если правильная спецификация
формата следует непосредственно за именем команды (LEFT,SKIP,COL, и
т.д.).
За информацией о печати номеров страниц в заголовках обращайтесь к опи-
санию команды TTITLE.
Примеры: Чтобы установить нижний заголовок "CORPORATE PLANING
DEPARTMENT" выравненым влево и дату справа, введите:
SQL> BTITLE LEFT 'CORPORATE PLANING DEPARTMENT' -
> RIGHT '11 MAR 1988'
Чтобы установить нижний заголовок "CONFIDENTIAL" в колонке 50 и
дату через 6 пробелов, введите:
SQL> BTITLE COL 50 'CONFIDENTIAL' TAB 6 '11 MAR
88'
Смотри также: устаревшие команды, ttitle, команды, меню.
@/
/@
CHANGE
(изменить)
C[HANGE] разделитель старое [разделитель [новое [разделитель]]]
Команда CHANGE изменяет текст текущей буферной строки.
-- 135 --
разделитель
Представляет любой не алфавитно-цифровой символ, такой как "/" или
"!". Используйте символ разделитель, который не появляется ни в
старом ни в новом тексте. Можно опускать пробел между CHANGE и пер-
вым sepchar.
старый
Текст, который вы хотите изменить. CHANGE не различает регистр при
поиске указанного текста.
Например:
CHANGE /aq/aw
найдет первое появление "aq", "AQ", "aQ", "Aq" и заменит
его на "aw". SQL*PLUS вставит текст таким, каким Вы его за-
дали в команде.
Если старому тексту предшествует "...", то команда CHANGE заменит
весь текст от начала строки до искомого текста (включая сам текст).
Если "..." стоят после старого текста, то CHANGE заменит весь текст
до конца строки. Если "..." является вложенным, то CHANGE изменяет
часть строки между первой частью и второй часть параметра "старый".
новый
Текст заменяющий "старый" текст. Если вы опустите этот параметр и
второй и третий разделители, CHANGE удалит старый текст из текущей
буферной строки.
CHANGE заменяет заданный Вами текст на новый в текущей буферной строке.
При выводе команды на экран текущая строка помечается звездочкой (*).
Вы также можете использовать CHANGE для изменения строки, котрая привела
к ORACLE-ошибке. SQL*PLUS устанавливает указатель текущей строки на
строку, содержащую ошибку, поэтому вы можете проводить изменения.
Чтобы ввести строку заново, вы можете ввести номер строки а за ним наб-
рать новый текст. Если вы указали номер больше, чем количество строк в
буфере, то SQL*PLUS добавит новый текст в конец буфера. Если вы указали
номер строк равным нулю, то текст добавится в начало буфера (данная
строка получит номер 1).
Примеры: Допустим, что текущая буферная строка содержит следующий текст:
4* WHERE JOB IN
('CLERK','SECRETARY','RECEPTIONIST')
Введите следующую команду:
SQL> C /RECEPTIONIST/GUARD/
Строка изменится следующим образом:
4* WHERE JOB IN ('CLERK','SECRETARY','GUARD')
Или введите следующую команду:
SQL> C /'CLERK',.../'CLERK')/
-- 136 --
Строка изменится следующим образом:
4* WHERE JOB IN ('CLERK')
Или введите следующую команду:
SQL> C /(...)/('COOK','BULTER')/
Строка изменится следующим образом:
4* WHERE JOB IN ('COOK','BULTER')
Вы можете замещать содержимое любой строки, используя номер
строки. Данный ввод
SQL> 2 FROM EMP e1
означает, что вторая буферная строка замещается новым значени-
ем:
FROM EMP e1
Замечание: Ввод номера строки и последующего текста, будет за-
мещать всю строку несмотря на то, какой текст вы задали. Таким
образом,
SQL> 2 c/old/new
изменит вторую буферную строку таким образом:
SQL> c/old/new
Смотри также: append, del, edit, input, list, save, set (буфер), spool,
команды, меню.
@/
/@
CLEAR
(очистить)
CL[EAR] опция
Команда CLEAR сбрасывает или очищает текущее значение или установку ука-
занных параметров.
Опция представляет одну из следующих фраз:
BRE[AKS]
BUFF[ER]
COL[UMNS]
COMP[UTES]
SCR[EEN]
SQL
TIMI[NG]
BRE[AKS]
Удаление описания прерывания, которое установлено командой BREAK.
-- 137 --
BUFF[ER]
Очиска буфера. CLEAR BUFFER аналогична CLEAR SQL, если вы не ис-
пользуете несколько буферов (см SET BUFFER в приложении F).
COL[UMNS]
Сбрасывает атрибуты вывода всех столбцов, установленные командой
COLUMN, к их установкам по умолчанию. Для сброса атрибутов вывода
однго столбца , используйте фразу CLEAR команды COLUMN
COMP[UTES]
Удаляет все описания COMPUTE установленные командой COMPUTE.
SCR[EEN]
Очистка экрана.
SQL
Очистка буфера SQL. CLEAR SQL аналогична CLEAR BUFFER, если вы не
используете несколько буферов (см SET BUFFER в приложении F).
TIMI[NG]
Удаление всех областей хронометрирования, созданных командой
TIMING.
Примеры: Чтобы очистить все прерывания, введите:
SQL> CLEAR BREAKS
Чтобы сбросить все описания столбцов, введите:
SQL> CLEAR COLUMNS
Смотри также: break, buffer, column, compute, set (buffer, timing),
команды, меню.
@/
/@
COLUMN
(столбец)
COL[UMN] [{столбец|expr} [опция ...]]
Команда COLUMN определяет атрибуты вывода для всех указанных столбцов,
такие как:
* текст для заголовка столбца
* выравнивание заголовка столбца
* формат для данных NUMBER
* свертка данных столбца при выводе
Также показывает текущие атрибуты вывода для одного
или всех столбцов.
Опция является одной из следующих фраз:
ALI[AS] алиас
CLE[AR] | DEF[AULT]
COLOR {цвет | переменная_цвета}
FOLD_A[FTER] n
FOLD_B[EFORE] n
-- 138 --
FOR[MAT] формат
HEA[DING] текст
JUS[TIFY] {L[EFT] | C[ENTER] | C[ENTRE] | R[IGHT]]
LIKE {выраж | алиас}
LINEAPP {LIKE | MARK | BOTH}
NEWL[INE]
NEW_V[ALUE] переменная
NOPRI[NT] | PRI[NT]
NUL[L] символ
OLD_V[ALUE] переменная
ON | OFF
PATTERN {число_образца | переменная_образца}
WRA[PPED] | WOR[D_WRAPPED] | TRU[NCATED]
Для показа текущих атрибутов вывода только для одного
заданного столбца или выражения введите COLUMN с именем столбца или вы-
ражения. Чтобы отобразить атрибуты вывода для всех столбцов, введите
COLUMN без параметров.
Рассмотрим перечень описаний терминов или фраз:
{столбец| выраж}
Идентифицирует элемент данных (обычно, имя столбца) из команды SQL
SELECT, на который ссылается команда COLUMN. Если вы используете
выражение (expr) в команде COLUMN, вам необходимо его задавать в
таком же виде, в каком оно задается в команде SELECT. Если выраже-
ние в команде SELECT равно a+b, например, вы не можете использовать
b+a или (a+b) в команде COLUMN для ссылки на выражение из команды
SELECT.
Если вы выбираете столбцы с одинаковыми именами из разных таблиц,
команда COLUMN воздействует на оба этих столбца. А именно, команда
COLUMN для столбца ENAME воздействует на все столбцы с именами
ENAME, на которые вы ссылаетесь в течение данного сеанса. COLUMN
игнорирует предшествующее имя таблицы в команде SELECT.
Чтобы отформатировать столбцы по разному, присвойте уникальный али-
ас каждому столбцу внутри команды SELECT (не используйте фразу
ALIAS команды COLUMN) и введите команду COLUMN для каждого алиаса.
ALI[AS] алиас
Присваивает указанный алиас столбцу, который можно использовать для
ссылки на столбец в командах BREAK,COMPUTE,COLUMN.
CLE[AR]
Сбрасывает атрибуты вывода столбцов к их значениям по умолчанию.
COLOR {цвет | переменная_цвета}
Описывается в "SQL*graph User's Guide".
FOLD_A[FTER] n
Вставляет возврат каретки после каждого заголовка столбца и после
каждой записи в столбце. Вы должны ввести n; значение n не влияет
на формат.
-- 139 --
FOLD_B[EFORE] n
Вставляет возврат каретки до каждого заголовка столбца и до каждой
записи в столбце.Вы должны ввести n; значение n не влияет на фор-
мат. FOLD_BEFORE n имеет такой же эффект, как и NEWLINE.
FOR[MAT] формат
Назначает формат вывода для указаннго столбца. Спецификация формата
д.б. текстовой константой (такой как A10 или $9,999), но не пере-
менной.
По умолчанию ширина столбца типа CHAR является такой, как она опре-
делена в БД или равна длине заголовка столбца (выбирается макси-
мальное). По умолчанию ширина столбца типа LONG равна значению пе-
ременной SET LONG. Чтобы изменить ширину CHAR или LONG столбцов,
используйте FORMAT An. Если вы указали ширину меньшую чем заголо-
вок, то SQL*PLUS обрежет заголовок.
SQL*PLUS форматирует CHAR-данные выравнивая их влево. Если значение
не помещается в отведенную для него ширину, то SQL*PLUS сворачивает
или усекает строку символов, в зависимости от установки SET WRAP.
По умолчанию ширина неотфоматированных DATE-столбцов в SQL есть A9.
Чтобы изменить формат DATE-солбца, используйте SQL-функцию TO_CHAR
в вашей SQL-команде SELECT.
Когда вы используете TO_CHAR, ORACLE автоматически позвляет делать
очень широкий столбец, так как SQL*PLUS автоматически ширину столб-
ца равной 80 символов. Затем Вы должны использовать команду
SQL*PLUS COLUMN для восстановления ширины столбца. Чтобы изменить
ширину DATE-столбца в n, используйте FORMAT An. Если вы указали ши-
рину меньшую чем заголовок, то SQL*PLUS обрежет заголовок. Подроб-
нее о функции TO_CHAR смотри в "SQL Language User's Guide" и "SQL
Language Reference Manual".
Замечание: Другие SQL-вычисления могут привести к подобным эфектам;
в таком случае используйте SQL*PLUS команду COLUMN для сброса шири-
ны столбца.
Ширина NUMBER-столбца по умолчанию равна значениию SET NUMWIDTH.
Чтобы изменить ширину, используйте FORMAT с параметром как показано
в таблице
Таблица 6-1 Параметр Пример Описание
Числовые форматы
-----------------------------------------------------------
9 9999 Задает ширину вывода
посредством
количества введенных цифр.
0 0999 Вывод ведущих нулей.
9990 Вывод нуля вместо пробела,
когда
значение равно нулю.
$ $9999 Перед числом выводится знак
доллара.
B B9999 Показ нулевого значения пробелом.
MI 9999MI Вывод "-" после отридцательного
числа.
PR 9999PR Вывод отридцательного числа в
-- 140 --
угловых скобках.
запятая 9,999 Вывод запятой в указанной
позиции.
точка 99.99 Выравнивание по указанной
десятичной точке.
V 999V99 Умножает число на 10n, где n-
это количество "9" после "V".
EEEE 9.999EEEE Вывод в экспоненциальном формате
(формат должен содержать четыре
"E")
DATE DATE Выводит число как дату в
формате MM/DD/YY; используйте
данный формат для NUMBER-столб-
цов, хранящих Юлианские даты.
SQL*PLUS форматирует NUMBER-данные выравнивая их вправо. Ширина по-
ля выбирается равной или ширине заголовка или длине формата плюс
один пробел для знака (выбирается большее). SQL*PLUS никогда не об-
резает заголовок NUMBER-столбца. Если ширины, отведенной для столб-
ца, не хватает для вывода числа, то SQL*PLUS выводит звездочки (*),
оповещая нас о перереполнении.
Для всех числовых форматов SQL*PLUS округляет числа до указанного
количества значащих цифр. Когда формат не задан, по умолчанию шири-
на числовых данных берется из переменной NUMWIDTH (см команду SET в
данной главе).
HEA[DING] текст
Определяет заголовок столбца. Если вы не используете фразу HEADING,
заголовком столбца по умолчанию является имя столбца или выражения.
Если текст содержит пробелы или знаки пунктуации, вы должны заклю-
чить его в одиночные или двойные кавычки. Каждый символ HEADSEP (по
умолчанию '|') начинает новую строку. Например,
COLUMN ENAME HEADING 'Employee|Name'
Задает двух-строковый заголовок. Смотри переменная HEADSEP команды
SET в данной главе.
JUS[TIFY] {L[EFT] | C[ENTER] | C[ENTRE] | R[IGHT]}
Выравнивает заголовок. Если вы не используете фразу JUSTIFY, NUMBER
-столбца выравниваются вправо, а другие- влево.
LIKE {expr | алиас}
Копирует атрибуты вывода другого столбца или выражения (атрибуты
которой уже заданы другой командой COLUMN). LIKE копирует только те
атрибуты, которые не заданы в текущей команде COLUMN.
LINEAPP {LINE | MARK | BOTH}
Описывается в "SQL*Graph User's Guide".
NEWL[INE]
Вывод значения столбца начинает с новой строки. NEWLINE имеет такой
же эффект, что и FOLD_BEFORE n.
NEW_V[ALUE] переменная
Определяет переменную, в которую помещается значение столбца. Вы
-- 141 --
можете ссылаться на эту переменную в команде TTITLE. Используйте
NEW_VALUE для вывода значения столбца или даты в верхнем заголовке.
Вы должны включить данный столбец в BREAK-команду с действием SKIP
PAGE. NEW_VALUE полезна при получении основных/детальных отчетов, в
которых существует новая главная запись для каждой страницы. Для
основных/детальных отчетов вы должны также включить данную столбец
во фразу ORDER BY. Смотрите пример в конце описания данной команды.
NOPRI[NT] | PRI[NT]
Управляет печатью столбца (заголовка и всех выбранных значений).
NOPRINT выключает печать столбца. PRINT включает печать столбца.
NUL[L] символ
Управляет выводом текста для пустых значений столбцов. Если вы не
используете фразу NULL в команде COLUMN, SQL*PLUS выводит пробелы-
или текст, который вы задали для NULL, используя команду SET- там,
где встречается пустые значения для данного столбца. (SET NULL за-
дает текст, выводимый для всех пустых значений всех столбцов, если
это не отменено для конкретного столбца фразой NULL команды
COLUMN.)
OLD_V[ALUE] переменная
Определяет переменную, в которую помещается значение столбца. Вы
можете ссылаться на эту переменную в команде BTITLE. Используйте
OLD_VALUE для вывода значения столбца или даты в нижнем заголовке.
Вы должны включить данный столбец в BREAK-команду с действием SKIP
PAGE.
OLD_VALUE полезна при получении основных/детальных отчетов, в кото-
рых существует новая главная запись для каждой страницы. Для основ-
ных/детальных отчетов вы должны также включить данную столбец во
фразу ORDER BY. Подробнее о выводе значений столбца в верхний заго-
ловок смотри COLUMN NEW_VALUE. В описании TTITLE смотри о том как
надо ссылаться на переменные в заголовках.
ON | OFF
Управляет состоянием атрибутов вывода для столбца. OFF отключает
атрибуты для столбца, но не влияет на описание атрибутов. ON восс-
танавливает атрибуты в прежнее положение.
PATTERN {число_образца | переменная_образца}
Описывается в SQL*Graph User's Guide
WRA[PPED] | WOR[D_WRAPPED] | TRU[NCATED]
Определяет, как SQL*PLUS будет обращаться с CHAR-строками, которые
слишком широки для столбца. WRAPPED сворачивает конец строки на
следующую линию. WORD_WRAPPED функция аналогична WRAPPED, но при
свертке слова переносятся на другую строку полностью. TRUNCATED при
выводе обрезает конец строки.
Вы можете вводить любое количество команд COLUMN для одного или несколь-
ких столбцов. Все установленные атрибуты столбцов действют до конца се-
анса, или пока вы не отключите атрибуты фразой OFF. Таким образом, ко-
манды COLUMN, которые вы ввели, управляют атрибутами столбцов для
множества команд SELECT. Для различных столбцов эта команда может быть
введена любое число раз. Также, любое число команд COLUMN может быть
введено для одного и того же столбца, и их фразы будут применены сов-
местно. Если эти несколько команд COLUMN применяют одну и ту же фразу
-- 142 --
для того же столбца, управление осуществляется с помощью последней.
Примеры: Чтобы сделать столбец ENAME шириной в 20 символов и двух-строч-
ный заголовок EMPLOEYY NAME, введите:
SQL> COLUMN ENAME FORMAT A20 HEADING 'EMPLOYEE
|NAME'
Чтобы отформатировать столбец SAL таким образом, что она выво-
дила миллионы долларов, округлялась до центов, использовала за-
пятую для разделения тысяч, и выводила $0.00, когда число равно
нулю, вы должны ввести:
SQL> COLUMN SAL FORMAT $9,999,990.99
Чтобы присвоить алиас NET столбцу содержащей длинное выражение,
вывести результат в формате долларов, и вывести для пус-
тых значений, вы можете ввести:
SQL> COLUMN SAL+COMM+BONUS-EXPENSES-INS-TAX ALIAS
NET
SQL> COLUMN NET FORMAT $9,999,999.99 NULL ''
Заметим, что в данном примере спецификация столбца разделена на
две команды. Первая определяет алиас NET, а вторая использует
NET для задания формата. Также заметим, что в первой команде вы
должны задать выражение точно так же, как вы будете использо-
вать его в командах SELECT. Иначе, SQL*PLUS не найдет описание
данного столбца.
Чтобы 'свернуть' длинное значение в столбце REMARKS, вы можете
ввести:
SQL> COLUMN REMARKS FORMAT A20 WRAP
Например:
CUSTOMER DATE QUANTITY REMARKS
-------- --------- --------- --------------------
123 25-AUG-86 144 Заказ должен быть до
ставлен авиатранспор
том.
Если вы замените WRAP на WORD_WRAP, REMARKS будет
выглядеть следующим образом:
CUSTOMER DATE QUANTITY REMARKS
-------- --------- --------- --------------------
123 25-AUG-86 144 Заказ должен быть
доставлен
авиатранспортом
Если вы укажите TRUNCATE, REMARKS будет выглядеть
следующим образом:
CUSTOMER DATE QUANTITY REMARKS
-------- --------- --------- --------------------
123 25-AUG-86 144 Заказ должен быть до
-- 143 --
Для того, чтобы распечатать текущую дату и наименова-
ние каждой профессии в верхнем заголовке, введите
следующее. (Вопрос создания переменной с текущей да-
той в вашем LOGIN файле рассматривался в "Вывод теку-
щей даты в заголовках" темы "Определение заголовков и
размерностей страниц" в главе 4.)
SQL> COLUMN JOB NOPRINT NEW_VALUE JOBVAR
SQL> COLUMN TODAY NOPRINT NEW_VALUE DATEVAR
SQL> BREAK ON JOB SKIP PAGE ON TODAY
SQL> TTITLE CENTER 'Job Report' RIGHT DATEVAR SKIP
2 -
> LEFT 'Job: ' JOBVAR SKIP 2
SQL> SELECT TO_CHAR(SYSDATE, 'MM/DD/YY') TODAY/
2 ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO
3 FROM EMP WHERE JOB IN ('CLERK','SALESMAN')
4 ORDER BY JOB, ENAME;
Ваш 2-страничный отчет будет выглядеть подобно следу-
ющему отчету:
Job Report
05/01/88
Job: CLERK
ENAME MGR HIREDATE SAL DEPTNO
--------- --------- --------- ---------- ---------
ADAMS 7788 14-JAN-87 1100 20
JAMES 7698 03-DEC-81 950 30
MILLER 7782 23-JAN-82 1300 10
SMITH 7902 17-DEC-80 900 20
Job Report
05/01/88
Job: SALESMAN
ENAME MGR HIREDATE SAL DEPTNO
--------- --------- --------- ---------- ---------
ALLEN 7698 20-FEB-81 1600 30
MARTIN 7698 28-SEP-81 1250 30
TURNER 7698 08-SEP-81 1500 30
WARD 7698 22-FEB-81 1250 30
@/
/@
COMPUTE
COMP[UTE] [функция ...
OF {expr | столбец| алиас} ...
ON {expr | столбец| алиас | REPORT | ROW}]
Команда COMPUTE вычисляет и печатает итоги, используя стандартные вычис-
ления над подмножеством выбранных записей. COMPUTE без параметров пока-
зывает все определения COMPUTE.
функция ... Одна из функций таблицы
-- 144 --
Функция Операция Тип параметра функции
----------------------------------------------------------------
AVG Среднее непустых значений NUMBER
COU[NT] Счетчик ненулевых значений все типы
MAX[IMUM] Максимальное значение NUMBER,CHAR
MIN[IMUM] Минимальное значение NUMBER,CHAR
NUM[BER] Счетчик записей все типы
STD Среднеквадратичное отклонение NUMBER
непустых значений
SUM Сумма непустых значений NUMBER
VAR[IANСE] Дисперсия непустых значений NUMBER
Если вы укажите больше одной функции, то разделите их пробелами.
OF {expr | столбец| алиас} ...
Определяет столбец или выражение, которое вы хотите использовать
при вычислениях. Вы должны также задать данный столбец в команде
SELECT, иначе SQL*PLUS проигнорирует вашу команду COMPUTE.
Если вы не хотите, чтобы вычисляемое значение для указанного столб-
ца появлялось на экране, подавите эту печать фразой NOPRINT команды
COLUMN. Используйте пробелы для разделения нескольких выражений,
столбцов или алиасов внутри фразы OF.
Чтобы сослаться в SELECT на выражение или функцию из фразы OF, зак-
лючите ссылку на выражение или функцию в кавычки. Имя столбца или
алиаса заключать в кавычки не надо.
ON {выраж | столбец| алиас | REPORT | ROW}
Определяет событие, которое SQL*PLUS будет использовать как преры-
вание. COMPUTE выводит вычисляемое значение и начинает повторное
вычисление, когда происходит данное событие (также, когда изменяет-
ся значение выражения, после выборки новой записи, или заканчивает-
ся отчет).
Если несколько команд COMPUTE ссылаются на одну и ту же столбец во
фразе ON, то действует только последняя команда COMPUTE.
Чтобы сослаться в SELECT на выражение или функцию из фразы ON, зак-
лючите ссылку на выражение или функцию в кавычки. Имя столбца или
алиаса заключать в кавычки не надо.
Чтобы вывести все описания COMPUTE, введите COMPUTE без параметров.
Для проведения вычислений необходимо, чтобы выполнялись следующие усло-
вия:
* Выражение, столбец, или алиас столбца, на который вы ссылаетесь
во фразе ON, должны быть заданы в команде SELECT.
* Выражение, столбец, или алиас столбца, на который вы ссылаетесь
во фразе ON, должны быть заданы в последней команде BREAK.
* Если вы задаетет ROW или REPORT во фразе ON, также необходимо за-
дать ROW или REPORT в последней команде BREAK.
-- 145 --
* Одно или более выражений, столбцов, или алиасов столбцов, которые
вы задаете во фразе OF, необходимо задать в команде SELECT.
Примеры: Чтобы вычислить промежуточные суммы окладов для профессий
"clerk","analyst","salesman", введите:
SQL> BREAK ON JOB SKIP 1
SQL> COMPUTE SUM OF SAL ON JOB
SQL> SELECT JOB, ENAME, SAL
2 FROM EMP
3 WHERE JOB IN ('CLERK','ANALYST','SALESMA')
4 OREDER BY JOB, SAL;
Вы получите следующие резыльтаты:
JOB EMANE SAL
--------- ---------- ----------
ANALYST SCOTT 3000
FORD 3000
********* ----------
sum 6000
CLERK SMITH 800
JAMES 950
ADAMS 1100
MILLER 1300
********* ----------
sum 4150
SALESMAN WARD 1250
MARTIN 1250
TURNER 1500
ALLEN 1600
WILSON 3000
********* ----------
sum 8600
Чтобы вычислить средний и максимальный оклады в отделах продав-
цов, введите:
SQL> BREAK ON DNAME SKIP 1
SQL> COMPUTE AVG MAX OF SAL ON DNAME
SQL> SELECT DNAME, ENAME, SAL
2 FROM DEPT, EMP
3 WHERE DEPT.DEPTNO=EMP.DEPTNO
4 AND DNAME IN ('ACCOUNTING','SALESMAN')
5 ORDER BY DNAME;
Вы получите следующие резыльтаты:
DNAME ENAME SAL
--------------- ----------- -----------
ACCONTING CLARK 2450
KING 5000
MILLER 1300
*************** -----------
avg 2916.66667
maximum 5000
-- 146 --
SALESMAN ALLEN 1600
WARD 1250
MARTIN 1250
TURNER 1500
JAMES 950
BLAKE 2850
*************** -----------
avg 1566.66667
maximum 2850
Смотри также: column, break, select, команды, меню.
@/
/@
CONNECT
(подсоединиться)
CONN[ECT] [вход]
Команда CONNECT подключает пользователя к ORACLE.
вход
Указывается в следующем формате:
имя_польз[/пароль][@описание_БД]
| /
имя_польз[/пароль]
Задает имя и пароль пользователя, с которыми вы хотите подключиться
к ORACLE. Если вы опустили username и пароль, SQL*PLUS выдаст подс-
казку для их ввода. Если вы ввели наклонную черту (/) или просто
ввели [Return] в ответ на подсказку для ввода username, SQL*PLUS
залогируется, используя значения по умолчанию (см "/" ниже). Если
вы опустили только пароль, SQL*PLUS выдаст подсказку для ввода па-
роля. Во время ввода пароля после подсказки, SQL*PLUS не выводит
его на экран.
Представляет умалчиваемый (ops$) вход в систему. Вы не можете вво-
дить database_specification, если вы используете вход в систему по
умолчанию. При входе в систему по умолчанию, SQL*PLUS пытается за-
логироваться, используя имя пользователя OPS$name, где nameэто ваше
имя пользователя в опрационной системе.
описание_БД
состоит из SQL*NET-строки подключения. Ее синтаксис зависит от ва-
шего SQL*NET протокола. За информацией смотрите соответствующее ру-
ководство по SQL*NET или обратитесь к АБД (администратор БД).
SQL*PLUS не выдает подсказки для ввода спецификации БД, но он ис-
пользует вашу БД по умолчанию, если вы не задали данный параметр.
CONNECT записывает произведенные изменения в базу
данных
(завершает текущую транзакцию), заканчивает сеанс
вашей работы с ORACLE и вновь выполняет
регистрацию с указанным именем пользователя.
-- 147 --
Примеры: Чтобы зарегистрироваться с именем SCOTT с паролем TIGER к БД по
умолчанию к DECnet-узлу "corp", введите:
SQL> CONNECT SCOTT/TIGER@d:corp
Чтобы зарегистрироваться с именем SCOTT с последующим запросом
пароля, введите:
SQL> CONNECT SCOTT
Смотри также: disconnect, exit, host, quit, команды, меню.
@/
/@
COPY
(скопировать)
COPY [FROM] имя_польз[/пароль][@описание_БД] |
TO имя_польз[/пароль][@описание_БД]]
{APPEND | CREATE | INSERT | REPLACE} целевая_таблица
[(столбец, столбец, столбец...)] USING запрос
Команда COPY копирует данные из запроса в таблицу локальной или удален-
ной БД.
имя_польз[/пароль]
Задает имя и пароль пользователя с которым идет обмен информацией.
Фраза FROM определяет источник информации; фраза TO определяет ад-
ресата. Если вы не укажите пароль в FROM или TO, SQL*PLUS потребует
их ввести. SQL*PLUS подавляет вывод вводимого пароля.
описание_БД
Состоит из имени связи с БД или SQL*NET-строки подключения. Во фра-
зе FROM данный параметр задает БД источник; Во фразе TO данный па-
раметр задает БД адресат. Синтаксис параметра зависит от вашего SQL
*NET-протокола связи. Для дополнительной информации об SQL*NET "Ру-
ководство пользователя SQL*NET" или обратитесь к ДБА. SQL*PLUS не
выдает подсказки для ввода спецификации БД, но он использует вашу
БД по умолчанию, если вы не задали данный параметр.
целевая_таблица
Задает таблицу, которую вы хотите создать или в которую вы хотите
добавить данные.
(столбец, столбец, столбец...)
Задает имена столбцов в целевой таблице. Вы должны заключать имена
в двойные кавычки, если они содержат символы нижнего регистра или
пробелы.
Если вы задали столбцы, то номера столбцов должны соответсвовать
номерам выбираемого запроса. Если вы не задали столбцы, то копируе-
мые столбцы получат те же имена, что и в таблице-источнике, если
COPY создает таблицу-адресат.
USING запрос
Задает запрос (команда SELECT), в котором определяются копируемые
записи и столбцы.
-- 148 --
FROM имя_польз[/пароль][@описание_БД]
Задает имя, пароль, БД, которые содержат копируемые данные. Если вы
опустили фразу FROM, по умолчанию источником является БД, к которой
подключен SQL*PLUS (т.е., БД к которой адресуются все команды). Ес-
ли вы желаете копировать из другой БД, вы должны обязательно зада-
вать фразу FROM.
TO имя_польз[/пароль][@описание_БД]
Задает БД содержащую таблицу-адресат. Если вы опустили фразу TO, то
по умолчанию подразумевается БД, к которой подключен SQL*PLUS (т.е.
БД, к которой адресуются все команды). Если вы желаете копировать в
другую БД, вы должны обязательно задавать фразу TO.
APPEND
Вставляет строки из запроса в таблицу-адресат, если она существует.
Если таблица-адресат не существует, COPY создает ее.
CREATE
Вставляет строки из запроса в таблицу-адресат после того, как она
будет создана. Если таблица-адресат уже существует, будет получена
ошибка.
INSERT
Вставляет строки из запроса в таблицу-адресат, если она существует.
Если таблица-адресат не существует, будет получена ошибка.
REPLACE
Замещает данные в таблице-адресате и вставляет строки из запроса в
таблицу-адресат, если она существует. Если таблица-адресат не су-
ществует, COPY создаст ее.
Переменная LONG команды SET ограничивает длину копируемых LONG-столбцов.
Если некоторые LONG-столбцы содержат данные длиннее, чем значение пере-
менной LONG, COPY обрежет эти данные. SQL*PLUS вносит изменения в БД
после каждого успешного копирования. Если вы присвоили переменной
COPYCOMMIT положительное значение n (больше чем 0), изменения вносятся
каждый раз после копирования n пакетов записей. (Размер пакета определя-
ется системной переменной ARRAYSIZE).
Примеры: Следующая команда копирует таблицу EMP из БД HQ в таблицу с
именем WESTEMP в БД WEST. Если WESTEMP уже существует, SQL*PLUS
заменит ее содержимое. Колонки таблиц EMP и WESTEMP имеют оди-
наковые имена.
SQL> COPY FROM SCOTT/TIGER@HQ TO JOHN/CHROME@WEST
-
> REPLACE WESTEMP -
> USING SELECT * FROM EMP
Следующая команда копирует выбранные записи из таблицы EMP базы
данных HQ в БД, к которой подключен SQL*PLUS. SQL*PLUS создает
SALESMAN при копировании. SQL*PLUS копирует только столбцы
EMPNO и ENAME, и данные столбцы получат имена EMPNO и SALESMAN.
SQL> COPY FROM SCOTT/TIGER@HQ -
> CREATE SALESMAN (EMPNO,SALESMAN) -
> USING SELECT EMPNO, ENAME FROM EMP -
> WHERE JOB='SALESMAN'
-- 149 --
Смотри также: connect, disconnect, describe, edit, set (arraysize,
copycommit, long), команды, меню.
@/
/@
DEFINE
(определить)
DEF[INE] [переменная] | [переменная = текст]
Команда DEFINE определяет переменную пользователя и присваивает ей CHAR-
значение. Или, показывает значение и тип одной или всех переменных.
переменная
Задает пользовательскую переменную, чье значение вы хотите посмот-
реть или определить.
текст
Задает символьное значение, присваиваемое переменной. Если текст
содержит пробелы или знаки пунктуации, заключите его в одиночные
кавычки.
переменная = текст
Определяет переменную пользователя и присваивает ей символьное зна-
чение.
Чтобы посмотреть значение и тип переменной, введите DEFINE и имя пере-
менной. Чтобы посмотреть значение и тип всех переменных, введите DEFINE
без параметров.
DEFINE-переменные сохраняют свои значения, пока не произойдет одно из
следующих событий:
* вы ввели новую команду DEFINE для данной переменной
* вы ввели команду UNDEFINE для данной переменной
* вы ввели команду ACCEPT для данной переменной
* вы задали данную переменную во фразе NEW_VALUE или OLD_VALUE ко-
манды COLUMN и использовали столбец в команде SELECT.
* вы вышли из SQL*PLUS
Всякий раз, когда вы выполняете сохраненный запрос или командный файл,
SQL*PLUS подставляет значение переменной для каждой подстановочной пере-
менной, ссылающейся на данныю переменную (в форме &переменная или &&пе-
ременная). Вы не получите подсказку на ввод такой переменной в данном
сеансе, пока вы не уничтожите ее командой UNDEFINE.
Максимальное число переменных, определенных командами DEFINE, равно 240.
Заметим, что вы можете использовать DEFINE для определения переменной
_EDITOR, которая задает имя системного редактора, запускаемого по коман-
де EDIT.
Если вы размещаете значение переменной, определяемой DEFINE, на несколь-
ких строках (используя команду SQL*PLUS символ продолжения), SQL*PLUS
заменит каждый символ продолжения и возврата каретки на пробел в итого-
вой переменной. Например, SQL*PLUS поймет данную команду:
-- 150 --
SQL> DEFINE TEXT = 'ONE-
> TWO-
> THREE'
как:
SQL> DEFINE TEXT = 'ONE TWO THREE'
Примеры: Чтобы присвоить значение MANAGER переменной POS, введите:
SQL> DEFINE POS = MANAGER
Если вы выполните команду, которая содержит ссылку на &POS, SQL
*PLUS подставит значение MANAGER вместо &POS и вы не получите
подсказки на ввод значения POS.
Чтобы присвоить символьное значение 20 переменной DEPTNO, вве-
дите:
SQL> DEFINE DEPTNO = 20
Хотя вы задали 20, SQL*PLUS присвоит символьное значение
DEPTNO, состоящее из двух знаков 2 и 0.
Для показа описания DEPTNO, введите:
SQL> DEFINE DEPTNO
DEFINE DEPTNO = "20" (CHAR)
Смотри также: accept, column, edit, параметры, undefine, команды, меню.
@/
/@
DEL
DEL
Команда DEL удаляет текущую буферную строку.
Текущей становится следующая строка. Для удаления нескольких последова-
тельных строк, введите DEL несколько раз.
Примеры: Предположим, буфер SQL содержит следующий запрос:
1 SELECT ENAME, DEPTNO
2 FROM EMP
3 WHERE JOB = 'SALESMAN'
4* ORDER BY DEPTNO
Чтобы сделать строку с WHERE текущей, вы должны ввести:
SQL> LIST 3
3* WHERE JOB = 'SALESMAN'
Чтобы удалить фразу WHERE, введите:
SQL> DEL
Сейчас буфер SQL содержит следующие строки:
-- 151 --
1 SELECT ENAME, DEPTNO
2 FROM EMP
3* ORDER BY DEPTNO
Смотри также: append, change, edit, input, list, save, set (buffer),
spool, команды, меню.
@/
/@
DESCRIBE
(описать)
DESC[RIBE] [польз.]объект[@имя_связи_с_БД]
Команда DESCRIBE gоказывает описания столбцов для указанной таблицы,
представления данных, или синонима.
польз
Задает пользователя, который владеет объектом. Если польз опущен,
SQL предполагает, что вы владелец данного объекта. объект Задает
таблицу, обзор, или синоним, чье описание вы хотите вывести.
имя_связи_с_БД
Состоит из имени связи БД, где существует данный объект. За инфор-
мацией о связях с БД обращайтесь к "Руководство пользователя по
языку SQL" и "Справочное руководство по языку SQL".
Для каждого столбца описание содержит:
* имя столбца
* разрешено ли нулевое значение (NULL или NOT NULL)
* тип данных
* точность столбца (и количество знаков после запятой, для числовых
столбцов)
Примеры: Чтобы получить описание таблицы EMP, введите:
SQL> DESCRIBE EMP
DESCRIBE покажет следующую информацию:
Имя Null? Тип
------------------------- -------- ------------
EMPNO NOT NULL NUMBER(4)
ENAME CHAR(10)
JOB CHAR(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
Смотри также: представления данных, связи с БД, таблицы, команды,
меню.
@/
/@
DISCONNECT
(отсоединиться)
-- 152 --
DISCONNECT
Команда DISCONNECT Вносит текущие изменения в базу данных и заканчивает
ваш сеанс работы с ORACLE, но не завершает работы с SQL*PLUS.
Используйте DISCONNECT в командном файле, чтобы закрыть пользователю
доступ к БД, когда вы хотите отключить пользователя от ORACLE, но чтобы
пользователь не покидал SQL*PLUS. Используйте EXIT или QUIT для отключе-
ния от ORACLE и передаче управления операционной системе.
Примеры: Ваш командный файл может начинаться командой CONNECT и заканчи-
ваться командой DISCONNECT, как показано ниже:
SQL> GET MYFILE
1 CONNECT ...
.
.
.
.
15* DISCONNECT
Смотри также: connect, exit, host, quit, SQLPlus, команды, меню.
@/
/@
EDIT
EDIT [имя_файла[.расширение]]
Команда TDIT вызывает системный текстовый редактор для редактирования
указанного файла или содержимого буфера.
имя_файла[.расширение]
Задает файл, который вы хотите редактировать (обычно командный
файл). Если расширение файла опущено, берется расширение .SQL . За
информацией по изменению расширения по умолчанию смотрите перемен-
ную SUFFIX команды SET в данной главе.
Чтобы откорректировать содержимое SQL буфера системным текстовым
редактором, введите EDIT без имени файла.
Переменная пользователя _EDITOR содержит имя текстового редактора вызы-
ваемого с помощью команды EDIT. Значение переменной _EDITOR можно изме-
нять. Информацию по изменеию пользовательских переменных смотри в
DEFINE. Если переменная _EDITOR не задана, EDIT попытается вызвать сис-
темный текстовый редактор по умолчанию.
EDIT помещает содержимое буфера в файл AFIEDT с расширением BUF (в те-
кущий директорий) и вызывает текстовый редактор для данного файла. EDIT
возвращает сообщение об ошибке, если вы не задали имя файла и буфер
пуст.
Примеры: Чтобы отредактировать файл REPORT с расширением SQL, используя
текстовый редактор операционной системы, введите:
SQL> EDIT REPORT
Смотри также: append, change, del, define, input, list, save, spool,
-- 153 --
undefine, команды, меню.
@/
/@
EXIT
{EXIT | QUIT} [SUCCESS | FAILURE | WARNING | n | переменная]
Команда EXIT вносит все отложенные изменения в БД, завершает SQL*PLUS, и
передает управление операционной системе.
{EXIT | QUIT}
QUIT- это синоним EXIT.
n
Задает целый код возврата.
переменная
Задает определенную пользователем или системную переменную, такую
как SQL.SQLCODE. 'EXIT переменная' выходит с кодом возврата равным
значению данной переменной.
SUCCESS
Нормальный выход.
FAILURE
Выход с кодом возрата, указывающем на сбой.
WARNING
Выход с кодом возрата указывающем на предупреждение.
EXIT без параметров выходит из SQL*PLUS со значением SUCCESS
EXIT позволяет вам указать код возврата для операционной системы. Это
позволяет вам выполнять командные файлы SQL*PLUS в пакетном режиме и ре-
агировать на непредусмотренные события. Способ обнаружения события зави-
сит от ОС. Смотри руководство по установке ORACLE и руководство пользо-
вателя по вашей операционной системе.
Ключевые слова SUCCESS,FAILURE,WARNING задают значения зависящие от типа
ОС. В некоторых система FAILURE и WARNING могут не различаться.
Замечание: SUCCESS,FAILURE,WARNING не являются зарезервированными слова-
ми.
За информацией о выходе по условию обращайся к описанию WHENEVER
SQLERROR.
Примеры: Ниже приводится выход с кодом ошибки последней выполненой ко-
манды или блок PL/SQL:
SQL> EXIT SQL.SQLCODE
Смотри также: connect, disconnect, host, quit, save, spool, SQLPlus,
whenever sqlerror, команды, меню.
@/
/@
GET
-- 154 --
GET имя_файла[.расширение] [LIS[T] | NOL[IST]]
Команда GET загружает файл операционной системы в текущий буфер.
имя_файла[.расширение]
Задает имя загружаемого файла (обычно командный файл). Если расши-
рение файла не указано, используется расширение по умолчанию .SQL .
Информацию о изменении расширения по умолчанию смотри описание ко-
манды SET переменная SUFFIX в данной главе.
LIS[T
Выводит содержимое файла.
NOL[IST]
Запрещает вывод.
Примеры: Чтобы загрузить файл YEARENDRPT с расширением SQL в буфер, вве-
дите:
SQL> GET YEARENDRPT
Смотри также: @, /, accept, input, list, run, save, set (buffer), spool,
команды, меню.
@/
/@
HOST
HO[ST] [команда]
Команда HOST выплняет команду операционной системы без выхода из
SQL*PLUS
команда
Задает команду операционной системы. Введите HOST без команды, что-
бы вывести подсказку операционной системы. Затем вы можете выпол-
нить множество команд операционной системы. За информацией по возв-
рату обратно в SQL*PLUS обратитесь к руководству по установке
ORACLE и руководству пользователя по вашей ОС.
В некоторых операционных системах можно использовать "$" или другой сим-
вол вместо HOST. Смотри руководство по установке ORACLE и руководство
пользователя для вашей операционной системы.
В некоторых операционных системах к команде HOST нет доступа.
Примеры: Чтобы выполнить команду операционной системы ls *.sql, введите:
SQL> HOST ls *.sql
Смотри также: change, del, edit, exit, команды, меню.
@/
/@
INPUT
I[NPUT] [текст]
-- 155 --
Команда INPUT добавляет одну или более строк текста после текущей бу-
ферной строки.
текст
Задает добавляемый текст. Чтобы добавить одну строку, введите текст
строки после команды INPUT, отделив текст от команды пробелом. Что-
бы начать строку одним или более пробелом, введите один или более
пробелов между INPUT и первым непустым символом текста.
Чтобы добавить несколько строк, введите INPUT без текста. INPUT
попросит вас ввести каждую строку. Выход из INPUT- это пустая вве-
денная строка.
Если вы ввели номер строки больший чем количество строк в буфере и далее
текст, SQL*PLUS добавит новую строку в конец буфера. Если вы задали в
качестве номера строки ноль (0) и далее указали текст, то SQL*PLUS вста-
вит новую строку в начало буфера (данная строка получит номер 1).
Примеры: Предположим буфер SQL содержит следующую команду:
1 SELECT ENAME, DEPTNO, SAL, COMM
2 FROM EMP
Чтобы добавить фразу ORDER BY к запросу, введите:
SQL> LIST 2
2* FROM EMP
SQL> INPUT ORDER BY ENAME
LIST 2 делает вторую строку текущей. INPUT добавляет новую
строку после текущей строки. Буфер SQL сейчас содержит следую-
щие строки:
1 SELECT ENAME, DEPTNO, SAL, COMM
2 FROM EMP
3* ORDER BY ENAME
Чтобы добавить две строки с фразой WHERE, введите:
SQL> LIST 2
2* FROM EMP
SQL> INPUT
3 WHERE JOB = 'SALESMAN'
4 AND COMM=500
5
INPUT попросит вас ввести новые строки, пока вы не введете пус-
той строки. Буффер SQL сейчас содержит следующие строки:
1 SELECT ENAME, DEPTNO, SAL, COMM
2 FROM EMP
3 WHERE JOB = 'SALESMAN'
4 AND COMM=500
5 ORDER BY ENAME
Смотри также: change, del, edit, list, save, spool, get, input,
set (SQL buffer), prompt, команды, меню.
-- 156 --
@/
/@
LIST
L[IST] [n | n m | n * | n LAST | * | * n | * LAST | LAST]
Команда LIST выводит одну или несколько строк буфера.
n Выводит n строк.
n m Выводит строки с n по m.
n * Выводит со строки n до текущей.
n LAST Выводит со строки n до последней.
* Выводит текущую строку.
* n Выводит c текущей строки до строки с номером n.
* LAST Выводит c текущей строки до последней строки.
LAST Выводит последнюю строку.
Введите LIST без параметров, чтобы вывести все строки.
Можно опускать пробел между LIST и n или *, но но не между LIST и LAST.
Последняя выведенная строка становится новой текущей строкой (помечается
звездочкой).
Примеры: Чтобы вывести содержимое буфера, введите:
SQL> L
Вы, наверное, увидите следующие результаты:
1 SELECT ENAME, DEPTNO, JOB
2 FROM EMP
3 WHERE JOB = 'CLERK'
4* ORDER BY DEPTNO
Звездочка показывает, что текущей строкой стала строка с номе-
ром 4.
Чтобы вывести только вторую строку, введите:
SQL> L 2
Выведется следующее:
2* FROM EMP
Чтобы вывести с текущей строки (сейчас это строка 2) до послед-
ней, введите:
SQL> L * LAST
Затем вы увидите следующее:
2 FROM EMP
3 WHERE JOB = 'CLERK'
4* ORDER BY DEPTNO
Смотри также: change, del, edit, get, input, save, spool,
-- 157 --
set (SQL buffer), команды, меню.
@/
/@
PAUSE
PAU[SE] [текст]
Команда PAUSE выводит пустую строку, затем строку содержащую "текст", и
затем ожидает нажатие клавиши [Return]. Или, выводит две пустые строки и
устанавливается в режиме ожидания ввода.
текст
Представляет текст, который вы хотите вывести.
Если вы хотите вы вести две пустых строки, введите PAUSE без параметров.
Так как PAUSE всегда ожидает отклика пользователя, лучше использовать
сообщение, которое явно просит нажать [Return].
PAUSE читает ввод с терминала (если он доступен) даже, когда вы переназ-
начили источник команд ввода на файл.
За информацией по созданию пауз между страницами отчета обратитесь к
описанию переменной PAUSE команды SET.
Примеры: Чтобы вывести сообщение "Установите бумагу, нажмите Return" с
ожиданием нажатия клавиши [Return], вы можете включить следую-
щую команду PAUSE в командный файл:
SQL> GET MYFILE
1 SET PAUSE OFF
2 PAUSE Установите бумагу и нажмите Return
3 SELECT ...
Смотри также: /, @, get, prompt, run, set (pause), start, команды, меню.
@/
/@
PROMPT
PROMPT [текст]
Команда PROMPT выводит указанное сообщение или пустую строку на экран.
текст
Текст сообщения, которое вы хотите вывести. Если "текст" опущен,
PROMPT выведет пустую строку на экран.
Можно использовать данную команду в командном файле для предоставления
информации пользователю.
Примеры: Следующий пример демонстрирует использование PROMPT совместно с
ACCEPT в командном файле ASKFORDEPT. ASKFORDEPT содержит следу-
ющие команды SQL*PLUS и SQL:
PROMPT
PROMPT Please enter a valid department
PROMPT For example: 10, 20, 30, 40
-- 158 --
ACCEPT NEWDEPT NUMBER PROMPT 'DEPT:> '
SELECT DNAME FROM DEPT
WHERE DEPTNO = &NEWDEPT
Предположим, что вы запустили данный командный файл, используя
START или @:
SQL> @ASKFORDEPT
SQL*PLUS выведет следующие подсказки:
Please enter a valid department
For example: 10, 20, 30, 40
DEPT:>
Пользователь вводит номер отдела после подсказки
DEPT:>.
SQL*PLUS выведет строку с &NEWDEPT до и после подстановки, и
затем покажет наименование отдела, соответствующее введенному
номеру после подсказки
DEPT:>.
Смотри также: /, @, accept, get, input, pause, run, start, команды,
меню.
@/
/@
REMARK
REM[ARK]
Команда REMARK начинает комментарий в командном файле.
Команда REMARK пишется в начале строки и комментарий заканчивается в
конце строки (в строке не может быть одновременно и комментарий и коман-
да). SQL*PLUS не интерпретирует комментарий как команду.
За информацией по вводу комментариев в командные файлы, используя огра-
ничители комментариев SQL, /*...*/, обратитесь к подразделу "Помещение
комментариев в командные файлы" раздела "Сохранение команд для более
позднего использования" в главе 3.
Примеры: Следующий командный файл содержит несколько типичных коммента-
риев:
SQL> GET EMPSUM
1 REM COMPUTE uses BREAK ON REPORT to break on
end of table
2 BREAK ON REPORT
3 COMPUTE SUM OF "DEPARTMENT 10" DEPARTMENT 20" -
4 DEPARTMENT 30" "TOTAL BY JOB" ON REPORT
5 REM Each column displays the sum of salaries by
job for
6 REM one of the departments 10, 20, 30.
7 SELECT JOB,
8 SUM( DECODE( DEPTNO, 10, SAL, 0))
"DEPARTMENT 10",
9 SUM( DECODE( DEPTNO, 20, SAL, 0))
"DEPARTMENT 20",
-- 159 --
10 SUM( DECODE( DEPTNO, 30, SAL, 0))
"DEPARTMENT 30",
11 SUM(SAL) "TOTAL BY JOB"
12 FROM EMP
13*GROUP BY JOB
Смотри также: /, @, edit, get, start, run, whenever sqlerror,
комментарии, команды, меню.
@/
/@
RUN
R[UN]
Команда RUN выводит и выполняет команду SQL или блок PL/SQL запомненный
в буфере SQL.
RUN приводит к тому, что последняя строка буфера SQL становится теку-
щей.
Команда "наклонная черта" (/) аналогична RUN, но она не выводит содержи-
мое буфера на терминал.
Примеры: Предположим, буфер SQL содержит следующий запрос:
SELECT DEPTNO FROM DEPT
Чтобы выполнить запрос, введите:
SQL> RUN
Вы получите следующий результат:
1* SELECT DEPTNO FROM DEPT
DEPTNO
----------
10
20
30
40
Смотри также: /, @, edit, get, list, save, spool, start, SQL в PL/SQL,
пвраметры, команды, меню.
@/
/@
RUNFORM
RUNFORM [опции] имя_формы
Команда RUNFORM вызывает приложение SQL*Forms из SQL*PLUS.
Синтаксис команды RUNFORM такой же, как и у SQL*PLUS. Если вы уже нахо-
дитесь в SQL*PLUS, данным способом можно вызвать форму более быстрее,
чем активизация формы после системной подсказки, так как вы избегаете
повторного логирования к ORACLE. Подробности о синтаксисе смотри в "Ру-
ководство опреатора по SQL*Forms".
-- 160 --
Заметим, что если вы используете RUNFORM из SQL*PLUSа, вы можете не ука-
зывать имя/пароль пользователя (SQL*PLUS возьмет текущие значения). Если
вы хотите использовать другие имя/пароль пользователя, используйте
SQL*PLUS-команду CONNECT для подключения к необходимому пользователю.
Примеры: Для выполнения формы с именем MYFORM, введите:
SQL> RUNFORM MYFORM
Смотри также: команды, меню.
@/
/@
SAVE
SAV[E] имя_файла[.расширение] [CRE[ATE] | REP[LACE] | APP[END]]
Команда SAVE сохраняет содержимое буфера в файле операционной системы.
имя_файла[.расширение]
Задает имя файла, в котором вы хотите сохранить содержимое буфера.
Если Вы не указали расширение, SQL*PLUS использует расширение по
умолчанию (обычно SQL). Информация о изменении расширения по умол-
чанию приводится при описании переменной SUFFIX команды SET в дан-
ной главе.
Если вы указываете одну из фраз CREATE, REPLACE, APPEND, то необхо-
димо явно указать расширение файла.
CRE[ATE]
Создает файл, если он не существует.
REP[LACE]
Замещает содержимое существующего файла. Если файл не существует,
REPLACE создает его.
APP[END]
Добавляет содержимое буфера в конец указанного вами файла.
Когда вы сохраняете содержимое буфера SQL, SAVE добавляет строку с нак-
лонной чертой (/) в конец файла.
Примеры: Чтобы сохранить содержимое буфера в файл DEPTSALPRT с расшире-
нием SQL, введите:
SQL> SAVE DEPTSALPRT
Чтобы сохранить содержимое буфера в файл DEPTSALPRT с расшире-
нием OLD, введите:
SQL> SAVE DEPTSALPRT.OLD
Смотри также: команды, меню.
@/
/@
SET
SET системная_переменная значение
-- 161 --
Команда SET настраивает окружение SQL*PLUS для текущего сеанса:
* устанавливает ширину вывода данных NUMBER
* устанавливает ширину вывода данных LONG
* разрешает/запрещает печать заголовков столбцов
* устанавливает количество строк на странице
системная_переменная является одним из следующих значений:
ARRAY[SIZE] {20 | n}
AUTO[COMMIT] {OFF | ON | IMM[EDIATE]}
BLO[CKTERMINATOR] {. | c}
CMDS[EP] {; | c | OFF | ON}
COM[PATIBILITY] {V5 | V6}
CON[CAT] {. | c | OFF | ON}
COPYC[OMMIT] {0 | n}
CRT crt
DEF[INE] {& | c | OFF | ON}
ECHO {OFF | ON}
EMBEDDED {OFF | ON}
ESC[APE] {\ | c | OFF | ON}
FEED[BACK] {6 | n | OFF | ON}
FLU[SH] {OFF | ON}
HEA[DING] {OFF | ON}
HEADS[EP] {| | c | OFF | ON}
LIN[ESIZE] {80 | n}
LONG {80 | n}
MAXD[ATA] n
NEWP[AGE] {1 | n}
NULL текст
NUMF[ORMAT] формат
NUM[WIDTH] {10 | n}
PAGES[IZE] {14 | n}
PAU[SE] {OFF | ON | текст}
RECSEP {WR[APPED] | EA[CH] | OFF}
RECSEPCHAR {_ | c}
SCAN {OFF | ON}
SHOW[MODE] {OFF | ON}
SPA[CE] {1 | n}
SQLC[ASE] {MIX[ED] | LO[WER] | UP[PER]}
SQLCO[NTINUE] {> | текст}
SQLN[UMBER] {OFF | ON}
SQLPRE[FIX] {# | c}
SQLP[ROMPT] {SQL> | текст}
SQLT[ERMINATOR] {; | c | OFF | ON}
SUF[FIX] {SQL | текст}
TAB {OFF | ON}
TERM[OUT] {OFF | ON}
TI[ME] {OFF | ON}
TIMI[NG] {OFF | ON}
TRIM[OUT] {OFF | ON}
UND[ERLINE] {- | c | OFF | ON}
VER[IFY] {OFF | ON}
WRA[P] {OFF | ON}
ARRAY[SIZE] {20 | n}
Устанавливает количество строк <называется пакетом>, которые
SQL*PLUS выбирает из БД за один раз. Допустимое значение от 1 до
-- 162 --
5000. Большее число повышает эффективность запросов и подзапросов,
выбирающих много записей, но требует больше памяти в операционной
системе. ARRAYSIZE не влияет на выполнение операций SQL*PLUS.
AUTO[COMMIT] {OFF | ON | IMM[EDIATE]}
Задает время проведения отложенных изменений в базе данных. ON зас-
тавляет SQL вносить произведенные изменения в БД сразу же после вы-
полнения любой команды SQL или блока PL/SQL. OFF отменяет автомати-
ческое сохранение, и вам придется самостоятельно сохранять
изменения (например, командой SQL COMMIT). IMMEDIATE- эквивалентна
опции ON.
BLO[CKTERMINATOR] {. | c}
Устанавливает неалфавитно-цифровой символ, используемый в конце
блоков PL/SQL. Чтобы выполнить блок, вы должны использовать команды
RUN или /.
CMDS[EP] {; | c | OFF | ON}
Устанавливает неалфавитно-цифровой символ, используемый для разде-
ления нескольких команд SQL*PLUS, вводимых на одной строке. ON/OFF
разрешает/запрещает использование нескольких команд на одной стро-
ке; ON автоматически устанавливает точку с запятой (;) в качестве
символа разделителя команд.
COM[PATIBILITY] {V5 | V6}
Задает, сохранять или нет SQL*PLUSу команды COMMIT и ROLLBACK в
буфере SQL. V5 не сохраняет COMMIT и ROLLBACK в буфере SQL; V6-
наоборот; Установите COMPATIBILITY в V5, если вы хотите выполнить
командный файл, разработанный для пятой версии ORACLE; ... V6- для
шестой версии ORACLE. Смотрите описание команд COMMIT и ROLLBACK в
"Справочное руководство по языку SQL".
CON[CAT] {. | c | OFF | ON}
Устанавливает символ, который вы можете использовать для разделения
имени подстановочной переменной от другого текста, если он примыка-
ет вплотню к данной переменной. Если вы задали COMCAT ON, то
SQL*PLUS восстанавливает значение символа по умолчанию, т.е. точку.
COPYC[OMMIT] {0 | n}
Задает количество пакетов, после которых команда COPY производит
изменения в БД. Команда COPY производит изменения строк в целевой
БД каждый раз, когда он скопирует n пакетов строк. Допустимое зна-
чение от 0 до 5000. Длина пакета задается переменной ARRAYSIZE. Ес-
ли вы задали COPYCOMMIT в 0, то COPY производит изменения только
после окончания операции копирования.
CRT crt
Изменяет CRT-файл по умолчанию, используемый командой SQL*PLUS
RUNFORM. Чтобы восстановить первоначальное имя crt, задайте SET CRT
"".
Вы можете задавать имя-crt при вызове формы:
SQL> RUNFORM -c NEW имя_формы
или
SQL> SET CRT NEW
SQL> RUNFORM имя_формы
-- 163 --
При втором способе, SQL*PLUS запоминает имя-crt поэтому, при вызове
формы не надо задавать имя-crt в течение данного сеанса.
DEF[INE] {& | c | OFF | ON}
Устанавливает символ "c", используемый как префикс пдстановочной
переменной. ON/OFF включает/выключает поиск и замену подстановочной
переменной ее значением. Установка DEFINE в ON или OFF переопреде-
ляет значение установки переменной SCAN.
ECHO {OFF | ON}
Задает или запрещает вывод выполняемых команд из командного файла,
запущенного командой START. ON разрешает вывод команд; OFF-запреща-
ет.
EMBEDDED {OFF | ON}
OFF означает, что каждый отчет будет начинаться от начала новой
страницы. При ON- будет начинаться с любого места страницы.
ESC[APE] {\ | c | OFF | ON}
"c" определяет ESCAPE-символ. OFF отменяет этот символ. ON разреша-
ет ESCAPE-символ.
Если ESCAPE-символ определен, то его можно использовать, например,
перед символом, объявленным в команде DEFINE, для обозначения того,
что такой символ является обычным символом.
FEED[BACK] {6 | n | OFF | ON}
Выводит количество записей выбранных при запросе в момент выбора n
записей. ON/OFF включает/выключает эту команду. При установке ON n
устанавливается в 1. Установка n в 0 равнозначна установке OFF.
FLU[SH] {OFF | ON}
Задает, когда посылать результаты на устройство вывода пользовате-
ля. OFF разрешает операционной системе буферный вывод. ON запрещает
буферизацию. OFF следует применять для командных файлов работающих
не интерактивно (т.е., когда нет необходимости в выводимых сообще-
ниях пока не закончится командный файл). Чем меньше операций ввода/
вывода, тем быстрее работает программа.
HEA[DING] {OFF | ON}
Управляет печатью заголовков столбцов. ON заставляет SQL печатать
заголовки в отчетах; OFF- запрещает;
HEADS[EP] {| | c | OFF | ON}
Устанавливает символ разделитель заголовка. Можно использовать дан-
ный символ в команде COLUMN или в старых формах BTITLE и TTITLE для
разделения заголовков на несколько строк. ON/OFF влючают/выключают
разделитель. Когда разделитель заголовков выключен, SQL*PLUS восп-
ринимает символ-разделитель как обычный символ.
LIN[ESIZE] {80 | n}
Устанавливает длину строки. Также контролирует позицию центрирова-
ния и выравнивания текста вправо в BTITLE и TTITLE. Допустимое зна-
чение от 1 до 500.
-- 164 --
LONG {80|n}
Устанавливает максимальную длину LONG-значений для вывода и копиро-
вания. Допустимые значения от 1 до 32767. Значение переменной LONG
должно быть меньше, чем MAXDATA.
MAXD[ATA] n
Устанавливает максимальную ширину строки, которую SQL*PLUS может
обрабатывать. Максимальное и значение по умолчанию для n зависит от
типа операционной системы. Смотри руководство по установке ORACLE и
руководство пользователя для вашей ОС, или обратитесь к администра-
тору БД.
NEWP[AGE] {1 | n}
Устанавливает количество пустых строк, печатаемых между началом
каждой страницы и верхним заголовком. Значение, равное нулю, зас-
тавляет SQL*PLUS выводить между страницами символ перевода листа и
очищать экран на большинстве типов терминалов.
NULL текст
Устанавливает текс, который SQL*PLUS отображает для представления
пустой величины. NULL без указания "текста" побуждает SQL*PLUS вы-
водить пробелы (по умолчанию). Используйте фразу NULL команды
COLUMN для замены данного значения для некоторого столбца.
NUMF[ORMAT] формат
Устанавливает формат, используемый по умолчанию для вывода на экран
числовых элементов данных. Укажите числовой формат для "формат".
Описание форматов смотри в описании фразы FORMAT команды COLUMN.
NUM[WIDTH] {10 | n}
Устанавливает ширину, используемую по умолчанию для вывода чисел.
PAGES[IZE] {14 | n}
Устанавливает количество строк между заголовком и концом страницы.
Для листа в 11 дюймов задают 54 (плюс NEWPAGE=6). Вы можете устано-
вить PAGESIZE в 0, чтобы подавить все заголовки, прерывания стра-
ниц, начальные пустые строки и другую информацию для форматирова-
ния.
PAU[SE] {OFF | ON | текст}
Позволяет управлять скролированием на терминале во время выполнения
отчета. Вы должны нажать [Return] или [Clear] после каждой паузы.
ON заставляет SQL*PLUS создавать паузу перед выводом каждой страни-
цы отчета. Текст определяет сообщение SQL*PLUSа во время паузы.
Текст с пробелами необходимо заключать в одиночные кавычки. Можно
использовать терминальные escape последовательности в команде
PAUSE; т.е. можно вывести сообщение в инверсном режиме и т.д.
RECSEP {WR[APPED] | EA[CH] | OFF} и RECSEPCHAR { |c}
Выводит или печатает разделитель записей. Разделитель записей сос-
тоит из одной строки, в которой символ "c" повторяется LINESIZE
раз. RECSEPCHAR описывает символ разделения записей. По умолчанию-
это пробел.
RECSEP сообщает SQL*PLUS, где необходимо отбражать разделение запи-
сей. Например, если RECSEP WRAPPED, то SQL*PLUS выведет разделитель
записей только после свернутой строки; если RECSEP EACH, то разде-
-- 165 --
литель будет выводиться после каждой записи. Если вы установите
RECSEP в OFF, то SQL*PLUS не будет выводить символ разделитель за-
писей.
SCAN {OFF | ON}
OFF запрещает обработку подстановки переменных и параметров; ON-
разрешает.
SHOW[MODE] {OFF | ON}
Управляет выводом старого и нового значения системных переменных
SQL*PLUS, когда вы их изменяете командой SET.
SPA[CE] {1 | n}
Устанавливает количество пробелов между столбцами при выводе. Мак-
симальное значение n равно 10.
SQLC[ASE] {MIX[ED] | LO[WER] | UP[PER]}
Переводит регистр команд SQL или блоков PL/SQL перед выполнением.
SQL*PLUS переводит весь текст команды, включая литералы в кавычках,
следующим образом:
* верхний регистр, если SQLCASE=UPPER
* нижний регистр, если SQLCASE=LOWER
* без изменения, если SQLCASE=MIXED
SQLCASE не изменяет содержимое буфера SQL.
SQLCO[NTINUE] {> | текст}
Устанавливает последовательность символов, выводящихся в качестве
подсказки для продолжения командной строки SQL*PLUS (для продолже-
ния используют символ переноса "-").
SQLN[UMBER] {OFF | ON}
ON устанавливает, что для второй и последующих строк команды SQL
подсказкой будет номер строки. OFF позволяет изменять подсказку че-
рез SQLPROMPT.
SQLPRE[FIX] {# | c}
Устанавливает символ префикса SQL. В то время, как вы выводите ко-
манду SQL*PLUS за подсказкой SQL>, вы можете на отдельной строке,
которой предшествует символ префикса SQL, ввести команду SQL. SQL
будет выполнять команду SQL, независимо от того, что введена коман-
да SQL*PLUS.
SQLP[ROMPT] {SQL> | текст}
Устанавливает командную подсказку SQL*PLUS.
SQLT[ERMINATOR] {; | c | OFF | ON}
Устанавливает символ, использующийся для завершения команды SQL.
OFF означает, что отменяются все символы окончания команды SQL;
пользователь заканчивает команду SQL, вводом пустой строки. ON ус-
танавливает символ окончания в значение по умолчанию (;).
SUF[FIX] {SQL | текст}
Устанавливает использующееся по умолчанию расширение имени файла,
которое SQL*PLUS использует в командах, ссылающиеся на командные
файлы. SUFFIX не влияет на расширение файла для вывода (при буфери-
зации).
-- 166 --
TAB {OFF | ON}
OFF заставляет SQL*PLUS использовать символ табуляции для формати-
рования абзаца в выходных данных. ON заставляет SQL*PLUS использо-
вать для этого пробелы. Значение для TAB по умолчанию является сис-
темно-зависимым.
Введите SHOW TAB для того, чтобы посмотреть значение по умолчанию
для вашей системы.
TERM[OUT] {OFF | ON}
OFF запрещает отображение выходных данных, генерируемых командами,
выполняющимися из файла, в результате чего вывод может быть буфери-
зован без вывода экран. ON разрешает отбражение выходных данных.
TERMOUT OFF не влияет на вывод команд введенных интарактивно.
TI[ME] {OFF | ON}
ON заставляет SQL*PLUS отображать текущее время перед каждой ко-
мандной подсказкой. OFF запрещает вывод времени.
TIMI[NG] {OFF | ON}
Управляет выводом временной статистики. ON выводит временную ста-
тистику по каждой выполненой команде SQL или блоку PL/SQL. OFF зап-
рещает вывод. Информацию о SET TIMING ON смотри в руководстве по
установке пользователя и в руководстве пользователя по вашей опреа-
ционной системе.
TRIM[OUT] {OFF | ON}
Определяет, как выводит SQL*PLUS конечные пробелы в конце каждой
строки. ON удаляет пробелы в конце каждой строки, улучшая характе-
ристики при взаимодествии с ORACLE через медленные устройства. OFF
разрешает отображение завершаюших пробелов. TRIMOUT ON не привязан
к буферному выводу; он игнорируется, если не установлен SET TAB ON.
UND[ERLINE] {- | c | OFF | ON}
"c" устанавливает символ, использующийся для подчеркивания заголов-
ков столбцов в отчетах SQL*PLUS. ON/OFF включает/выключает подчер-
кивание, независисмо от значения "c".
VER[IFY] {OFF | ON}
ON заставляет SQL*PLUS выводить текст командной строки до и после
замещения указателей подставляемых переменных действительными вели-
чинами. OFF отменяет вывод.
WRA[P] {OFF | ON}
OFF отсекает отображаемые элементы данных, если их длина больше ши-
рины текущей строки. ON разрешает элементам данных "переноситься"
на следующую строку.
Используйте фразы WRAPPED и TRUNCATED команды COLUMN, чтобы отме-
нить установки WRAP для описанных столбцов.
SQL*PLUS поддерживает системные переменные (их также называют переменны-
ми команды SET), которые позволяют настраивать окружение SQL*PLUS в дан-
ном сеансе. Можно изменять их значения командой SET и смотреть их теку-
щие значения командой SHOW.
-- 167 --
Замечание: SET TRANSACTION READ ONLY является командой SQL; смотри спра-
вочное руководство по языку SQL.
Примеры: Рассмотрим несколько примеров использования переменных команды
SET.
COMPATIBILITY:
Чтобы выполнить командный файл, SALARY.SQL, созданный для вер-
сии 5 ORACLE, введите:
SQL> SET COMPATIBILITY V5
SQL> START SALARY
После выполнения файла, восстановим режим эмуляции в V6:
SQL> SET COMPATIBILITY V6
Вы можете добавить команду SET COMPATIBILITY V5 в начало ко-
мандного файла, и восстановить эмуляцию в конце командного фай-
ла SET COMPATIBILITY V6.
ESCAPE:
Если вы задали escape-символ равным "!", то
SQL> ACCEPT v1 PROMPT 'Enter !&1:'
выведет следующую подсказку:
Enter &1:
HEADING:
Для подавления вывода заголовков столбцов в отчете, введите:
SQL> SET HEADING OFF
Если вы после этого выполните SQL команду SELECT,
SQL> SELECT ENAME, SAL FROM EMP
2 WHERE JOB = 'CLERK';
то получите следующие результаты:
ADAMS 1100
JAMES 950
MILLER 1300
LONG:
Чтобы установить максимальную ширину выводимых и копируемых
LONG-значений равной 500, введите:
SQL> SET LONG 500
LONG-данные будут свернуты при выводе на терминал; SQL*PLUS бу-
дет обрезать данные длинее 500 символов.
-- 168 --
SQLCONTINUE:
Чтобы установить подсказку продолжения команд SQL*PLUS равной
восклицательному знаку и пробелу, введите:
SQL> SET SQLCONTINUE '! '
SQL*PLUS будет выдавать новыю подсказку для строк-продолжений:
SQL> TTITLE 'YEARLY INCOME' -
! RIGHT SQL.PNO SKIP 2 -
! CENTER 'PC DIVISION'
SQL>
SUFFIX:
Чтобы установить расширение для командных файлов по умолчанию
равным UFI, введите:
SQL> SET SUFFIX UFI
Если вы введете
SQL> GET EXAMPLE
То SQL*PLUS будет искать файл EXAMPLE.UFI вместо EXAMPLE.SQL
Смотри также: команды, меню.
@/
/@
SHOW
SHO[W] опция
Команда SHOW выводит значения системных переменных SQL*PLUS.
опция есть одна из следующих фраз:
системная_переменная
ALL
BTI[TLE]
LNO
PNO
REL[EASE]
SPOO[L]
SQLCODE
TTI[TLE]
USER
системная_переменная
Любая системная, установленная командой SET.
ALL
Выводит установки для всех опций SHOW.
BTI[TLE]
Показывает текущее определение BTITLE.
-- 169 --
LNO
Показывает текущий номер строки (позиция на текущей странице дисп-
лея или буферизованного вывода).
PNO
Показывает текущий номер страницы.
REL[EASE]
Показывает номер реализации ORACLE RDBMS, с которым работает
SQL*PLUS.
SPOO[L]
Показывает, является ли текущий вывод буферизованным.
SQLCODE
Показывает значение SQL.SQLCODE (код возврата последней выполненой
команды)
TTI[TLE]
Показывает текущее определение TTITLE.
USER
Показывает имя пользователя, с которым вы подключились к SQL*PLUS.
Чтобы посмотреть текущее значение LINESIZE, введите:
SQL> SHOW LINESIZE
Если текущее значение переменной равно 80, SQL*PLUS выдаст следующее:
linesize 80
Смотри также: команды, меню.
@/
/@
SPOOL
SPO[OL] [имя_файла[.расширение] | OFF | OUT
Команда SPOOL сохраняет результаты запросов в файле операционной системы
и, обычно, посылает данный файл на принтер. Также показывает текущее
состояние буферизации.
имя_файла[.расширение]
Задает имя файла, в который будет производиться буферизация отобра-
жаемых выходных данных. Если вы не указали расширение, SPOOL ис-
пользует расширение по умолчанию (LST или LIS в большинстве сис-
тем).
OFF
Заставляет SQL остановить буферизацию.
OUT
Останавливает буферизацию и посылает файл на принтер.
-- 170 --
Введите SPOOL без параметров, чтобу вывести текущее состояние буфериза-
ции.
Чтобы буферировать вывод генерируемый командами из командного файла без
отображения его на экране, используйте SET TERMOUT OFF. SET TERMOUT OFF
не влияет на вывод команд, введенных интерактивно.
Примеры: Чтобы начать запись отображаемых данных в файл с именем DIARY,
введите:
SQL> SPOOL DIARY
Чтобы закрыть и распечатать файл, введите:
SQL> SPOOL OUT
Смотри также: команды, меню.
@/
/@
SQLPLUS
SQLPLUS [[-S[ILENT]] [вход] [запуск]] | -?
Команда SALPLUS стартует SQL*PLUS (вводится после системного приглаше-
ния).
где:
вход
Требутся следующий синтаксис:
имя_пользователя[/пароль][@спецификация_базы] | / | /NOLOG
запуск
Позволяет вводить имя командного файла и аргументы. SQL*PLUS пере-
дает аргументы командному файлу аналогично команде START. Фраза
"запуск" задается в следующем формате:
@имя_файла[.расш] [арг1 арг2 ...]
Если вы не указали logon и задали start, SQL*PLUS подразумевает, что
первая строка командного файла содержит правильный logon. Если вы не за-
дали ни logon ни start, SQL*PLUS выдаст подсказку для ввода имени и па-
роля пользователя.
имя_пользователя[/пароль]
Задает имя и пароль пользователя, с которым вы хотите подключиться
к ORACLE. Если вы опустили эти параметры, SQL*PLUS попросит вас
ввести их. Если вы ввели наклонную черту (/) или просто нажмете
[Return] на подсказке user_name, SQL*PLUS подключит вас, используя
logon по умолчанию (см "/" ниже).
Если вы опустили только пароль, SQL*PLUS попросит вас ввести его.
Вводимый вами пароль после подсказки неотображается на экране.
Представляет logon по умолчанию (ops$). Вы не можете ввести специ-
фикацию_базы, если вы используете logon по умолчанию. По умолчанию
logon SQL*PLUS попытается подключить вас, используя имя пользовате-
ля OPS$имя, где "имя" есть ваше имя в операционной системе.
-- 171 --
/NOLOG
Заставляет стартовать SQL*PLUS, но не производить вашу регистрацию
в ORACLE. Перед выполнением любой команды, необходимо выполнить ко-
манду CONNECT с правильным logon, чтобы подключиться к ORACLE.
спецификация_базы
Состоит из SQL*NET-строки подключения. Синтаксис данной строки за-
висит от типа протокола связи вашего ORACLE. Дополнительную инфор-
мацию смотрите в руководстве по SQL*NET или спросите у администра-
тора БД.
-S[ILENT]
Подавляет все информационные и запрашивающие сообщения SQL*PLUS,
включая командную подсказку 'SQL >' и названия программ, которые
обычно отображаются во время запуска SQL*PLUS. Это используется для
того, чтобы сделать вызов SQL*PLUS другими программами невидимым
для пользователя.
-?
Заставляет SQL*PLUS отбразить номер текущей версии, а затем пере-
дать управление операционной системе. Оба знака нельзя разделять
пробелом.
SQL*PLUS может настраиваться с помощью файла параметров (profile), соз-
даваемого администратором базы. SQL*PLUS выполняет этот командный файл,
когда пользователь запускает SQL*PLUS и устанавливает связь с ORACLE.
Данный файл параметров позволяет ДБА настраивать среду по умолчанию для
все пользователей данной системы; пользователи не имеют доступа к данно-
му файлу параметров. Имя данного файла зависит от типа операционной сис-
темы. Подробнее о файле параметров смотри в руководстве по установке
ORACLE.
SQL*PLUS также поддерживает файл параметров пользователя (User Profile),
выполняемого после главного файла параметров. SQL*PLUS ищет файл с име-
нем LOGIN.SQL в вашем текущем директории. Если SQL*PLUS не обнаружит
этого файла здесь, то SQL*PLUS будет искать данный файл в директориях
заданных в пути. Некоторые операционные системы не поддерживают возмож-
ность путь-поиска. Если SQL*PLUS не обнаружит LOGIN-файл, он выведет
предупреждаюшее сообщение и продолжит процесс регистрации.
Примеры: Для запуска SQL*PLUS с именем SCOTT и паролем TIGER, введите:
SQLPLUS SCOTT/TIGER
Чтобы сделать то же самое и задать базу POLICY по умолчанию,
введите:
SQLPLUS SCOTT/TIGER@POLICY
Чтобы запустить командный SQL*PLUS и выполнить командный файл
STARTUP.SQL, введите:
SQLPLUS SCOTT/TIGER @STARTUP
Смотри также: удаленные БД, команды, меню.
@/
/@
-- 172 --
START
STA[RT] имя_файла[.расш] [арг1 арг2 ...]
Команда START выполняет указанный командный файл.
имя_файла[.расш]
Задает командный файл, который вы хотите выполнить. Этот файл со-
держит любые команды, которые вы можете выполнять интерактивно.
Если вы не указали расширение, SQL*PLUS использует расширение по
умолчанию (обычно SQL). За информацией по изменению расширения по
умолчанию обратитесь к описанию переменной SUFFIX команды SET в
данной главе.
Когда вы ввели START имя_файла.ext, SQL*PLUS будет искать данный
файл в текущем директории. Если SQL*PLUS не обнаружит данный файл,
то он повторит поиск в директориях, заданных в пути для операцион-
ной системы. Некоторые операционные системы могут не поддерживать
возможность путь-поиска.
[арг1 арг2 ...]
Определяет аргументы, передаваемые командному файлу. Если вы ввели
один или более аргументов, SQL*PLUS подставит данные значения в па-
раметры (&1,&2, ...) командного файла. Первый аргумент замещает &1,
второй замещает &2, и т.д.
Команда START присваивает параметрам значения аргументов; если вы
стартуете снова этот командный файл в данном сеансе, вы можете за-
дать новые значения или опустить аргументы, для использования ста-
рых значений.
Команда @ (знак "at") работает аналогично START, но она не позволяет пе-
редавать параметры.
Примеры: Файл с именем PROMOTE.SQL, используемый для содействия служа-
щим, может содержать следующую команду:
SELECT * FROM EMP
WHERE MGR=&1 AND JOB=&2 AND SAL>&3;
Чтобы выполнить данный командный файл, введите:
SQL> START PROMOTE 7280 CLERK 950
Затем SQL*PLUS выполнит следующую команду:
SELECT * FROM EMP
WHERE MGR=7280 AND JOB='CLERK' AND SAL>950;
Смотри также: @, define, команды, меню.
@/
/@
TIMING
TIMI[NG] [START текст | SHOW | STOP]
-- 173 --
Команда TIMING записывает данные хронометрирования о общем времени вы-
полнения команд, выводит заголовок текущей области хронометрирования и
ее данные, или выводит количество активных областей хронометрирования.
START текст
Устанавливает область
хронометрирования и
делает текст заголовком данной области. Вы можете иметь более одной
активной области хронометрирования, посредством старта дополнитель-
ной области, не остановив предыдущую область хронометрирования.
Последняя запущенная область хронометрирования становится текущей.
SHOW
Выводит заголовок текущей области хронометрирования и ее данные.
STOP
Выводит заголовок текущей области хронометрирования и ее данные,
затем удаляет данную область. Если существуют еще активные области
хронометрирования, одна из них, созданная самой последней, которая
еще не уничтожена, становится текущей. Используйте фразу TIMING в
команде CLEAR для удаления всех активных областей.
Для отображения количества активных областей хронометрирования ис-
пользуйте TIMING без параметров.
Вы можете использовать эти данные для анализа эффективности
некоторых команд или блоков PL/SQL.
За подробностями обратитесь к руководству по установке ORACLE и руко-
водству пользователя для вашей операционной системы. Смотрите команду
SET TIMING ON, для отображения текущего времени после каждой выполненной
команды или блока PL/SQL.
Примеры: Для создания области хронометрирования с именем SQL_AREA, вве-
дите:
SQL> TIMING START SQL_AREA
Для вывода заголовка текущей области хронометрирования и накоп-
ленных данных, введите:
SQL> TIMING SHOW
Для вывода заголовка текущей области хронометрирования и накоп-
ленных данных, и уничтожения данной области введите:
SQL> TIMING STOP
Смотри также: clear, show, set, start, команды, меню.
@/
/@
TTITLE
TTI[TLE] [формат [текст | переменная] ...] |
Команда TTITLE помещает и форматирует указанный заголовок вверху каждой
страницы отчета, или выводит текущее определение TTITLE.
-- 174 --
Замечание: Описание старого формата TTITLE, совместимого с UFI (пред-
шественник SQL*PLUS), смотри TTITLE(старый формат) в приложе-
нии F.
[OFF | ON]
где формат состоит из одной или нескольких следующих фраз, исполь-
зуемых для размещения и форматирования текста:
COL n
S[KIP] [n]
TAB n
LE[FT]
CE[NTER]
R[IGHT]
BOLD
FORMAT симв
Если вы не указали фразу printspec перед текстом, TTITLE выравнит текст
влево. Для вывода текущего пределения TTITLE, введите TTITLE без пара-
метров.
Описание данных терминов и фраз действительно и для команды BTITLE.
текст
Задает текст заголовка. Текст необходимо поместить в одиночные ка-
вычки, если в нем больше одного слова.
переменная
Задает пользовательскую переменную или одну из следующих системных
переменных:
* SQL.LNO (текущий номер строки)
* SQL.PNO (текущий номер страницы)
* SQL.RELEASE (текущий номер реализации ORACLE)
* SQL.SQLCODE (текущий код ошибки)
* SQL.USER (текущее имя пользователя)
Чтобы вывести одно из этих значений, используйте соотвествующее имя
в заголовке. Можно форматировать переменную фразой FORMAT.
OFF
Выключает заголовок (запрещает его вывод) не влияя на его описание.
ON
Включает заголовок (разрешает его вывод). Когда вы описали верхний
заголовок, SQL*PLUS автоматически устанавливает TTITLE в ON.
COL n
Перемещение в столбец n текущей строки. "Колонка" в данном контекс-
те означает позицию печати, но не столбец таблицы.
S[KIP] [n]
Пропуск n строк; если вы опустили n, пропускается одна строка; если
n=0, то возврат в начало текущей строки.
TAB n
Пропуск n столбцов (перемещение назад, если вы задали отридцатель-
ное число). "Колонка" в данном контексте означает позицию печати,
но не столбец таблицы.
LE[FT]
Выравнивание влево
CE[NTER]
Выравнивание по центру
R[IGHT]
Выравнивание вправо
LEFT, CENTER и RIGHT используют значение SET LINESIZE для вычисле-
ния позиции, в которую необходимо поместить данные.
BOLD
Печатает данные полужирным шрифтом. SQL*PLUS показывает полужирную
печать на терминале повторением данных на трех последовательных
строках.
FORMAT симв
Задает модель формата, которая определяет формат для последующих
элементов данных. Модель формата должна быть симольной константой,
такой как А10 или $999- но не переменной. Подробнее о моделях смот-
ри COLUMN FORMAT.
Если тип данных модели формата не соответствует типу элемента дан-
ных, фраза FORMAT не оказывает влияния на данный элемент.
Если данное несоответсвие обнаружено, то SQL*PLUS печатает числовые
значения, используя формат по умолчанию для числовых значений или
формат заданный фразой SET NUMFORMAT. Данные типа DATE выводятся в
формате по умолчанию.
SQL*PLUS интерпретирует TTITLE в новом формате, если допустимая фраза
printspec (LEFT, SKIP, COL, и т.д.) следует непосредственно за именем
команды. Смотри описание COLUMN NEW_VALUE для печати столбцов и дат в
верхнем заголовке.
Вы можете использовать любое количество констант и переменных в
printspec. SQL*PLUS будет выводить константы и переменные в указанном
вами порядке, позиционируя и форматируя каждую константу и переменную в
соответсвии с предшествующей фразой printspec.
Примеры: Чтобы определить верхний заголовок: "Данные месяца" выравненным
влево, дату по центру и справа номер страницы, и вывести "В ты-
сячах" полужирным шрифтом в центре следующей строки, введите:
SQL> TTITLE LEFT 'Данные месяца' CENTER '11 Mar
88' -
> RIGHT 'Стр:' FORMAT 999 SQL.PNO SKIP CENTER
BOLD -
> 'В тысячах'
В результате будет следующий заголовок:
Данные месяца 11 Mar 88
Стр: 1
В тысячах
Чтобы подавить вывод заголовка без изменения его описания, вве-
дите:
SQL> TTITLE OFF
Смотри также: btitle, set, команды, меню.
@/
/@
UNDEFINE
UNDEF[INE] переменная
Команда UNDEFINE уничтожает переменную пользователя, которую вы создали
явно (командой DEFINE) или неявно (с помощью аргументов команды START).
переменная
Имя переменной пользователя, которую вы хотите удалить.
Примеры: Для удаление переменной с именем POS, введите:
SQL> UNDEFINE POS
Смотри также: define, start, @, команды, меню.
@/
|