ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.







Построчные символьные функции.

 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, @, команды, меню.
@/

KOAP Open Portal 2000