






                                 SQL*PLUS

                         РУКОВОДСТВО И СПРАВОЧНИК

                               ПОЛЬЗОВАТЕЛЯ

     версия 3.0    (SQL*PLUS  User's Guide and Reference)




                                O R A C L E
               ____________________________________________
              Система Управления Реляционными Базами Данных.









































                                    -- 1 --



                 С О Д Е Р Ж А Н И Е

Часть 1          Элементы SQL*PLUS
Глава 1          Введение
                 Обзор SQL*PLUS
                   Основные концепции
                   Кто может использовать SQL*PLUS
                   Другие способы работы с СУРБД ORACLE

                 Использование данного руководства
                   Соглашения по синтаксису команд
                   Примеры таблиц

                 Что нужно для выполнения SQL*PLUS
                   Оборудование и программное обеспечение
                   Специальная информация для вашей ОС
                   Имя пользователя и пароль
                   Доступ к таблицам-примерам

Глава 2          Изучение основ SQL*PLUS
                 Введение
                   Использование клавиатуры
                   Вход в SQL*PLUS
                   Выход из SQL*PLUS
                 Ввод и выполнение команд
                   Выполнение команд SQL
                   Выполнение блоков PL/SQL
                   Выполнение команд SQL*PLUS
                   Переменные влияющие на выполнение команд
                   Автоматическое сохранение изменений в БД
                   Прерывание команды во время ее выполнения
                   Сбор временной статистики по выполняемой команде
                   Выполнение команд инструментальной ОС
                   Выполнение форм SQL*FORMS

                 Получение Помощи
                   Распечатка описания таблиц
                   Управление дисплеем
                   Интерпретация сообщений об ошибках

Глава 3          Манипулирование командами
                 Редактирование команд
                   Распечатка содержимого буффера
                   Редактирование текущей строки
                   Добавление новой строки
                   Добавление Текста к строке
                   Удаление строки
                   Редактирование команд системным редактором

                 Сохранение команд для более позднего использования
                   Запись команд в командные файлы
                   Помещение комментариев в командный файл
                   Выборка командного файла
                   Выполнение командных файлов
                   Вложенность командных файлов
                   Изменение командных файлов
                   Выход из командного файла с кодом возврата
                   Установка вашего окружения SQL*PLUS

                                    -- 2 --



                 Написание интерактивных команд
                   Определение переменных пользователя
                   Использование переменных при подстановке
                   Передача параметров через команду START
                   Связь с пользователем

Глава 4          Форматирование результатов запроса
                 Форматирование колонок
                   Изменение заголовков колонок
                   Форматирование колонок типа NUMBER
                   Форматирование колонок типа CHAR,LONG,DATE
                   Копирование атрибутов колонки
                   Печать и сброс атрибутов колонки
                   Подавление и восстановление атрибутов колонки
                   Печать строки символов после свертки содержимого колонки

                 Улучшение вашего отчета с помощью пустых и итоговых строк
                   Подавление дублирующих значений в колонках прерывания
                   Подстановка пробелов когда изм значение колонки прерывания
                   Подстановка пробелов после каждой строки
                   Использование техники составных пробелов
                   Печать и удаление описаний прерываний
                   Вычисление итоговой строки когда изменяется значение колонки 
                   Вычисление итоговой строки в конце отчета
                   Вычисление составных итоговых значений и строк
                   Печать и удаление описаний COMPUTE

                 Описание заголовков и размерностей страниц
                   Установка заголовков начала и конца
                   Вывод номера страницы и других системных значений в
                   заголовках
                   Печать, Подавление и Восстановление описаний заголовков
                   страниц
                   Вывод значений колонок в заголовках
                   Вывод текущей даты в заголовках
                   Установка размерностей страницы
                 Сохранение и печать результатов запроса
                   Запись  результатов в файл
                   Запись  результатов на принтер

Глава 5          Доступ к Базе Данных

                 Подключение к БД по умолчанию
                 Подключение к удаленной БД
                   Подключение к удаленной БД "внутри" SQL*PLUS
                   Подключение к удаленной БД запускается SQL*PLUS
                 Копирование данных из одной БД в другую
                   Понимание синтаксиса команды COPY
                   Управление обращением из целевой таблицы
                   Интерпретация сообщений команды COPY
                   Определение других таблиц пользователя
                 Копирование данных между таблицами одной БД

Часть 2          СПРАВОЧНИК
Глава 6          Справочник Команд
Приложение А     Сообщения об ошибках команды COPY
Приложение В     Расширенные возможности версии 3.0
Приложение C     Ограничения SQL*PLUS

                                    -- 3 --



Приложение D     Список команд SQL
Приложение Е     Ограничение привилегий пользователя в SQL*PLUS
Приложение F     Команды SQL*PLUS ранних версий
                 Глоссарий

ЧАСТЬ I       Элементы SQL*PLUS
Глава 1                            Введение

          Эта глава знакомит вас с SQL*PLUS с помощью следующих тем:

- обзор программ SQL*PLUS
- описание основных концепций
- объяснение, кто может использовать SQL*PLUS
- описание других программ, которые можно использовать с СУРБД ORACLE
- соглашения по синтаксису команд используемые в данном руководстве
- примеры таблиц, которые вы будете использовать
- оборудование, программное обеспечене, информация необходимая вам для 
  выполнения SQL*PLUS

     Обзор SQL*PLUS
Вы можете использовать программу SQL*PLUS совместно с языком БД SQL и его 
процедурно языковым расширением, PL/SQL. Язык БД SQL позволяет запоминать и 
выбирать данные из СУРБД Oracle Corporation, ORACLE RDBMS.  PL/SQL позволяет 
соединять команды SQL в логические процедуры.

SQL*PLUS позволяет вам манипулировать командами SQL и блоками PL/SQL, и также
выполнять много дополнительных задач. С помощью SQL*PLUS вы можете:
     - вводить, редактировать, запоминать, выбирать и выполнять команды SQL и
       блоки PL/SQL
     - форматировать, выполнять вычисления, запоминать и печатать результаты
       запросов в форме отчетов
     - печатать описания колонок для каждой таблицы
     - иметь доступ и возможность копирования данных между БД SQL
     - посылать сообщения и принимать ответ от конечных пользователей

Основные Концепции        Приведем основные понятия SQL*PLUS:
command   Команда, которую вы передаете SQL*PLUS или ORACLE RDBMS.
block     Группа команд SQL или PL/SQL связанных вмете процедурной логикой.
table     Основная единица сохраняемой информации в ORACLE RDBMS.
query     Команда SQL, которая выбирает информацию из одной или более таблиц.

query results Данные выбранные с помощью запроса.
report        Результаты запроса отформатированные вами командами SQL*PLUS.

     Кто может использовать SQL*PLUS
Язык команды SQL*PLUS, SQL, PL/SQL является достаточно мощным чтобы обслуживать 
опытных пользователей БД, однако слишком прямолинейным для новичков изучающих 
ORACLE RDBMS.

Программировать на SQL*PLUS очень легко и удобно.  Например, чтобы колонке с 
именем ENAME в БД понятный заголовок "Employee" (служащий), вы можете ввести 
следующую команду:

        COLUMN ENAME HEADING EMPLOYEE

Аналогично, чтобы распечатать описания колонок таблицы EMP, можно использовать 
команду:
        DESCRIBE EMP

                                    -- 4 --



     Другие средства работы СУРБД ORACLE
     Корпорация ORACLE предоставляет множество программ которые с позволяют
     вам работать с СУРБД ORACLE, а именно:

SQL*ReportWriter    Позволяет получать многообразные и качественные отчеты.

SQL*Forms      Предоставляет прекрасное средство основанное на формах для
               создание, сопровождения и выполнения приложений.

ORACLE for 1-2-3    Предоставляет пользователям Lotus 1-2-3 доступ к данным
                    RDBMS ORACLE.

SQL*QMX        Предоставляет вам IBM QMX совместимый интерфейс к ORACLE, 
               обеспечивающий возможность запроса по образцу вместе с 
               возможностью интерактивного ввода команд SQL.

Easy*SQL       Предоставляет незапланированный
интерфейс      к ORACLE, который не требует знания SQL, а вместо него 
               использует систему меню, панелей, блоков. Easy*SQL предоставляет 
               графические возможности, незапланированные запросы, простейшие 
               запросы, простейший ввод данных.

SQL*Graph      Позволяет делать отчеты в графической

     Как использовать  данное руководство

Данное руководство описывает SQL*PLUS, который не зависит от типа ОС.  
Некоторые аспекты SQL*PLUS, тем неменее, зависят от ОС. Эти детали приводятся в 
руководстве по инсталяции ORACLE для вашей операционной системы.  Используйте 
это руководство зависящее от типа ОС совместно с "Руководство и Справочник 
Пользователя по SQL*PLUS".

Повсюду в данном руководстве, примеры используют общий синтаксис команд и
общий набор таблиц-примеров. Эти вопросы описываются ниже. Вы найдете
соглашения по синтаксису команд особенно полезными, когда будете ссылаться к
справочной части данного руководства.

  Соглашения по Следующие две таблицы описывают соглашения по синтаксису команд 
синатксису используемые в данном руководстве команд

Таблица 1-2         Возможность      Пример   Пояснение
Пунктуация
___________________________________________________________
Верт черта       │        Разделяет альтернативные элементы, которые
                          м.б. обязательными или нет.

скобки       [OFF│ON]     Один или более необязательных элементов. Если
                          надо, можно ввести один из элементов.

фигурные     {OFF│ON}     Альтернативы обязательного скобки параметра;
                          вводится один из элементов разделенных │.
                          Не вводите скобки или │.

подчеркивание {OFF│ON}    Значение по умолчанию; Если значение не задается,
                          то выбирается данная величина.

три точки   n,n,...  Предшествующее значение может повторяться несколько раз.


                                    -- 5 --



     Таблицы-примеры     Большинство концепций и операций данного руководства
демонстрируется с помощью набора таблиц-примеров. Эти таблицы содержат записи
о персонале фиктивной компании.  Когда вы выполняете упражнения данного
руководства, представьте себе, что вы директор персонала данной компании.

Упражнения используют информацию из двух таблиц:
EMP        Содержит информацию о служаших данной компании.
DEPT      Содержит информацию об отделах компании.

На рисунках 1-1 и 1-2 на следующей странице показана инфомация, содержащаяся
в этих таблицах.

Рис. 1-1
Таблица EMP    EMPNO ENAME  JOB          MGR HIREDATE    SAL  COMM DEPTNO
          ----- ------ --------- ---- --------- ---------
           7369 SMITH  CLERK     7902 17-DEC-80       800  20
           7499 ALLEN  SALESMAN  7698 20-FEB-81      1600  300     30
           7521 WARD   SALESMAN  7698 22-FEB-81      1250  500     30
           7566 JONES  MANAGER   7839 02-APR-81      2975   20
           7654 MARTIN SALESMAN  7698 28-SEP-81      1250  1400     30
           7698 BLAKE  MANAGER   7839 01-MAY-81      2850    30
           7782 CLARK  MANAGER   7839 09-JUN-81      2450    10
           7788 SCOTT  ANALYST   7566 09-DEC-82      3000    20
           7839 KING   PRESIDENT      17-NOV-81      5000    10
           7844 TURNER SALESMAN  7698 08-SEP-81      1500     0     30
           7876 ADAMS  CLERK     7788 12-JAN-83      1100    20
           7900 JAMES  CLERK     7698 03-DEC-81       950    30
           7902 FORD   ANALYST   7566 03-DEC-81      3000    20
           7934 MILLER CLERK     7782 23-JAN-82      1300    10
Рис. 1-2
Таблица DEPT   DEPTNO  DNAME          LOC
               ------- -------------- -----------
               10      ACCOUNTING     NEW YORK
               20      RESEARCH       DALLAS
               30      SALES          CHICAGO
               40      OPERATIONS     BOSTON

Что вам необходимо для выполнения SQL*PLUS

   Для запуска SQL*PLUS, вам необходимо иметь аппаратуру, программное 
обеспечение(ПО), информацию зависящую от типа ОС, имя-пользователя и пароль, и 
доступ к одной или более таблицам.

Аппаратура и ПО
  Компьютер, на котором вы работаете с ORACLE и SQL*PLUS, называется рабочей
ЭВМ. ORACLE и SQL*PLUS могут функционировать на многих типах ЭВМ.

ОС вашей ЭВМ управляет машинными ресурсами и средствами, аппаратурой и 
программами. Разные компьютеры используют разные операционные системы. За 
информацией о ОС вашей ЭВМ обрашайтесь к документации поставляемой с 
компьютером.

До того как вы начнете использование SQL*PLUS, оба продукта ORACLE и SQL*PLUS 
д.б. инсталированы. Если на вашей рабочей ЭВМ работает много пользователей, то 
ваша организация должна иметь администратора БД (называется ДБА), который 
диспетчирует использование ORACLE RDBMS.



                                    -- 6 --



  ДБА способен инсталировать ORACLE и SQL*PLUS на вашей системе. Если вы
выступаете в роли ДБА, смотрите инструкции по инсталяции ORACLE RDBMS и
SQL*PLUS для вашей ОС.

        Информация зависящая от вашей ОС
Некоторые аспекты ORACLE и SQL*PLUS зависят от вида ЭВМ и типа ОС.  Эти вопросы 
обсуждаются в руководстве по инсталяции ORACLE и руководстве пользователя.

Сохраните копии вашего руководства по инсталяции и руковоства пользователя
доступными для справочного обращения пока вы работаете с данным документом.
При необходимости, мы будем отсылать вас к этим документам.

        Имя и пароль пользователя
  Когда вы запускаете SQL*PLUS, вам необходимо указать имя пользователя,
который идентифицирует вас как зарегистрированного пользователя ORACLE, и
пароль, который соответсвует вашему имени.

        Многопользовательские системы
Если на вашей ЭВМ работает несколько человек, то ваш ДБА может устанавливать 
пароли и имена. Вам также потребуются системные имя и пароль для входа в ОС. 
Эти параметры могут совпадать (или нет) с именем и паролем для SQL*PLUS.

        Однопользовательские системы
  Если ваша ЭВМ работает в однопользовательском режиме, то предполагается,
что вы можете исполнять функции ДБА сами. В этом случае вы можете
использовать имя SCOTT и пароль TIGER. Или, если вы хотите определить свое
имя и пароль, смотрите команду SQL GRANT в справочнике по языку SQL.

        Доступ к таблицам-примерам
  Каждая таблица в БД явлется "собственностью" определенного пользователя. Вы
можете захотеть иметь копии таблиц-примеров, чтобы использовать их на примерах 
данного руководства. Для их получения выполните командный файл DEMOBLD 
поставляемый фирмой ORACLE (выполнять в рамках ОС, но не из SQL*PLUS).

Замечание: DEMOBLD создает новый SQL*PLUS стартовый (LOGIN) файл.  Смотрите
подраздел "Установка окружения SQL*PLUS" в "Сохранение команд для дальнейшего
использования" в главе 3, если вы хотите сохранить свой старый LOGIN файл.
Заметим, что LOGIN файл для SQL*PLUS и LOGIN файл для ОС - это разные вещи.

Когда таблицы-примеры больше не понадобятся, их можно удалить, выполнив
командный файл DEMODROP. За информацией по использованию командных файлов
DEMODROP и DEMOBLD обратитесь к руководствам по инсталяции и пользователя для
вашей ОС.
















                                    -- 7 --



     ЧАСТЬ 2     ОБУЧЕНИЕ ОСНОВАМ SQL*PLUS

Данная глава поможет вам овладеть основами использования SQL*PLUS, здесь
рассматриваются следующие темы:

 - использование клавиатуры
 - вход и выход из SQL*PLUS
 - выполнение команд SQL, блоков PL/SQL, команд SQL*PLUS
 - объяснение переменных, которые воздействуют на выполняемые команды
 - автоматическое сохранение изменений в БД
 - прерывание команды во время ее выполнения
 - сбор временной статистики по командам, которые вы выполняете
 - выполнение команд ОС и форм SQL*FORMS
 - печать описания таблиц
 - управление дисплеем
 - интерпретация сообщений об ошибках

Читайте эту главу сидя за компьютером, и проверяете описанные примеры. Перед
началом работы убедитесь, что вы имеете доступ к таблицам-примерам описанным
в главе 1.

     Введение
Перед тем как использовать SQL*PLUS, вы должны ознакомиться функциями
различных клавиш на клавиатуре и как входить и покидать SQL*PLUS.

     Использование клавиатуры
SQL*PLUS назначает специальные значения для различных клавиш на вашей
клавиатуре. Таблица 2-1 перечисляет эти клавиши.

Так как клавиатуры на разных компьютерах имеют различное расположение и имена
для этих клавиш, данное руководство описывает клавиши посредством функций,
которые они выполняют. В руководстве по инсталяции приведен перечень
соответсвующих клавиш на клавиатуре для вашей ЭВМ.

Заполните бланк таблица 2-1 именами соответствующих клавиш на клавиатуре.
Затем найдите каждую клавишу на клавиатуре.

Таблица 2-1     Специальные клавиши  SQL*PLUS и их функции
Имя клавиши         Имя клавиши
SQL*PLUS       на клавиатуре  Функция
───────────────────────────────────────────────────────────
[Return]       ___ Конец вводимой строки
[Backspace]    ___ Стирание символа слева от курсора (исправление ошибки)
[Pause]        ___ Приостановить выполнение программы и вывод на дисплей
[Resume]       ___ Возобновить выполнение программы и вывод на дисплей [Pause]
[Cancel]       ___ Остановить выполнение программы; возврат в SQL*PLUS
[Interrupt]    ___ Выход из SQL*PLUS и возврат в рабочую ОС

Запуск SQL*PLUS     Сейчас, когда вы узнали важнейшие клавиши на клавиатуре,
                    вы готовы к запуску SQL*PLUS.

Пример 2-1          Данный пример демонстрирует запуск SQL*PLUS.
Запуск SQL*PLUS

1. Убедитесь, что на вашей ЭВМ установлен ORACLE RDBMS.
2. Включите компьютер (если он выключен) и осуществите вход в систему (если
   это необходимо). Если вы уже работаете на компьютере, вам не надо выходить
   из системы или перезагружать ее.

                                    -- 8 --



   Вы должны убедиться в наличии слева подсказки ОС, которая сигнализирует,
   что ОС готова к приему команды.  В данном руководстве подсказка ОС будет
   обозначаться знаком доллара ($). На вашем компьютере м.б. иная подсказка.

3. Введите команду SQL*PLUS и нажмите [Return].  Это команда ОС стартующая
   SQL*PLUS.

  Замечание:  Некоторые ОС ожидают, что вы введете команду на нижнем регистре

   $ SQLPLUS

   SQL*PLUS покажет номер своей версии, дату, информацию об авторском праве,и
  подсказку для ввода имени пользователя:

   SQL*PLUS: Vershion 3.0.3- Products on Fri Jan 20 09:39:26 1989
   Copyright (c) ORACLE Corporation 1979, 1988.  All right reserved.
   Enter user-name:

4. Введите ваш имя-пользователя и нажмите [Return]. SQL*PLUS высветит
   подсказку "Enter password:".

5. Введите ваш пароль и нажмите [Return] снова.  Для обеспечения защиты, ваш
   пароль не отображается на экране.

   Процесс ввода вашего имени и пароля, называется логированием. SQL*PLUS
  покажет версию ORACLE к которой вы подключились и версии доступных пакетов
  (например PL/SQL)

        Затем, SQL*PLUS покажет командную подсказку SQL*PLUS:
        SQL>
        Командная подсказка показывает, что SQL*PLUS готов к приему ваших
        команд.

Если SQL*PLUS не стартовал, вы должны посмотреть сообщение и разобраться
в ошибке. За подробной информацией, обращайтесь к "Руководству сообщений
по ошибкам ORACLE", или к "Руководству сообщений по ошибкам вашей ОС".

Сокращенный запуск
SQL*PLUS       Когда вы запускаете SQL*PLUS, можно ввести ваше имя и пароль,
               разделив их знаком "/", следом за командой SQLPLUS. Например,
               если ваше имя SCOTT и пароль TIGER, можно ввести

               $ SQLPLUS SCOTT/TIGER

               и нажать [Return]. Вы также можете сделать автоматическое
               логирование в SQL*PLUS, когда вы входите в ОС. За более
               детальной информацией обращайтесь к руководствам по инсталяции
               и пользователя.

Выход из SQL*PLUS Когда вы закончите работу с SQL*PLUS, и хотите выйти в ОС,
введите команду EXIT.

Пример 2-2 Выход из SQL*PLUS Для выхода из SQL*PLUS введите команду EXIT после 
           командной подсказки SQL*PLUS:

SQL> EXIT
SQL*PLUS покажет версии своих программных среств, а затем вы сразу увидите
подсказку ОС.

                                    -- 9 --



     Ввод и Выполнение Команд

Курсор на вашем компьютере, или указатель (обычно символ подчеркивания или
косая черта или прямоугольник) появляется после командной подсказки. Курсор
указывает место на экране, в котором появится следующий введенный вами
символ.

Чтобы сообщить SQL*PLUS, что делать, просто введите команду. Обычно, слова в
команде отделяются друг от друга пробелом или табуляцией.  Если вы хотите
сделать ваши команды более читабельными, можно вставлять между словами
дополнительные пробелы или табуляции.

Вы можете вводить команды большими или маленькими буквами.  Для удобства, имена 
всех таблиц, колонок, команд в данном руководстве обозначаются большими 
буквами.

Вы можете вводить 3 типа команд в SQL*PLUS:
     - команды SQL, для работы с информацией в БД
     - блоки PL/SQL, также для работы с информацией в БД
     - команды SQL*PLUS, для форматирования результатов запроса, установки
       параметров, редактирования и запоминания команл SQL и блоков PL/SQL

Способ, которым вы продолжаете команду на дополнительных строках, заканчиваете 
команду, или выполняете команду, зависит от типа команды которую вы хотите 
ввести и выполнить. После того, как вы ввели команду и приказали SQL*PLUS ее 
выполнить, SQL*PLUS обрабатывает команду и выводит командную подсказку снова, 
указывая , что вы можете вводить другую команду.

     Выполнение команд
     SQL*PLUS       Язык команд SQL позволяет вам манипулировать
     данными в БД.  За подробной информацией по командам SQL обращайтесь к
                    руководству и справочнику по языку SQL.

      Пример 2-3
   В этом примере вы будете вводить и выполнять команду SQL, для показа
номера служащего, имени, работы и оклада для каждого служащего в таблице EMP.

 1. После командной подсказки введите первую строку команды

    SQL> SELECT EMPNO, ENAME, JOB, SAL

    Если вы ошиблись, используйте [Backspace] для стирания ошибки и ввода
    снова. Когда вы закончите, нажмите [Return] для перехода к следующей
    строке.  2. SQL*PLUS покажет "2", подсказку для ввода 2-й строки.
    Введите вторую строку команды:

 2  FROM EMP WHERE SAL < 2500;
    Точка с запятой (;) означает конец команды.  Нажмите [Return]. SQL*PLUS
    обработает команду и высветит результаты на экране:
         EMPNO ENAME      JOB           SAL
    ---------- ---------- --------- -------
          7369 SMITH      CLERK         800
          7499 ALLEN      SALESMAN     1600
          7521 WARD       SALESMAN     1250
          7654 MARTIN     SALESMAN     1250
          7782 CLARK      MANAGER      2450
          7844 TURNER     SALESMAN     1500


                                    -- 10 --



          7876 ADAMS      CLERK        1100
          7900 JAMES      CLERK         950
          7934 MILLER     CLERK        1300

    9 records selected
    SQL>

    После показа результатов и количества выбранных записей, SQL*PLUS выводит
    снова командную подсказку.  Если вы сделали ошибку и не получили
    результатов, введите команду снова.

    Заголовок может повториться, в зависимости от установки системной
    переменной PAGESIZE. Или вы увидите сообщение относящееся к числу
    выбранных записей, в зависимости от от установки системной переменной
    FEEDBACK.  Описание системных переменных будет дано в этой главе позднее
    в разделе "Переменны влияющие на выполнение команд."

     Изучение синтаксиса команд SQL*PLUS

   SQL*PLUS имеет синтаксические правила, которые управляют процессом сборки
слов в команды. Мы должны следовать им, чтобы вводимые нами команды правильно
выполнялись.

Деление команд SQL на отдельные строки    Вы можете делить команду SQL на
несколько строк в любых местах, но нельзя разрывать отдельные слова между
строками. Таким образом, вы можете вводить запрос примера 2-3 на одной
строке:

SQL> SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE
SAL<2500;

Или вы можете вводить запрос на нескольких строках:
SQL>  SELECT
   2 EMPNO, ENAME, JOB, SAL
   3 FROM EMP
   4 WHERE SAL<2500;

В данном руководстве большинство команд SQL будет разделяться на пункты, один
пункт на каждой строке. В примере 2-3, например, пункты SELECT и FROM
помещаются на разных строках. Многие пользователи находят это более удобным.
Но вы можете разделять ваши команды по своему, как более удобно для вас.

Завершение команды SQL   Вы можете заканчивать команду SQL одним из трех
способов:
     - с помощью точки с запятой (;)
     - с помощью наклонной черты (/)
     - с помощью пустой строки

Точка с запятой сообщает SQL*PLUS, что вы хотите выполнить команду. Введите
точку с запятой в конце последней строки команды, как показано в примере 2-3.
После ввода точки с запятой, нажмите [Return]. SQL*PLUS обработает команду.

Если вы по ошибке нажали [Return] до ввода точки с запятой, SQL*PLUS выведет
новый номер строки для вашей команды. Чтобы выполнить команду, введите точку
с запятой и нажмите [Return] снова.




                                    -- 11 --



Наклонная черта (/) в строке также сообщает SQL*PLUS, что вы хотите выполнить
команду. Нажмите [Return] в конце последней строки команды.  SQL*PLUS выведет
новый номер строки. Введите наклонную черту и нажмите [Return] снова.
SQL*PLUS выполнит команду.

Пустая строка сообщает SQL*PLUS, что вы закончили ввод команды, но пока не
желаете ее выполнять.  Нажмите [Return] в конце последней строки команды.
SQL*PLUS подскажет вам новый номер строки.

Нажмите [Return] снова; Сейчас SQL*PLUS выведет уже свою подсказку. SQL*PLUS
не выполнит команду, но запомнит ее в памяти называемой буффер SQL.

     Буффер SQL
    Область, в которой SQL*PLUS хранит вашу последнюю введенную команду,
называется буффером SQL. Команда остается в буффере до тех пор пока вы не
введете новую команду SQL. Таким образом, если вы желаете изменить или
выполнить команду снова, вы можете это сделать без повторного ввода команды.
За более подробной информацией обратись к главе 3.

SQL*PLUS не запоминает точку с запятой или наклонную черту в буффере, которые
вы ввели для выполнения команды.

Буффер SQL является буффером по умолчанию. Вы можете назначить новый буффер,
но SQL*PLUS не требует использования множества буфферов. Везде в данном
руководстве "буффер" и "SQL буффер" являются синонимами, если другое не
оговорено.  Смотри SET BUFFER в приложении F.

        Выполнение текущей команды SQL
  Вы можете выполнить (или выполнить заново) текущую команду SQL, посредством
ввода команды RUN или командной подсказки команды "/" после командной
подсказки.  Команда RUN перед исполнением печатает содержимое буффера;
команда "/" просто выполняет команды SQL.

        Выполнение блоков PL/SQL
  Вы можете также использовать программы PL/SQL (называются блоками) для
манипулирования данными в БД. Смотри "Руководство и справочник пользователя
по PL/SQL".

Блоки PL/SQL начинаются с DECLARE, BEGIN, или имени блока. SQL*PLUS
обращается с блока PL/SQL таким же способом как и с командами SQL, кроме
точки с запятой или пустой строки, которые не оканчивают и не выпоняют блок.
Блок PL/SQL завершается точкой (.) на новой строке.

SQL*PLUS хранит блоки, которые вы ввели, в буффере SQL. Выполните текущий
блок с помощью команды RUN или "/". SQL*PLUS посылает весь блок PL/SQL к
ORACLE RDBMS для обработки. За информацией обращайтесь к"Руководство и
справочник пользователя по PL/SQL".

Вы можете вводить и выполнять блоки 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    --iis even
  6             INSERT INTO temp VALUES(i, x, 'iseven');
  7           ELSE
  8             INSERT INTO temp VALUES(i, x, 'isodd');

                                    -- 12 --



  9           END IF;
 10           x := x+100;
 11        END LOOP;
 12   END;
 13   .
SQL>  /

PL/SQL procedure successfully completed.

Когда вы выполняете блок, команды SQL внутри блока могут вести себя иначе,
чем вне блока. Смотри описание языка PL/SQL в "Руководство и справочник
пользователя по PL/SQL".

     Выполнение команд SQL*PLUS
  Вы может использовать команды SQL*PLUS для манипулирования командами SQL и
блоками PL/SQL, для форматирования и печати результатов запросов. SQL*PLUS
обрабатывает команды SQL*PLUS иначе, чем команды SQL и блоки PL/SQL. За более
подробной информацией обращайтесь к соответсвующей главе данного документа.
Для увеличения скорости ввода команд, вы можете сокращать большинство команд
SQL*PLUS до одной или нескольких букв. Сокращения для некоторых команд
SQL*PLUS описываются в главах 3,4,5. За сокращениями по всем командам
SQL*PLUS отсылаем вас к описанию команд в главе 6.

      Пример 2-4  Вод команд SQL*PLUS
  Этот пример демонстрирует, как вы можете с помощью команды SQL*PLUS
изменить формат используемый для показа колонки SAL из таблицы-примера EMP.

 1. Ввелите команду SQL*PLUS:

    SQL> COLUMN SAL FORMAT $99,999 HEADING SALARY

Если вы ошиблись, используя [Backspace] исправьте команду. Когда вы ввели
строку, нажмите [Return].  SQL*PLUS запомнит новый формат и снова выведет
командную подсказку SQL*PLUS, т.е. он снова будет готов к приему команд.

 2. Введите команду RUN для повторного выполнения последнего запроса (пример
    2-3). SQL*PLUS снова обработает запрос и выведет результаты:
    SQL> RUN
      1  SELECT EMPNO, ENAME, JOB, SAL
      2* FROM EMP WHERE SAL < 2500

         EMPNO ENAME      JOB        SALARY
    ---------- ---------- --------- -------
          7369 SMITH      CLERK        $800
          7499 ALLEN      SALESMAN   $1,600
          7521 WARD       SALESMAN   $1,250
          7654 MARTIN     SALESMAN   $1,250
          7782 CLARK      MANAGER    $2,450
          7844 TURNER     SALESMAN   $1,500
          7876 ADAMS      CLERK      $1,100
          7900 JAMES      CLERK        $950
          7934 MILLER     CLERK      $1,300

Команда COLUMN форматировала колонку SAL с помощью знака доллар ($) и запятой
(,) и присвоила ей новый заголовок. Команда RUN снова выполнила запрос из
примера 2-3, который хранится в буффере.  SQL*PLUS не запоминает команды
SQL*PLUS в буффере.


                                    -- 13 --



     Соглашение по синтаксису  команд SQL*PLUS
  Команды SQL*PLUS имеют синтаксис отличный от синтаксиса команд SQL и блоков
 PL/SQL.

Продолжение длинных команд SQL*PLUS на дополнительных строках.   Вы можете
продолжить длинные команды SQL*PLUS посредством ввода дефиса (соединительная
черта) в конце строки и нажав [Return]. Если вы хотите, вы можете ввести
пробел до ввода дефиса. SQL*PLUS выведет правую угловую скобку (>) как
подсказку для каждой дополнительной строки.

Окончание команды SQL*PLUS    Вам необязательно заканчивать команду SQL*PLUS
с помощью точки с запятой. Когда вы закончите ввод команды, вы можете сразу
нажать [Return]. Однако, если вы пожелаете, вы можете ввести точку с запятой
в конце команды SQL*PLUS.


     Переменные влияющие на выполнение  команд  переменных -
  Команда SQL*PLUS SET управляет большинством называемых системные переменные
- установка которых воздействует на способ выполнения SQL*PLUS-ом ваших команд.
  Системные переменные управляют множеством параметров внутри SQL*PLUS,
включая ширину колонок по умолчанию для вывода на экран, или показ количества
обработанных записей, или длину страницы. Системные переменные также называют
переменнными команды SET.

Примеры данного руководства используют системные переменные установленные по
умолчанию. В зависимости от установки ваших системных переменных, выводимые 
данные в примерах могут отличаться от того, что приводится в данном документе. 
(Ваши установки могут отличаться от значений по умолчанию, если вы имеете 
SQL*PLUS LOGIN файл).

Подробности о системных переменных и их значениях по умолчанию смотри главу 6. 
Подробности о файле LOGIN для SQL*PLUS смотри в подразделе "Установка окружения 
SQL*PLUS" раздела "Сохранение команд для последующего использования" в главе 3 
и команды SQL*PLUS в главе 6.

Чтобы распечатать текущие установки переменных команды SET, введите после
командной подсказки SHOW и имя переменной. Смотри команду SHOW в главе 6.

     Автоматическое сохранение изменений в БД.
     Благодаря командам SQL DML  UPDATE, INSERT, DELETE- которые могут
использоваться в блоках PL/SQL- вы проводите изменения в данных БД. Тем
неменее, SQL не изменяет информацию в БД пока вы не выполните команду SQL
COMMIT или команды SQL DCL или DDL, например CREATE TABLE.

Вы можете не откладывать проведение изменений в БД, пока не будет выполнена
одна из выше перечисленных команд. Возможность автоматического проведения
изменений SQL*PLUS  (autocommit) может заставить его проводить изменения в БД
после каждой команды SQL- включая INSERT, UPDATE, DELETE- и после каждого
выполненного блока PL/SQL.

Вы управляете возможностью автоматического проведения изменений SQL*PLUS с
помощью переменной AUTOCOMMIT команды SET. Она имеет следующий формат:
SET AUTCOMMIT ON      включить
SET AUTCOMMIT OFF     выключить (по умолчанию)





                                    -- 14 --



     Пример 2-5
     Включение режима    Чтобы включить режим автоматического
     автоматического     проведения изменений,  введите:
     проведения
     изменений          SQL> SET AUTCOMMIT ON

Пока вы не измените установку AUTOCOMMIT, SQL*PLUS будет автоматически
провдить изменения после каждой команды SQL или блока PL/SQL. После каждого
проведения изменений SQL*PLUS выводит следующее сообщение:

        commit complete

Когда включен режим автоматического проведения изменений, вы не сможете
совершить откат в БД.  Для выключения режима введите:
        SQL> SET AUTCOMMIT OFF

Чтобы проверить, что AUTOCOMMIT сейчас выключен, введите команду SHOW:
        SQL> SHOW AUTOCOMMIT autocommit OFF

Прерывание команды
во время ее         Предположим, что вы распечатали первую страницу
выполнения          пяти-страничного отчета и решили не смотреть оставшуюся 
часть отчета. Нажмите [Cancel]. (см таблицу 2-1 в начале главы).  SQL*PLUS 
остановит вывод и возвратится к командной подсказке.

Замечание:  Нажатие [Cancel] не прервет печать файла, который вы посылаете на
принтер с помощью параметра OUT команды SQL*PLUS SPOOL. (Печать результатов
запроса рассматривается в главе 4). Вы можете прервать файла из операционной
системы; см руководство по вашей ОС.

     Сбор временной статистики
    Используйте команду SQL*PLUS TIMING для сбора и показа по выполняемым
данных о затрачиваемых ресурсах на выполнение одной или командам нескольких
команд или блоков. TIMING собирает данные за прошедший период времени,
сохраняя информацию по выполненным командам в области хронометрирования.
Смотри TIMING в главе 6 и руководства по инсталяции и пользователя ORACLE.

Чтобы удалить все области хронометрирования, введите CLEAR TIMING.

        Выполнение команд ОС

  Вы можете выполнять команды ОС, не покидая SQL*PLUS. Это особенно полезно, 
когда вы захотите выполнить опеределенную задачу (например: печать 
существующего файла операционной системы).

Чтобы выполнить команду ОС, введите команду SQL*PLUS HOST с последующей
командой операционной системы. Например, вот команда SQL*PLUS выполняющая
команду ОС, DIRECTORY *.SQL :
        SQL> HOST DIRECTORY *.SQL

После завершения команды на экране вновь появится командная подсказка SQL*PLUS

        Выполнение ФОРМ SQL*FORMS

   Если при инсталяции SQL*PLUS была задана опция RUNFORM, то вы также можете
выполнять формы не покидая SQL*PLUS. Для выполнения формы введите команду
SQL*PLUS RUNFORM и имя формы:


                                    -- 15 --



        SQL> RUNFORM myform

        Получение ПОМОЩИ
------
Во время работы с SQL*PLUS вы можете обнаружить, что вам необходимо распечатать 
описание колонок таблицы, или начать и прервать вывод на экран.  Вам может 
также понадобиться объяснение сообщений об ошибках, полученных при неправильном 
вводе команд или когда возникают проблемы с ORACLE или SQL*PLUS.  Следующий 
раздел объясняет, как получить помощь в данной ситуации.

Печать описания     Чтобы посмотреть описание каждой колонки в таблице,
таблиц              используйте команду SQL*PLUS DESCRIBE.

  Пример 2-6     Чтобы распечатать определения трех колонок таблицы DEPT,
  использование  введите:
  команды
  DESCRIBE          SQL> DESCRIBE DEPT

               Вы получите следующий результат:
               name                     null?        type
               ----------------------------- -------- ---------
               DEPTNO                   NOT NULL NUMBER(2)
               DNAME                               CHAR(14)
               LOC                                 CHAR(13)

Замечание:  DESCRIBE извлекает информацию словаря данных ORACLE. Можно 
использовать также команды SQL SELECT для получение этой и другой информации в 
БД. За более детальной информацией обращайтесь к "Справочное руководство по 
языку SQL" и "Руководство пользователя по языку SQL".

Управление  выводом
   Предположим, что вы захотели остановить и осмотреть экран во время вывода
длинного отчета или описания таблицы с большим количеством колонок. Нажмите
[Pause]. (см табл 2-1). Вывод будет приостановлен, пока вы исследуете экран.
Чтобы продолжить, необходимо нажать [Resume].

   При желании можно использовать переменную PAUSE команды SQL*PLUS SET,
которая делает паузу после вывода каждого экрана запроса или отчета. Команда
SET описывается в главе 6.

Сообщения об ошибках
    Если SQL*PLUS обнаружит ошибку в команде, он попытается помочь вам с
помощью вывода сообщения об ошибке.

  Пример 2-7   Например, если вы допустили ошибку в имени таблицы во время
  Сообщение    ввода команды, сообщение об ошибке проинформирует вас, что
  об ошибке    таблица или вид (view) не существует:

               SQL> DESCRIBE DPT
               ERROR:
               ORA-0942: table or view dos not exist

Вы всегда поймете в чем причина из самого сообщения. Если вам необходимо
дальнейшее пояснение, сделайте один из следующих шагов, чтобы определить
причину ошибки и как ее исправить:
 - Если ошибка имеет номер для команды SQL*PLUS COPY, смотрите сообщения в
   приложении А данного руководства.


                                    -- 16 --



 - Если ошибка имеет номер начинающийся с букв "ORA", ищите сообщение в
   "Руководство по кодам и сообшениям об ошибках ORACLE" или "Руководство по
   инсталяции и пользователя".

 - Если ошибка без номера, найдите правильный синтаксис команды, которая
   привела к ошибке в главе 6 для команд SQL*PLUS или в "Справочном
   Руководстве по языку SQL" и в "Руководстве Пользователя по PL/SQL" для
   блоков PL/SQL.



















































                                    -- 17 --



     Г Л А В А   3
                              Манипулирование
                                 Командами

Эта глава поможет вам овладеть манипулированием команд SQL*PLUS, команд SQL,
блоков PL/SQL и состоит из следующих разделов:
     - редактирование команды SQL*PLUS
     - использование команд SQL*PLUS для печати и модификации команд
       сохраненных в буффере
     - редактирование команд системным редактором
     - создание и исправление командных файлов для более позднего использования
     - выборка и выполнение командных файлов
     - сохранение установочных значений окружения SQL*PLUS
     - написание диалоговых команд, которые включают переменные пользователя
       и подстановочные переменные
     - передача параметров командному файлу

     Команды редактирования

Так как SQL*PLUS  не сохраняет команды SQL*PLUS в буффере, вы исправляете
вводимую команду использую клавишу [Backspace] или вводом команды заново.

Вы можете использовать номера строк для редактирования команд SQL или блоков
PL/SQL хранимых в данный момент в буффере. Или возможно редактировать
содержимое буффера с помощью редактора ОС.

Таблица 1-1 показывает перечень команд SQL*PLUS, позволяющих вам
просматривать и изменять команду в буффере без ее повторного ввода.

Таблица 3-1         команда         сокращение     назначение
команды
____________________________________________________________
редактирования APPEND text        A text      добавить текст в конец строки
SQL*PLUS       CHANGE /old/new C /old/new     заменить old на new
в строке
               CHANGE /text    C /text        удалить text из строки
               CLEAR BUFFER    CL BUFF        удалить все строки
               DEL                (нет)       удалить строку
               INPUT              I           добавить одну или более строк
               INPUT text      I text         добавить строку содержащую text
               LIST            L              печать всех строк буфера SQL
               LIST n          L n или  n     печать одной строки
               LIST *          L *            печать текущей строки
               LIST LAST       L LAST         печать последней строки
               LIST m n        L m n          печать диапазона строк(m/n)

               Эти команды очень полезны, если вы ошиблись при вводе, или
               пожелали изменить уже введенную команду.

Печать         Любые команды редактирования (кроме LIST) влияют только на
содержимого         одну строку в буффере. Эта строка называется текущей строкой
буффера        Она помечается звездочкой, когда печатается текущая команда
               или блок.

 Пример 3-1         Предположим, вы захотели распечатать текущую команду.
 печать        Используйте команду LIST как показано ниже. (Повторите
 содержимого   пример 2-3, если вы вводили новые команды).
 буффера

                                    -- 18 --



               SQL> LIST
                 1  SELECT EMPNO, ENAME, JOB, SAL
                 2* FROM EMP WHERE SAL < 2500

               Заметим, что точка с запятой, которую вы ввели в конце команды
               SELECT, не печатается. Эта точка с запятой необходима при
               вводе команды, но он не хранится в самом SQL буффере. Это
               делает редактирование более удобным, т.к. вы можете добавлять
               новые строки в конец буффера без удаления точки с запятой.

Редактирование
текущей строки Команда SQL*PLUS CHANGE позволяет вам редактировать текущую
               строку. Различные действия опеределяют, какая строка является
               текущей:
                    - LIST данной строки делает ее текущей
                    - Когда вы печатаете или выполняете команду в буффере,
                      последняя строка команды становится текущей.(тем
                      неменее, использование символа "/" для запуска команды
                      не влияет на положение текущей строки.)
                    - Если вы получили сообщение об ошибке, строка с ошибкой
                      автоматически становится текущей.

Пример 3-2    Предположим, что вы попытались выбрать колонку DEPTNO, но
Получение     по ошибке ввели ее как DPTNO. Введите следующую команду,
ошибки в      специально сделав ошибку в первой строке:  командной строке
              SQL> SELECT DPTNO, ENAME, SAL 2  FROM EMP 3  WHERE DEPTNO=10;

              Вы увидите такое сообщение на экране:

              SELECT DPTNO, ENAME, SAL
                    *
              ERROR at line 1:
              ORA-0904:  invalid column name

      Посмотрите сообщение об ошибке; оно указыват на неправильное имя колонки 
      в первой строке запроса.  Звездочка показывает место ошибки- неправильно 
      введена колонка DPTNO.

      Вместо повторного ввода команды, вы можете исправить ошибку, редактирую 
      команду в буффере.  Строка содержащая ошибку становится текущей строкой. 
      Используйте команду CHANGE, чтобы исправить ошибку. Эта команда состоит 
      из трех частей, разделенных наклонной чертой или другим 
      не-алфавитноцифровым символом:
           ─ слово CHANGE или символ С
           - последовательность символов, которые вы хотите изменить
           - последовательность символов, на которые вы хотите заменить это

      Команда CHANGE находит первое вхождение последовательности символов в 
      строке, которое необходимо изменить, изменяет ее на новую последователь-
      ность сиволов. Если вы хотите ввести строку вновь, вы не должны 
      использовать команду CHANGE: наберите строку вновь, вводя номер строки и 
      через пробел новый текст и нажмите [Return].

Пример 3-3         Чтобы заменить DPTNO на DEPTNO, измените строку командой
Корректировка CHANGE: ошибки
              SQL> CHANGE /DPTNO/DEPTNO

    Исправленная строка появится на экране:

                                    -- 19 --



              1* SELECT DEPTNO, ENAME, SAL

   Сейчас исправив ошибку, можно используя команду RUN выполнить команду снова:
              SQL> RUN

              SQL*PLUS напечатает команду, и затем выполнит ее:

              1  SELECT DEPTNO, ENAME, SAL
              2  FROM   EMP
              3* WHERE  DEPTNO=10

              DEPTNO  ENAME    SALARY
              ------- ----------- ------
                   10 CLARK     $2,450
                   10 KING      $5,000
                   10 MILLER    $1,300

       Заметим, что колонка SAL возвращается в формате, который вы присвоили ей 
       в примере 2-4. (Если вы покидали SQL*PLUS, и зашли вновь, ваш формат 
       вернется к первоначальному состоянию.)

              Более подробно команда CHANGE рассматривается в главе 6.

Добавление
новой строки   Чтобы вставить новую строку после текущей используйте команду
               INPUT.

 Пример 3-4    Предположим, вы хотите добавить 4-ю строку к команде SQL,
 Добавление    которую вы изменяли в примере 3-3. Так как строка 3 уже
 строки        является текущей, введите INPUT (можно сокращать: I) и нажмите
               [Return]. SQL*PLUS выдаст подсказку для ввода новой строки:

               SQL> INPUT
               4

               Введите новую строку. Затем нажмите [Return].
               SQL*PLUS снова выдаст подсказку для новой строки:

               4  ORDER BY SAL
               5

               Нажмите [Return] снова, чтобы оповестить SQL*PLUS о прекращении 
               ввода новых строк, и затем используйте команду RUN для проверки 
               и нового выполнения запроса.

Добавление текста
в конец строки     Чтобы добавить текст в конец строки в буффере, используйте 
                   команду APPEND:

                1. Используйте команду LIST (или непосредственно номер строки), 
                   для того чтобы стоку, которую вы хотите изменить.
                2. Введите APPEND и добавляемый вами текст. Если текст 
                   начинается с пробела, отделите слово APPEND от первого 
                   символа текста двумя пробелами (1-й пробел- это разделитель; 
                   а 2-й - заносится в буффер).




                                    -- 20 --



 Пример 3-5
 Добавление текста
 в конец строки     Чтобы добавить пробел и слово DESC к строке 4 текущего
                    запроса, сначала необходимо распечатать строку 4:

               SQL> LIST 4
                 4* ORDER BY SAL

               Затем введите следующую команду (проверьте наличие 2-х пробелов 
               между APPEND и DESC):

               SQL> APPEND  DESC
                 4* ORDER BY SAL DESC

             Используйте команду RUN для проверки и нового выполнение запроса.

Удаление строки     Чтобы удалить строку из буффера, используйте команду DEL:

                1. Используя команду LIST (или номер строки), распечатайте
                   строку, которую необходимо удалить.
                2. Введите DEL.

               DEL делает следующую строку в буффере текущей.  Таким образом
               последовательно можно удалять несколько строк, сначала делая
               строку текущей и затем вводя команду DEL.

        Редактирование команды системным редактором текстовых редакторов,
-------
В вашей ОС имеется один или несколько которые можно использовать для создания и 
редактирования файлов. Текстовый редактор выполняет те же функции, что и 
команды редактирования SQL*PLUS, но вам он может показаться более удобным.

Вы можете запускать системный текстовый редактор без выхода из SQL*PLUS с
помощью ввода команды EDIT:

SQL> EDIT

EDIT загрузит содержимое буффера в текстовый редактор. Затем можно исправлять
текст с помощью команд редактора. Когда вы скомандуете редактору сохранить
текст изатем выйдете из него, текст сохранится обратно в текущем буффере.

Чтобы загрузить содержимое буффера в другой текстовый редактор, а не в тот
который описан по умолчанию, используйте команду SQL*PLUS DEFINE для
определения переменной, _EDITOR, в которой помещается имя редактора.
Например, чтобы определить редактор, который следует использовать команде
EDIT как EDT, введите следующую команду:

        SQL> DEFINE _EDITOR = EDT


        Сохранение команд для использования позднее
-------
   Благодаря SQL*PLUS, вы можете сохранять одну или более команд в файле, 
называемом командным файлом.  После создания командного файла вы можете 
выбирать, редактировать и выполнять его.  Используйте командные файлы для того, 
чтобы использовать их в течение некоторого промежутка времени, специальные 
сложные команды или блоки PL/SQL.


                                    -- 21 --



        Запоминание команд в командных файлах.
   Вы можете запоминать одну и более команд SQL, локов PL/SQL, команд
SQL*PLUS в командных файлах. Создать командный файл в рамках SQL*PLUS, можно
одним из трех способов:
  - введите команду и сохраните содержимое буффера
  - используйте INPUT для ввода команд, а затем сохраните содержимое буффера
  - используйте EDIT для создания временного файла используя системный редактор

Так как команды SQL*PLUS не запоминаются в буффере, для их сохранения вам
необходимо использовать один из последних двух методов.

Создание командного
файла посредством
сохранения          Чтобы сохранить текущую команду SQL или блок PL/SQL,
содержимого         введите команду SAVE. За командой следует имя файла:
буффера
               SQL> SAVE имя_файла

               SQL*PLUS добавляет расширение SQL к имени файла, чтобы идентифи
               цировать, что это файл запросов SQL.  Если вы желаете, можно
               задать другое расширение в имени файла через точку.  Заметим,
               что внутри SQL*PLUS вы отделяете имя файла от расширения
               точкой, хотя в ваше ОС это может быть другой символ.

 Пример 3-5         Сначала посмотрите с помощью команды LIST содержимое
 Сохранение    текущей команды.
 текущей
 команды       SQL> LIST
                 1  SELECT DEPTNO, ENAME, SAL
                 2  FROM EMP
                 3  WHERE DEPTNO = 10
                 4* ORDER BY SAL DESC

               Если показанного запроса не в буффере, введите его снова.
               Затем введите команду SAVE и имя файла DEPTINFO:

               SQL> SAVE DEPTINFO
               Created file DEPTINFO

               Вы можете проверить существование командного файла DEPTINFO,
               введя команду HOST и команду вашей операционной системы для
               печати файла:

               SQL> HOST команда_печати_файла_вашей_ОС

               Вы можете использовать другой способ для сохранения текущего
               блока PL/SQL запомненного в буфере.

Создание командного
файла с помщью Если использовать команду INPUT для ввода ваших команд,
INPUT и SAVE   вы можете вводить команды SQL*PLUS (также как и команды SQL
               или блоки PL/SQL) в буффер. Сначала вводятся команды SQL*PLUS,
               а затем команд SQL или блоки PL/SQL; точно также, как и в
               случая ввода команд после командной подсказки.

               Можно также запоминать наборы команд SQL*PLUS , которые вы
               планируете использовать со множеством различных запросов в
               командных файлах.

                                    -- 22 --



Пример 3-6        Предположим, вы сочинили запрос для показа списка продавцов
Сохранение        и их комиссионных. Планируется, что вы выполняете его раз
команд с помощью  в месяц, чтобы оценить результаты работы каждого служащего.
INPUT и SAVE   Чтобы ввести и сохранить этот запрос используя команду
               INPUT, вы должны сначала очистить буффер:

               SQL> CLEAR BUFFER

               Затем используйте INPUT для ввода команды (убедитесь, что вы
               не ввели точку с запятой в конце команды):

               SQL> INPUT
                 1  COLUMN ENAME HEADING SALESMAN
                 2  COLUMN SAL HEADING SALARY FORMAT $99,999
                 3  COLUMN COMM HEADING COMMISION FORMAT $99,990
                 4  SELECT EMPNO, ENAME, SAL, COMM
                 5  FROM EMP
                 6  WHERE JOB = 'SALESMAN'
                 7

Ноль в конце модели формата для колонки COMM сообщает SQL*PLUS , что необходимо 
печатать ноль вместо пробела, когда цифра в данном месте равна нулю. Ноль 
необходим только тогда, когда вы используете другие форматы для получаемых 
колонок.  Модели форматов и команда COLUMN описываются в главе 4.

Сейчас используйте команду SAVE для сохранения запроса в файле с именем SALES
с расширением SQL:

               SQL> SAVE SALES
               Created file SALES

Заметим, что не надо вводить точку с запятой в конце запроса; если вы включите 
в команду точку с запятой, SQL*PLUS  должен будет попытаться выполнить 
содержимое буффера. Команды SQL*PLUS в буффере приведут к ошибкам потому, что 
SQL*PLUS ожидает в буффере только команды SQL.

Чтобы несколько команд SQL, уберите точки с запятой во всех командах SQL.  
Затем используйте APPEND, для добавления точки с запятой ко всем (кроме 
последней) командам (SAVE добавляет наклонную черту в конец файла 
автоматически; наклонная черта сообщает SQL*PLUS, что необходимо выполнить 
последнюю команду, когда вы запускаете командный файл).

Чтобы ввести несколько блоков PL/SQL, введите один за другим блоки без точки
с запятой или наклонной черты между блоками. Затем, для каждого блока (кроме
последнего) распечатайте последнюю строку блока, чтобы сделать ее текущей, и
используйте INPUT для вставки наклонной черты:

               INPUT /

Создание командных
файлов системным    Вы можете также создавать командный файл с помощью
редактором          текстового редактора ОС, с помощью ввода команды EDIT и
               имени файла, например:

               SQL> EDIT SALES

Подобно команде SAVE, EDIT также добавляет к имени файла расширение SQL, если
вы не указали своего расширения.

                                    -- 23 --



Вы должны включать в конце каждой команды точку с запятой и строку с точкой
после каждого блока PL/SQL в файле. (Вы можете заводить множество команд SQL
и блоков PL/SQL).

Когда вы создаете командный файл командой EDIT, вы можете также включать
команды SQL*PLUS в конец файла. Вы не можете этого делать при создании
командного файла командой SAVE, так как SAVE добавляет наклонную черту в
конец файла. Эта наклонная черта будет приказывать SQL*PLUS-у выполнить
командный файл дважды, один раз при встрече точки с запятой в конце последней
команды SQL (или наклонной черты после последнего блока PL/SQL), и еще раз
при обнаружении наклонной черты в конце файла.

        Помещение комментариев в командные файлы
-------
        Вы можете вводить комментарии в командные файлы одним из трех способов:
                - используя команду SQL*PLUS  REMARK
                - используя ограничители комментария SQL, /*...*/
                - используя комментарии PL/SQL "--"

Использование  Используйте команду REMARK на отдельной строке в командном
команды REMARK файле, с последующим комментарием на той же строке.
               Чтобы продолжить комментарий на следующих строках, введите
               дополнительные команды REMARK. Не разрывайте  одну команду SQL
               командами REMARK.

               REMARK Отчет по комиссионным
               REMARK выполняется ежемесячно
               COLUMN ENAME HEADING SALESMAN
               COLUMN SAL HEADING SALARY FORMAT $99,999
               COLUMN COMM HEADING COMMISION FORMAT $99,990
               REMARK Включает только продавцов
               SELECT EMPNO, ENAME, SAL, COMM
               FROM EMP
               WHERE JOB = 'SAESMAN'

Использование  Введите ограничители комментария SQL, на отдельных строках
/*...*/        командного файла, или в строке содержащей команду SQL или
               блок PL/SQL. Комментарий может содержать несколько строк:

               /* Отчет по комиссионным выполняется ежемесячно */
               COLUMN
               ENAME   HEADING
               SALESMAN COLUMN SAL HEADING SALARY
               FORMAT  $99,999 COLUMN COMM HEADING COMMISION FORMAT $99,990
               SELECT  EMPNO, ENAME, SAL, COMM
               FROM EMP WHERE JOB = 'SAESMAN' /* Включает только продавцов */

               Если вы ввели комментарий SQL непосредственно после командной
               подсказки, SQL*PLUS не сохранит комментарий в буффере.

Использование  Вы можете использовать "--" стиль комментариев внутри
комментариев   блоков PL/SQL. Введите комментарий в строке команды.
PL/SQL "--"    Комментарий должен оканчиваться на той же строке; здесь
               не требуется конечный ограничитель.

               DECLARE  --блок для ежемесячного отчета продавцов



                                    -- 24 --



Выборка командного файла
   Если вы захотели поместить содержимое командного файла в буффер, вы должны
считать командный файл из файла в котором он сохранен. Вы можете сделать это,
используя команду SQL*PLUS GET.

Также как вы можете сохранить запрос из буффера в файл командой SAVE, вы
можете считать запрос из файла в буффер командой GET:

SQL> GET имя_файла

SQL*PLUS добавит точку и расширение к имени файла, если вы не указали свое
расширение.

 Пример 3-7
         Выборка командного файла
   Предположим, вам необходимо прочитать файл SALES из предыдущего
упражнения. (Буффер можно очистить командой CLEAR BUFFER).  Считайте файл
вводом команды GET.  Чтобы считать файл SALES, введите:
               SQL> GET SALES
                 1  COLUMN ENAME HEADING SALESMAN
                 2  COLUMN SAL HEADING SALARY FORMAT $99,999
                 3  COLUMN COMM HEADING COMMISION FORMAT $99,990
                 4  SELECT EMPNO, ENAME, SAL, COMM
                 5  FROM EMP
                 6* WHERE JOB = 'SAESMAN'

   SQL*PLUS считал содержимое файла SALES  с расширением SQL в буффер SQL и
распечатал его на экране. Затем можно корректировать команду дальше.  Если
файл не содержит команд SQL*PLUS, вы несможете выполнить его командой RUN.

        Выполнение командного файла
   Команда START выбирает командный файл и выполняет команды, которые в нем
содержатся. Используйте START для выполнения командного файла содержащего
команды SQL*PLUS, команды SQL, блоки PL/SQL. За командой START указывается
имя файла:

        START имя_файла

Если ваш файл имеет расширение SQL, его можно не указывать в имени файла.

        Пример 3-8  Выполнение командного файла
-------
   Для чтения и выполнения команд сохраненных в файле SALES.SQL, введите:
               SQL> START SALES

       SQL*PLUS выполнит команды из файла SALES и покажет результататы на
       терминале, форматируя результаты запроса в соответсвие с командами
       SQL*PLUS из файла:

           EMPNO SALESMAN     SALARY COMMISSION
       --------- ---------- -------- ----------
            7499 ALLEN        $1,600       $300
            7521 WARD         $1,250       $500
            7654 MARTIN       $1,250     $1,400
            7844 TURNER       $1,500         $0




                                    -- 25 --



       Чтобы посмотреть команды "выбираемые" SQL*PLUS-м, вы можете установить
       переменную ECHO команды SET в состояние ON. Переменная ECHO управляет
       выводом команд в командном файле, выполняемого по команде START или по
       команде '@'. Установка перменной ECHO в состояние OFF запрещает печать
       команд.

       Вы также можете использовать команду '@' для запуска командного файла:

       SQL> @SALES

       Команда '@' печатает и выполняет команды из указанного командманого
       файла также, как и команда START.

       Команды START и '@' оставляют в буффере последнюю команду SQL или блок
       PL/SQL.


        Выполнение командного во время старта SQL*PLUS
-------
    Чтобы выполнить командый файл во время запуска SQL*PLUS, используйте один
из следующих четырех способов:

- Укажите после SQLPLUS имя, наклонную черту, пароль, пробел, @, имя файла:

         SQLPLUS SCOTT/TIGER @SALES

       SQLPLUS стартует и выполнит командный файл SALES.

     - Укажите после SQLPLUS имя, пробел, @, имя файла:

         SQLPLUS SCOTT @SALES

 SQLPLUS попросит вас ввести пароль,стартует и выполнит командный файл SALES.
     - Включите имя пользователя первой строкой файла.  Укажите после SQLPLUS
       знак @ и имя файла. SQLPLUS попросит вас ввести пароль,стартует и
       выполнит командный файл SALES.

     - Включите имя пользователя, наклонную черту, пароль пользователя первой
          строкой файла. Укажите после SQLPLUS знак @ и имя файла. SQLPLUS
          стартует и выполнит командный файл SALES.

Вложенность командных файлов
   Чтобы выполнить несколько командных файлов подряд, сначала необходимо
создать командный файл содержащий несколько команд START с указанием имен
запускаемых файлов. Затем выполняется командный файл состоящий из команд
START. Например, можно создать следующий командный файл с именем SALESRPT:
               START Q1SALES
               START Q2SALES
               START Q3SALES
               START Q4SALES
               START YRENDSLS

        Модификация командных файлов
-------
    Командные файлы могут модифицироваться двумя способами:
                 - используя команду EDIT
                 - используя GET, команды редактирования SQL*PLUS, и SAVE


                                    -- 26 --



Чтобы отредактировать существующий командный файл с помощью команды EDIT, за
словом EDIT указывают имя файла. Например,для исправления файла PROFIT с
расширением SQL, введите следующую команду:

        SQL> EDIT PROFIT

Помните, что команда EDIT предполагает расширение для имени файла SQL, если
вы не указали иного.

Чтобы отредактировать существующий файл используя GET, команды редактирования
SQL*PLUS, и SAVE, сначала считайте файл с помощью GET, затем исправьте его
командами редактирования SQL*PLUS, и наконец сохраните его командой SAVE.

Заметим, что если вы хотите заместить содержимое существующего файла командой
или блоком из буффера, то вы обязаны после SAVE и имени файла указать слово
REPLACE. Например:

SQL> GET MYREPORT
  1* SELECT
   * FROM EMP SQL> C/*/ENAME, JOB 1* SELECT ENAME, JOB
  FROM EMP SQL> SAVE MYREPORT
  REPLACE Wrote file MYREPORT

  Если вы хотите добавить содержимое буффера в конец существующего файла,
надо после SAVE и имени файла указать слово APPEND:

        SQL> SAVE имя_файла APPEND

        Выход из командного файла с кодом возврата
-------
    Если ваш командный файл генерирует ошибку SQL во время выполнение его из
командного файла ОС, вы можете захотеть прервать выполнение командного файла
и выйти из него с кодом возврата. Для этого используется команда SQL*PLUS
WHENEVER SQLERROR; смотри WHENEVER SQLERROR в главе 6.

Установка окружения для SQL*PLUS
   Вы можете захотеть по своему настроить среду SQL*PLUS (например показать
текущее время как часть подсказки SQL*PLUS) и затем многократно использовать
установки установки данного сеанса.  Это можно сделать с помощью файла
операционной системы LOGIN.SQL (его называют файлом параметров пользователя
[profile]).

Пставляемый ORACLE командный файл DEMOBLD (обсуждался в главе 1) создает файл
LOGIN в вашем директории. Сначала он будет пустым, кроме предложений DEFINE.

Вы можете добавить любые команды SQL, блоки PL/SQL, или команды SQL*PLUS в
этот файл; когда вы запускаете SQL*PLUS, он автоматически ищет ваш файл LOGIN
(сначала в текущем директории, затем в директориях задействованных в пути
[path]) и выполняет его команды. (Вы также можете иметь файл параметров
"местоположения" [Site]. Смотри команды SQL*PLUS в главе 6 и связь файлов
параметров пользователя и "местоположения".)

Если вы запустили на выполнение DEMOBLD, а LOGIN файл уже существует в
текущем директории, DEMOBLD спросит вас, сохранять или нет ваш LOGIN с новым
именем LOGIN.OLD . Если вы хотите сохранить свой LOGIN файл, дайте ответ
'yes', а затем переименуйте LOGIN.OLD в LOGIN.SQL .



                                    -- 27 --



Замечание    DEMODROP не удаляет файл LOGIN; он удаляет только
таблицы-примеры.

Модификация    Вы можете модифицировать ваш файл LOGIN точно также, как и
вашего файла   любой другой командный файл. Возможно вам захочется добавить
LOGIN          несколько следующих команд в файл LOGIN:

               SET COMPATIBILITY  Последующие V5 или V6, устанавливает
                               совместимость с указанной версией ORACLE.
                               Установка COMPATIBILITY равной V5 позволяет
                               выполнять командные файлы созданные в 5-й
                               версии ORACLE.

               SET CRT         И далее указывается имя CRT SQL*FORMS,
                               позволяет выполнять формы SQL*FORMS командой
                               RUNFORM с описанной CRT.

               SET NUMFORMAT   И далее указывается числовой формат (такой как
                               $99,999); устанавливает формат по умолчанию
                               для печати чисел в результатах запроса.

               SET PAGESIZE    И далее указывается число; устанавливает число
                               строк на странице.

               SET PAUSE       Последующий ON, заставляет SQL*PLUS делать
                               паузу перед выводом каждой страницы (SQL*PLUS
                               продолжит вывод после нажатия [Return]). И
                               далее указывается текст, который будет
                               высвечиваться во время паузы.

               SET TIME        Последующий ON, заставляет SQL*PLUS печатать
                               время перед каждой командной подсказкой.

               Смотри команду SET в главе 6, где описываются эти и другие
               переменные команды SET, которые вы можете настраивать в своем
               файле LOGIN.

Написание диалоговых программ Следующие возможности SQL*PLUS позволяют писать
командные файлы взаимодействующие с конечным пользователем:
       - определение переменных пользователя
        - подстановка значений в командах
        - передача значений в команде START
        - подсказка для ввода значения

        Определение переменных пользователя
-------
   Вы можете определять переменные, называемые переменными пользователя, для
повторного использования в одном командном файле, используя команду SQL*PLUS
DEFINE. Заметим, что вы можете также определить переменную пользователя для
использования ее в заголовках отчета.

 Пример 3-9
 Определение переменных пользователя
               Чтобы определить переменную пользователя EMPLOEE и присвоить
               ей значение "SMITH", введите следующую команду:

               SQL> DEFINE EMPLOYEE = SMITH


                                    -- 28 --



               Для проверки описания переменной, введите DEFINE с
               именем переменной:

               SQL> DEFINE EMPLOYEE

               SQL*PLUS распечатает описание:

               DEFINE EMPLOYEE     = "SMITH" (CHAR)

  Чтобы распечатать описание всех переменных пользователя, введите DEFINE
после командной подсказки. Заметим, что переменные явно определенные вами
командой DEFINE, получают значения CHAR. Вы можете определить переменную
пользователя с типом NUMBER с помощью команды ACCEPT. Команда ACCEPT
описывается ниже в этой главе.

Для удаления переменной используйте команду SQL*PLUS UNDEFINE с указанием
имени переменной.


        Использование переменных  подстановки
-------
Предположим, вы хотите написать запрос подобный запросу SALES (см пример 3-6) 
для печати служащих с разными профессиями, не только продавцов (SALESMAN). Вы 
можете сделать это изменяя значения CHAR в клаузе WHERE, каждый раз, когда 
выполняете команду, но это просто.

Используя переменную подстановки вместо значения SALESMAN  в клаузе WHERE,
можно получить теже результаты, которые вы бы получили в результате указания
значения в самой команде.

Подстановочная переменная- это имя переменной пользователя с предшествующими 
одним или двумя амперсандами (&). Когда 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;

(Команда BREAK запрещает дублирование значений в колонке с именем в
переменной SORTCOL; BREAK описывается в главе 4.)

        Где и Как использовать переменные подстановки
-------
  Вы имеете право использовать переменные подстановки в любом месте в
командах SQL*PLUS и SQL, исключая первое слово вводимое после командной
подсказки. Когда SQL*PLUS встречает неопределенную переменную подстановки в

                                    -- 29 --



команде, он попросит вас ввести для нее значение. Можно ввести несколько
строк после подсказки, даже строки содержащие пробелы и пунктуации. Когда
команда SQL, содержащая ссылки, должна иметь кавычки вокруг переменной, а вы
не включаете их туда, пользователь должен включать их при вводе.

SQL*PLUS читает ваш ответ с клавиатуры, даже если вы перенаправляете терминаль
ный ввод или вывод в файл. Если терминал отсутствует (если, например, вы выпол
няете командный файл в пакетном режиме), SQL*PLUS использует переназначенный
файл.

После ввода значения, SQL*PLUS печатает строку содержащую подстановочную
переменную дважды: один раз до подстановки, и другой- после подстановки.
Можно подавить эту печать с помощью установки переменной VERIFY (OFF) команды
SET.

 Пример 3-10
 Использование Создайте командный файл с именем STATS, для использования
 переменных    при вычислении статистики в подгруппе (максимальное
 подстановки   значение) в цифровой колонке:

               SQL> CLEAR BUFFER
               SQL> INPUT
                 1   SELECT &GROUP_COL,
                 2          MAX(&NUMBER_COL) MAXIMUM
                 3   FROM   &TABLE
                 4   GROUP BY &GROUP_COL
                 5
               SQL> SAVE STATS
               Created file STATS

               Сейчас выполните ный файл STATS и ответте как показано ниже:

               SQL> @STATS
               Enter value for group_col: JOB
               old   1: SELECT  &GROUP_COL,
               new   1: SELECT  JOB,
               Enter value for number_col: SAL
               old   2:          MAX(&NUMBER_COL) MAXIMUM
               new   2:          MAX(SAL) MAXIMUM
               Enter value for table: EMP
               old   3: FROM     &TABLE
               new   3: FROM     EMP
               Enter value for group_col: JOB
               old   4: GROUP BY &GROUP_COL
               new   4: GROUP BY JOB

               SQL*PLUS выведет следующее:

               JOB        MAXIMUM
               ---------- ---------
               ANALYST       3000
               CLERK         1300
               MANAGER       2975
               PRESIDENT     5000
               SALESMAN      1600




                                    -- 30 --



       Если вы хотите добавить символы непосредственно после подстановочной 
       переменной, используйте точку для разделения переменной и символов. 
       Например:
               SQL> SELECT * FROM EMP WHERE EMPNO='&X.01';
               Enter value for X:  123

               Это будет интерпретироваться так:

               SQL> SELECT * FROM EMP WHERE EMPNO='12301';

Устранение
необязательной Предположим вы захотели расширить файл STATS, чтобы включить
подсказки для  минимум, сумму и среднее 'числовой' колонки.  SQL*PLUS
ввода значения вас дважды ввести значение для GROUP_COL, и один раз для
               NUMBER_COL из примера 3-10, перед этими переменными стоит один 
амперсанд. Если вы хотите добавить еще три функции- используя один амперсанд- к 
командному файлу, SQL*PLUS потребует от вас 5-ть раз ввода имени числовой 
колонки.

Вы можете избежать повторного ввода имени групповой и числовой колонок с 
помощью подсоединения второго амперсанда перед GROUP_COL и NUMBER_COL в файле 
STATS. SQL*PLUS автоматически определит подстановочную переменную с двумя 
амперсандами, но не сделает этого для переменной с одним амперсандом. Таким 
образом, когда SQL*PLUS встречает подстановочную переменную в течение сеанса 
более одного раза, SQL*PLUS использует уже определенное значение для переменных 
с двумя амперсандами, и просит ввода значения для переменных с одним 
амперсандом. Эта возможность также полезна если вы захотите выполнять файл для 
различных таблиц с теми же значениями GROUP_COL и NUMBER_COL.

 Пример 3-11   Чтобы улучшить командный файл STATS с помощью двойных
 Использование амперсандов, а затем выполнить файл, сначала подавим вывод
 двойных       каждой командной до и после подстановки: амперсандов
               SQL> SET VERIFY OFF

               Сейчас считаем и отредактируем STATS, введя следующую команду:

               SQL> GET STATS
                 1   SELECT &GROUP_COL,
                 2          MAX(&NUMBER_COL) MAXIMUM
                 3   FROM   &TABLE
                 4   GROUP BY &GROUP_COL
               SQL> 2
                 2*  MAX(&NUMBER_COL) MAXIMUM
               SQL> APPEND ,
                 2*  MAX(&NUMBER_COL) MAXIMUM,
               SQL> C /&/&&
                 2*  MAX(&&NUMBER_COL) MAXIMUM,
               SQL> I
                 3i  MIN(&&NUMBER_COL) MINIMUM,
                 4i  SUM(&&NUMBER_COL) TOTAL,
                 5i  AVG(&&NUMBER_COL) AVERAGE
                 6i
               SQL> 1
                 1*  SELECT &GROUP_COL,
               SQL> C /&/&&
                 1*  SELECT &&GROUP_COL,
               SQL> 7
                 7*  GROUP BY &GROUP_COL

                                    -- 31 --



               SQL> C /&/&&
                 7*  GROUP BY &&GROUP_COL
               SQL> SAVE STATS2
               created file STATS2

               И наконец, выполним командный файл STATS2:

               SQL> START STATS2
               Enter value for group_col: JOB
               Enter value for number_col: SAL
               Enter value for table: EMP

               SQL*PLUS выведет следующее

               JOB           MAXIMUM    MINIMUM      TOTAL
               AVERAGE
               ---------- ---------- ---------- ----------
               ANALYST          3000       3000       6000
               3000
               CLERK            1300        800       4150
               1037.5
               MANAGER          2975       2450       8275
               2758.3333
               PRESIDENT        5000       5000       5000
               5000
               SALESMAN         1600       1250       5600
               1400

              Заметим, что подсказка для ввода значений NUMBER_COL и GROUP_COL
               появится только один раз.  Если в течение данного сеанса вы
               снова выполните STATS2, вас попросят ввести значение только
               для TABLE (потому, что в его имени стоит только один амперсанд
               и переменная поэтому не запоминается), а для переменных
               NUMBER_COL и GROUP_COL ввода не потребуется (так как перед их
               именами стоит двойной амперсанд, поэтому они запоминаются).

               Перед тем как продолжить установите системную переменную
               VERIFY обратно в состояние ON:

               SQL> SET VERIFY ON

        Ограничения
-------
   Вы не можете использовать подстановочные переменные в командах редактирова- 
ния буффера (APPEND, CHANGE, DEL, INPUT) и в других командах, где подстановка 
ничего не означает (такие как REMARK и TIMING).  Команды редактирования 
буффера, APPEND, CHANGE, DEL, INPUT, обрабатывают текст начинающийся с "&" и 
"&&" буквально, как любую другую текстовую строку.

Системные      Следующие системные переменные, определяемые командой SET,
переменные     влияют на переменные подстановки:

      SET SCAN       Включение/выключение подстановки

      SET DEFINE   Определение символа подстановки (по умолчанию "&")




                                    -- 32 --



      SET ESCAPE    Определение символа переключения (ESC), который можно
                         использовать перед символом подстановки. Символ ESC ука
                 SQL*PLUS на то, что символ подстановки надо воспринимать как
                 обычный символ. По умолчанию ESC есть обратная наклоння
                 черта(\).

      SET VERIFY ON  Печатает каждую строку командного файла до и после
                     подстановки.

      SET CONCAT     Определяет символ, который разделяет имя подстановочной
                     переменной или параметр от другого текста, который
                     следует непосредственно за переменной или параметром- по
                     умолчанию это точка (.).
      За более подробной информацией обращайтесь к главе 6.

        Передача параметров в команде START
-------
Вы можете обойти подсказку для ввода соответсвующих значений для подстановочных
переменных посредством передачи значений через параметры командному файлу
через команду START.

Вы можете сделать это поместив амперсанд с последующим числом в командном
файле вместо подстановочной переменной. Каждый раз, когда вы будете выполнять
команднй файл, START замещает каждое &1 в файле на первое значение
(называется аргументом) после START имя_файла, затем замещает каждое &2 на
второй аргумент, и так далее.

Например, вы можете вы можете включить следующие команды в командный файл
MYFILE:

SELECT * FROM EMP
WHERE JOB='&1'
AND SAL=&2

Следующая команда START заставит SQL*PLUS заместить &1 на CLERK и &2 на 7900
в командном файле MYFILE:

        SQL> START MYFILE CLERK 7900

Когда вы используете аргументы в команде START, SQL*PLUS связывает каждый
параметр в командном файле со значением соответсвующего аргумента.

Пример 3-12    Для создания нового командного файла на базе SALES, который
Передача       принимает параметр для job, введите:
параметров в
команде START  SQL> GET SALES

                 1  COLUMN ENAME HEADING SALESMAN
                 2  COLUMN SAL HEADING SALARY FORMAT $99,999
                 3  COLUMN COMM HEADING COMMISION FORMAT $99,990
                 4  SELECT EMPNO, ENAME, SAL, COMM
                 5  FROM EMP
                 6* WHERE JOB = 'SALESMAN'
               SQL> CHANGE /SALESMAN/&1
                 6* WHERE JOB = '&1'
               SQL> 1
                 1* COLUMN ENAME HEADING SALESMAN
               SQL> CHANGE /SALESMAN/&1

                                    -- 33 --



                 1* COLUMN ENAME HEADING &1
               SQL> SAVE ONEJOB
               Created file ONEJOB

               Сейчас выполним командный файл с параметром CLERK.

               SQL> START ONEJOB CLERK

               SQL*PLUS распечатает строку с командой SQL, которая содержит
               параметр, до и после замещения параметра, и затем выведет
               результаты:

               old   3: WHERE JOB = '&1'
               new   3: WHERE JOB = 'CLERK'

                    EMPNO CLERK         SALARY COMMISION
               ---------- ---------- --------- ---------
                     7369 SMITH           $800
                     7876 ADAMS         $1,100
                     7900 JAMES           $950
                     7934 MILLER        $1,300

               Вы можете использовать несколько параметров в командном файле.
               Внутри командного файла можно использовать каждый параметр по
               номеру, и можно включать параметры в любой последовательности.

               Заметим, что нельзя использовать параметры, когда команда
               выполняется с помощью RUN или наклонной черты (/). Для этого
               необходимо запомнить команду в командном файле и выполнить ее
               командой START.

               До того как продолжить, возвратите колонке ENAME ее
               первоначальный заголовок:

               SQL> COLUMN ENAME CLEAR

        Связь с пользователем
-------
   Три команды SQL*PLUS-PROMPT, ACCEPT, PAUSE- помогают вам общаться с конеч-
ным пользователем. Данные команды позволяют посылать сообщения и принимать
ввод данных от пользователя, включая и простое нажатие [Return]. Вы также може-
те использовать PROMPT и ACCEPT для изменения подсказки при вводе значений,
которую автоматически генерирует SQL*PLUS для подстановочных переменных.

        Подсказка и ввод
-------
Значений для   Используя PROMPT и ACCEPT, можно посылать сообщения переменных
пользователю и принимать данные от него.  PROMPT просто пользователя выводит
указанное вами сообщение на экран; используйте эту команду для передачи
инструкций или информации пользователю. ACCEPT выдает подсказку пользователю
для ввода значения и запоминает его в указанной переменной пользователя.
Используйте PROMPT совместно с ACCEPT, когда ваша подсказка содержит больше
одной строки.

 Пример 3-13   Чтобы приказать пользователю ввести заголовок рапорта и
 Подсказка и   запомнить введенное значение в переменной MYTITLE для прием
 ввода   дальнейшего использования, сначала очистим буффер:


                                    -- 34 --



               SQL> CLEAR BUFFER

               Затем создадим командный файл:

               SQL> INPUT
                 1  PROMPT Введите заголовок (до 30 символов)
                 2  ACCEPT MYTITLE PROMPT 'Заголовок:  '
                 3  TTITLE CENTER MYTITLE SKIP 2
                 4  SELECT * FROM DEPT
                 5
               SQL> SAVE PROMPT1
               Created file PROMPT1

Команда TTITLE устанавливает начальный (верхний) заголовок для вашего отчета.
Подробнее в главе 4.

Наконец, выполните командный файл, ответив на подсказку для ввода заголовка,
как показано ниже:

SQL> START PROMPT1 Введите заголовок (до 30 символов) Заголовок: Departament
Report as of 1/1/89

       SQL*PLUS выведет следующее:  Departament Report as of 1/1/89
           DEPTNO DNAME        LOC
       ---------- ------------ ------------
              10 ACCOUNTING   NEW YORK
              20 RESEARCH     DALLAS
              30 SALES        CHICAGO
              40 OPERATIONS   BOSTON

       Перед тем как продолжить, выключите команду TTITLE, как показано ниже:
       SQL> TTITLE OFF

Изменение подсказки
при вводе значения
подстановочной Если вы хотите изменить подсказку при вводе значения
переменной          подстановочной переменной, используйте совместно команды
               PROMPT и ACCEPT как показано ниже.

Пример 3-14        Как вы увидели в примере 3-13, SQL*PLUS автоматически
Совместное         генерирует подсказку для ввода значения, когда используется
использование      переменная подстановки. Вы можете заменить эту подсказку,
PROMPT и ACCEPT    включив в командный файл PROMPT и ACCEPT вместе с запросом,
для переменных     который ссылается на переменную подстановки.  Чтобы создать
подстановки        такой файл, введите следующие команды:

               SQL> CLEAR BUFFER
               buffer cleared
               SQL> INPUT
                 1  PROMPT Enter a valid employee number
                 2  PROMPT For example: 7123, 7456, 7890
                 3  ACCEPT ENUMBER NUMBER PROMPT 'Emp. no.:'
                 4  SELECT ENAME, MGR, JOB, SAL
                 5  FROM EMP
                 6  WHERE EMPNO = &ENUMBER
                 7
               SQL> SAVE PROMPT2
               Created file PROMPT2

                                    -- 35 --



               Затем, выполните командный файл. SQL*PLUS выдаст вам подсказку 
               для ввода значение ENUMBER, используя указанный вами текст в 
               PROMPT и ACCEPT:

               SQL> STERT PROMPT2
               Enter a valid employee number
               For example: 7123, 7456, 7890
               Emp. no.:

               Попытайтесь ввести символы вместо цифр после подсказки 
               "Emp.no.:" :

               Emp. no.:  ONE
               "ONE"  is not a valid number
               Emp. no.:

               Так как вы указали NUMBER после имени переменной в команде 
               ACCEPT, SQL*PLUS не примет не-цифровое значение. Сейчас введите 
               число:

               Emp. no.:  7521
               old   3: WHERE EMPNO = &ENUMBER
               new   3: WHERE EMPNO =      7521

               SQL*PLUS выведет следующие результаты:

               ENAME             MGR JOB              SALARY
               ---------- ---------- ------------ ----------
               WARD           7698 SALESMAN         $1,250

Посылка сообщения
и прием [Return]  Если вы хотите вывести сообщение на экран пользователя, и
в качестве ввода  чтобы после прочтения сообщения пользователь нажал [Return],
                  используйте команду PAUSE. Например, можно включить следующие
                  строки в командный файл:

               PROMPT Before continue, make shure you have your
               acount card
               PAUSE Press RETURN to continue.

               Если сообщение, которое вы хотите вывести, помещается на одной 
               строке, команду PROMPT можно опустить.

Очистка экрана Если вам необходимо очистить экран до вывода отчета (или когда 
               это необходимо), включите команду SQL*PLUS CLEAR с ее параметром 
               SCREEN в соответствующее место командного файла, в следующем 
               формате:
               CLEAR SCREEN

               Перед переходом к следующей главе, восстановите формат всех 
               колонок и заголовки в начальное состояние с помощью следующей 
               команды:

               SQL> CLEAR COLUMNS





                                    -- 36 --
