Исходники.Ру - Программирование
Исходники
Статьи
Книги и учебники
Скрипты
Новости RSS
Магазин программиста

Главная » Статьи по Базам данных » Oracle - Статьи »

Обсудить на форуме Обсудить на форуме

USER(CREATE,ALTER,DROP,     Создает, изменяет и удаляет пользователей; BECOME
 BECOME)                    требуется для выполнения с помощью утилиты Export
                            полного экспорта базы данных
VIEW(CREATE,CREATE ANY,     Создает и удаляет представления
 DROP ANY)
   16. Полномочия на объекты
   В таблице приведены полномочия на объекты (отмечены символом "*"). С
помощью ALL (All of the object privileges that can be applied.)
                                       Процедуры
                  Предста- Последова-   Функции
Объекты   Таблицы  ления   тельности     Пакеты   "Снимки"
ALTER        *                 *
DELETE       *       *
EXECUTE                                    *
INDEX        *
INSERT       *       *
REFERENCES   *       *
SELECT       *       *         *                      *
UPDATE       *       *
   17. Основные понятия и параметры, используемые в справочнике
c_alias     - псевдоним столбца (может использоваться в SELECT фразе).
cluster     -
col_element - определение столбца (для формата или элемента столбца в описании
              CREATE TABLE предложения).
condition   - условие (возвращает логическое значение TRUE, FALSE или UNKNOWN).
constraint  - имя ограничения целостности в описании таблицы.
dblink      - Database link.
defoult
expr        - любое выражение.
fmt         - формат данных.
location    - Operating-system-dependent specification of a file's location.
              Usually either a device or a directory.
integer     - числовая константа или выражение типа NUMBER.
nls         - выражение вида 'NLS_SORT = name', где name is either
              BINARY or the name of a linguistic sort sequence
null        - неопределенное значение.
subquery    - подзапрос, используемый в предложениях.
rowid       - внутренний уникальный идентификатор строки (тип данных ROWID).
t_alias     - псевдоним таблицы. Может использоваться в SELECT предложении.
schema      -
scn         - номер уникальной идентификации транзакции (System Change Number).
sid,serial# - Уникальные идентификаторы сессии (Session ID and serial number).

M                           SQL*Plus
                       С О Д Е Р Ж А Н И Е
 1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   3
 2. Ввод и редактирование команд языков SQL*Plus, SQL и PL/SQL . . . . .   4
   2.1. Командная строка SQL*Plus  . . . . . . . . . . . . . . . . . . .   4
   2.2. Использование строкового редактора SQL*Plus  . . . . . . . . . .   5
   2.3. Использование внешнего (системного) редактора текста . . . . . .   7
   2.4. Размещение комментариев в командных файлах . . . . . . . . . . .   7
 3. Выполнение командных файлов . . . . . . . . . . . . . . .  . . . . .   7
 4. Динамически изменяющиеся программы . . . . . . . . . . . . . . . . .   8
   4.1. О динамически изменяющихся программах  . . . . . . . . . . . . .   8
   4.2. Определение подставляемых переменных . . . . . . . . . . . . . .   9
   4.3. Управление подстановкой переменных . . . . . . . . . . . . . . .  10
   4.4. Различия в использовании префиксов & и &&  . . . . . . . . . . .  10
   4.5. Связь с пользователем и операционной системой  . . . . . . . . .  11
 5. Сохранение результатов . . . . . . . . . . . . . . . . . . . . . . .  11
 6. Изменение окружающей среды . . . . . . . . . . . . . . . . . . . . .
 7. Работа с переменными . . . . . . . . . . . . . . . . . . . . . . . .
 8. Показ столбцов таблицы . . . . . . . . . . . . . . . . . . . . . . .
 9. Проектирование простых отчетов . . . . . . . . . . . . . . . . . . .
10. Соединение с другими базами данных . . . . . . . . . . . . . . . . .
11. Команды SQL*Plus
   @ (at), @@ Выполняет содержимое указанного командного файла . . . . .
   / (slash)  Запускает команду SQL или блок PL/SQL из буфера SQL  . . .
   ACCept     Организует ввод текста в переменную пользователя . . . . .
   Append     Добавляет текст к концу текущей строки в буфере SQL  . . .
   BREak      Определяет, какие события вызовут прерывание и какие
              действия необходимо выполнить в случае прерывания  . . . .
   BTItle     Размещает заголовок в конце каждой страницы отчета . . . .
   Change     Изменяет текст текущей строки в буфере SQL . . . . . . . .
   CLear      Очищает описание прерываний, буфер SQL, описание
              столбцов и т.д.  . . . . . . . . . . . . . . . . . . . . .
   COLumn     Позволяет форматировать значения и заголовки столбцов  . .
                Возможно использование следующих параметров:
      ALIas         псевдоним столбца или выражения  . . . . . . . . . .
      CLEar         очистка описания столбца . . . . . . . . . . . . . .
      FOLD_After    перевод строки после заголовка и каждой строки . . .
      FOLD_Before   перевод строки перед заголовком и каждой строкой . .
      FORmat        формат показа значений столбца . . . . . . . . . . .
      HEAding       изменение заголовка столбца  . . . . . . . . . . . .
      JUStify       выравнивание заголовка столбца . . . . . . . . . . .
      LIKE          копирование параметров показа другого столбца  . . .
      NEWLine       вывод значений столбца с новой строки  . . . . . . .
      NEW_Value     описание переменной для значения столбца . . . . . .
      NOPRInt|PRInt выключение или включение печати столбца  . . . . . .
      NULl          символ(ы) для изображения NULL-значения  . . . . . .
      ON|OFF        включает или отключает признаки показа столбца . . .
      OLD_Value     описание переменной для значения столбца . . . . . .
      WRApped       перенос слишком широкого текста на следующую строку
      WORd_wrapped  аналогично WRAPPED, но без разрыва слов  . . . . . .
      TRUncated     округление широких значений с плавающей точкой . . .
   COMPute    Вычисляет и печатает итоговые строки отчета  . . . . . . .
   CONNect    Присоединяет заданного пользователя к ORACLE . . . . . . .
   COPY       Копирует данные из таблиц одной базы данных в другую . . .
   DEFine     Определяет пользовательскую переменную . . . . . . . . . .
   DEL        Удаляет текущую строку из буфера SQL . . . . . . . . . . .
   DESCribe   Показывает краткое описание таблицы  . . . . . . . . . . .
   DISConnect Завершает сеанс работы с базой данных (но не с SQL*Plus) .

                                 - 2 -
   EDIT       Вызывает системный редактор текста . . . . . . . . . . . .
   EXEcute    Выполняет отдельное утверждение PL/SQL . . . . . . . . . .
   EXIT       Завершает работу SQL*Plus  . . . . . . . . . . . . . . . .
   GET        Загружает файл в буфер SQL . . . . . . . . . . . . . . . .
   HELP       Выдает информацию о командах языка SQL*Plus, PL/SQL, SQL .
   HOst       Выполняет команду ОС, не выходя из SQL*Plus  . . . . . . .
   Input      Добавляет строку после текущей строки буфера SQL . . . . .
   List       Показывает строки буфера SQL . . . . . . . . . . . . . . .
   PAUse      Показывает заданное сообщение и ожидает нажатия Enter  . .
   PRInt      Показывает текущее значение связывающей переменной . . . .
   PROMPT     Посылает на экран сообщение или незаполненную строку . . .
   REMark     Начинает комментарий в командном файле . . . . . . . . . .
   Run        Запускает команду SQL или блок PL/SQL из буфера SQL  . . .
   RUNFORM    Запускает команду SQL*Forms  . . . . . . . . . . . . . . .
   SAVe       Сохраняет в файле содержимое буфера SQL  . . . . . . . . .
   SET        Устанавливает окружающую среду для текущей сессии  . . . .
                Возможно использование следующих параметров:
      ARRAYsize       число строк, выбираемых одновременно из БД . . . .
      AUTOcommit      управляет передачей изменений в БД . . . . . . . .
      BLOckterminator устанавливает символ, завершающий блок PL/SQL  . .
      CMDSep          устанавливает символ, разделяющий команды SQL*Plus
      COMpatibility   определяет версию ORACLE, с которой Вы связаны . .
      CONcat          устанавливает символ, ???  . . . . . . . . . . . .
      COPYCommit      запускает команду COMMIT после копирования N строк
      DEFine          определяет первый символ подставляемой переменной
      ECHO            включает (выключает) эхо для командного файла  . .
      EMBEDDED        устанавливает новую страницу для начала отчета . .
      ESCape          устанавливает ESCAPE-символ  . . . . . . . . . . .
      FEEDback        устанавливает число высвечиваемых записей запроса
      FLUsh           (не)разрешает вывод сообщений  . . . . . . . . . .
      HEAding         (не)разрешает вывод заголовков столбцов  . . . . .
      HEADSep         устанавливает символ разделителя заголовков  . . .
      LINesize        устанавливает ширину строки  . . . . . . . . . . .
      LONG            устанавливает максимальную ширину LONG значений  .
      LONGChunksize   устанавливает размер приращений LONG значений  . .
      MAXData         устанавливает максимальную ширину строки SQL*Plus
      NEWPage         число строк между нижним и верхним заголовком  . .
      NULL            символ(ы) для изображения NULL-значения  . . . . .
      NUMFormat       формат (по умолчанию) для вывода числовых значений
      NUMwidth        ширина (по умолчанию) для вывода числовых значений
      PAGESize        устанавливает число строк на странице  . . . . . .
      PAUse           показывает сообщение и ожидает нажатия Enter . . .
      RECSEP          установка символа сепаратора и места его вывода  .
      SCAN            разрешает обработку подстановки переменной . . . .
      SERVEROUTput    включает (выключает) вывод переменных на экран . .
      SHOWmode        показывает старую и новую установку параметров . .
      SPAce           число пробелов между столбцами при выводе таблицы
      SQLCase         установка регистра для всего выводимого текста . .
      SQLCOntinue     символы подсказки командной строки SQL*Plus  . . .
      SQLNumber       подсказка в виде номера строки для продолжения . .
      SQLPREfix       устанавливает символ префикса SQL  . . . . . . . .
      SQLPrompt       устанавливает подсказку командной строки . . . . .
      SQLTerminator   устанавливает символ завершения команды SQL  . . .
      SUFfix          расширение для имени командного файла для SQL*Plus
      TAB             использование символа табуляции для форматирования
      TERMout         разрешает (запрещает) отображение результата . . .
      TIme            отображает текущее время перед подсказкой  . . . .

                                 - 3 -
      TIMIng          выдает временную статистику по выполнению команды
      TRIMout         отсекает пробелы в конце каждой выводимой строки .
      UNDerline       устанавливает символ для подчеркивания заголовков
      VERify          выводит команду до и после подстановки переменной
      WRAp            разрешает (запрещает) перенос широких текстов  . .
   SHOw       Изображает установку системной переменной  . . . . . . . .
                Отображает параметры:
      ALL     все параметры  . . . . . . . . . . . . . . . . . . . . . .
      BTItle  текущее определение BTITLE . . . . . . . . . . . . . . . .
      ERRors  ошибки компиляции хранимой процедуры . . . . . . . . . . .
      LABEL   уровень безопасности для текущей сессии  . . . . . . . . .
      LNO     текущий номер строки . . . . . . . . . . . . . . . . . . .
      PNO     текущий номер страницы . . . . . . . . . . . . . . . . . .
      RELease номер редакции текущей версии ORACLE . . . . . . . . . . .
      SPOOl   является ли текущий вывод буферизированным . . . . . . . .
      SQLCODE код возврата последней выполненной команды SQL . . . . . .
      TTItle  текущее определение TTITLE . . . . . . . . . . . . . . . .
      USER    имя пользователя . . . . . . . . . . . . . . . . . . . . .
   SPOol      Копирует выходные данные в файл или на системный принтер .
   SQLPLUS    Запускает SQL*Plus . . . . . . . . . . . . . . . . . . . .
   STArt      Выполняет содержимое указанного командного файла . . . . .
   TIMIng     Производит анализ производительности команд  . . . . . . .
   TTItle     Размещает заголовок в конце каждой страницы отчета . . . .
   UNDEFine   Удаляет описание заданной пользовательской переменной  . .
   VARiable   Объявляет связывающую переменную . . . . . . . . . . . . .
   WHENEVER   Выход из SQL*Plus при возникновении ошибки в команде
     OSERROR     операционной системы  . . . . . . . . . . . . . . . . .
   WHENEVER   Выход из SQL*Plus при возникновении ошибки в команде
     SQLERROR    SQL или  блоке PL/SQL . . . . . . . . . . . . . . . . .
А. Форматирование данных
Б. Функции
В. Псевдо-столбцы
Г. Представления словарей данных Oracle
Д.
      1. Введение
   SQL*Plus  - это интерактивный,  управляемый командами интерфейс  с системой
Oracle, используемый для работы с базами данных (создание и изменение описания
таблиц, ввод и модификация данных,  отладка запросов и программ, некоторые ад-
министративные функции и т.п.), а также написания несложных отчетов. Для этого
существует следующий набор команд:
     @ ("at" - запуск командного файла),  @@ (двойное "at" - запуск вложенного
командного файла),  / (слэш - запуск команды из буфера SQL), ACCEPT (Принять),
APPEND (Добавить),BREAK (Прервать),BTITLE (Заголовок внизу),CHANGE (Изменить),
CLEAR (Очистить), COLUMN (Столбец), COMPUTE (Вычислить),  CONNECT (Соединить),
COPY (Копировать),  DEFINE (Определить),  DEL (Удалить  из  буфера),  DESCRIBE
(Описать), DISCONNECT (Разъединить), EDIT (Редактировать),EXECUTE (Выполнить),
EXIT (Выход),  GET (Прочитать в буфер),  HELP (Организовать помощь), HOST (Вы-
полнить команду операционной системы), INPUT (Ввести),  LIST (Вывести список),
PAUSE (Пауза),   PRINT (Печатать),   PROMPT (Подсказка),  REMARK (Примечание),
RUN (Выполнить),  SAVE (Сохранить), SET (Установить),  SHOW (Показать),  SPOOL
(Буферизация ввода/вывода), SQLPLUS (Запуск SQL*Plus),START (Запуск командного
файла), TIMING (Хронометраж), TTILE (Заголовок внизу),  UNDEFINE (Отменить оп-
ределение),   VARIABLE (Переменная),  WHENEVER OSERROR (Организовать обработку

                                 - 4 -
ошибки операционной системы), WHENEVER SQLERROR (Организовать обработку ошибки
выполнения SQL команды).
   Кроме того,  в SQL*Plus можно использовать команды языка SQL  и блоки языка
PL/SQL, являющегося процедурным расширением SQL Oracle.
   Большинство примеров,  иллюстрирующих использование команд SQL*Plus,  будет
приводиться по небольшой базе данных пользователя COOK (пароль - SOUP), кратко
описанной в учебном пособии:  Кириллов В.В.,  Громов Г.Ю.  Структуризированный
язык запросов (SQL). - СПб.: ИТМО, 1995. - 92 с.
      2. Ввод и редактирование команд языков SQL*Plus, SQL и PL/SQL
2.1. Командная строка SQL*Plus
   После запуска SQL*Plus (см. команду SQLPLUS) на экране появится приглашение
      SQL>_
для ввода командной строки. В эту строку можно ввести команду SQL, например,
      SQL> SELECT Блюдо,Основа FROM Блюда;
или блок команд PL/SQL, например,
      SQL> BEGIN
        2    :n := 1;
        3  END;
        4  .
или команду SQL*Plus, например,
      SQL> COLUMN ((Белки+Углев)*4.1+Жиры*9.3) HEADING 'Калорийность'
   Если текст команды  не помещается на одной строке,  то его можно разместить
в нескольких строчках (как, кстати, размещен выше блок PL/SQL):
          SQL> SELECT           |       SQL> COLUMN -
            2  Блюдо,Основа     |       > ((Белки+Углев)*4.1+Жиры*9.3) -
            3  FROM Блюда       |       > HEADING -
            4  ;                |       > 'Калорийность'
   В этом случае, каждая незавершенная строка команды SQL*Plus должна заканчи-
ваться символом "-", что инициирует вывод подсказки для строки продолжения: по
умолчанию это символ ">",  который может быть изменен на любой текст с помощью
команды SET SQLCONTINUE.
   Команды SQL и блоки PL/SQL  опознаются по ключевому слову (SELECT, DELETE и
т.п.)  и не требуют символа продолжения перед переходом на другую строку,  так
как "ждут" символа завершения команды:  ";" для команд SQL и "." для - PL/SQL.
В данном случае строка продолжения идентифицируется по умолчанию  своим поряд-
ковым номером. С помощью команды SET SQLNUMBER можно заменить номер на пригла-
шение "SQL>", которое также может быть изменено, например, на "Введите команду"
с помощью команды SET SQLPROMPT.
   Если во время ввода команды  обнаружена ошибка,  которая находится в строке
ввода,  то для ее исправления  можно стереть клавишей Backspace  конец текста,
включая неправильный текст,  и заново ввести правильный его вариант.   Если же
ошибка обнаружена  в предшествующих строках,  то придется либо заново вводить
всю команду, либо воспользоваться одним из редакторов текста.  Дело в том, что
текст вводимой (текущей) команды SQL  или блока PL/SQL попадает  в буфер SQL и

                                 - 5 -
хранится там до ввода другой команды. Текст буфера может модифицироваться либо
с помощью команд редактирования, описанных в  п. 2.2, либо с помощью системного
редактора, вызываемого командой EDIT (см. п 2.3). Команды же SQL*Plus не запо-
минаются в буфере и не могут модифицироваться текстовым редактором.
2.2. Использование строкового редактора SQL*Plus
   В таблице 2-1 показаны команды, позволяющие проверять, изменять или переза-
пускать команды SQL или блоки PL/SQL  без их нового ввода.  Большинство из них
(кроме CLEAR, LIST, RUN и SAVE) воздействуют на единственную строку,  называе-
мую текущей и помечаемую при просмотре (команда LIST) символом "*".
                                         Таблица 2-1  Команды редактирования
  Команда      Абривиатура Назначение
  ------------ ----------- --------------------------------------------------
  APPEND text  A text      добавляет указанный текст (text) в конец текущей
                             строки
  CHANGE       C/old/new/  заменяет старый текст (old) на новый (new) в
                             текущей строке
  CHANGE       C/text/     удаляет указанный текст (text) из текущей строки
  CLEAR BUFFER CL BUFF     удаляет все строки из буфера SQL
  DEL          (нет)       удаляет текущую строку, делая текущей следующую
                             строку
  INPUT        I           переводит в режим ввода строк после текущей строки
                             (режим заканчивается вводом пустой строки)
  INPUT        I text      добавляет после текущей строки строку, состоящую
                             из текста (text)
  LIST         L           проказывает все строки буфера SQL, делая текущей
                             последнюю строку
  LIST n       L n         показывает n-ю строку и делает ее текущей
  LIST m n     L m n       показывает строки от m-й до n-й, делая текущей
                             n-ю строку
  RUN или /    R или /     запускает текущую команду SQL
  SAVE file    SAV file    сохраняет содержимое буфера SQL в файле file
  GET file     GET file    загружает файл в буфер SQL
   Например, если был произведен построчный ввод (см. рис. 2.1,а) составляющих
команды
      SELECT Блюдо FROM Блюда WHERE Основа = 'Мясо';
и при этом была допущена ошибка (FRO вместо FROM), то после получения сообще-
ния об ошибке
      ORA-0093: FROM keyword not found where expeated
можно вывести  с помощью команды LIST (L) содержимое буфера SQL (рис. 2.1,б) с
целью его последующей корректировки.
   Сначала заметим,  что в "листинге" (и в буфере SQL) отсутствует точка с за-
пятой,  завершающая команду SQL. Это упрощает редактирование,  позволяя добав-
лять в конец команды новую строку без перестановки точки с запятой.
   Теперь для иллюстрации команд редактирования на рис. 2.1,в - 2.1,д показаны
некоторые способы исправления ошибки: добавление символа "M",  изменение "FRO"
на "FROM" и, наконец,  удаление строки с "FRO" и ввод за второй строкой строки
со словом "FROM".  На рис. 2.1,е показан ввод по команде INPUT (I)  нескольких
строк для расширения списка выводимой информации, на рис. 2.1,ж - вывод текста
буфера SQL и добавление в конец команды фразы "ORDER BY ename", а на рис.2.1,з
- "листинг" команды после внесения всех перечисленных изменений.

                                 - 6 -
 а)                   б)                  в)             г)
    SQL> SELECT          SQL> L              SQL> L 3       SQL> L 3
      2  Блюдо             1  SELECT           3* FRO         3* FRO
      3  FRO               2  Блюдо
      4  Блюда             3  FRO            SQL> A M       SQL> C/FRO/FROM/
      5  WHERE             4  Блюда            3* FROM        3* FROM
      6  Основа='Мясо'     5  WHERE
                           6* Основа='Мясо'
 д)             е)               ж)                    з)
    SQL> L 3       SQL> L 2         SQL> L                SQL> L
      3* FRO         2* Блюдо         1  SELECT             1  SELECT
                                      2  Блюдо              2  Блюдо
    SQL> DEL       SQL> I             3  ,Выход             3  ,Выход
                     3i ,Выход        4  ,Труд              4  ,Труд
    SQL> L 2         4i ,Труд         5  FROM               5  FROM
      2* Блюдо       5i               6  Блюда              6  Блюда
    SQL> I FROM    SQL>               7  WHERE              7  WHERE
                                      8* Основа='Мясо'      8  Основа='Мясо'
                                    SQL> I ORDER BY Блюдо   9* ORDER BY Блюдо
   Рис. 2.1. Использование строкового редактора SQL*Plus
   После этого можно использовать команду RUN (R) или / для выполнения команды
и получения следующего результата:
    SQL> /
    Блюдо            Выход Труд
    ---------------- ----- ----
    Бастурма          300.    5
    Бефстроганов      210     6
    Мясо с гарниром   250.    3
    Салат мясной      200.    4
    Суп харчо         500.    5
   Заметим, что при выполнении команды RUN перед выводом результата был бы вы-
веден текст команды, аналогичный тексту рис. 2.1,з, на с "R" а не "L" в первой
строке.
   Для сохранения текста исправленной команды (буфера SQL) в файле,  например,
с именем "dish.sql" следует выполнить команду
               SQL> SAV dish
расширение имени файла "sql",  характеризующее его как файл запроса, автомати-
чески добавляется системой и может быть изменено на другое, если оно будет яв-
но указано в тексте команды (например, dish.zap).
   Сохраненный запрос можно выполнить с помощью команд "START" или "@", напри-
мер,
               @dish
   Возможна также пересылка текста запроса  из файла в буфер SQL с помощью ко-
манды GET, например
               SQL> GET dish
Если не указано расширение имени файла,  то SQL*Plus ищет файл с заданным име-
нем и расширением SQL  (для примера dish.sql).  Отредактированный текст буфера

                                 - 7 -
можно сохранить с помощью команды SAVE и (или) выполнить с помощью команды RUN
(R) или /.
2.3. Использование внешнего (системного) редактора текста
   При выполнении команды
       SQL> EDIT
будет вызван текстовый редактор операционной системы, в который будет помещено
содержимое буфера SQL (например, строки 1 - 9 рис. 2.1,з). Редактирование тек-
ста буфера ничем не от редактирования любого текста в вызванном редакторе.  По
окончании редактирования обновленный текст следует сохранить в буфере (команда
SAVE текстового редактора) и, если необходимо, в файле (команда SAVE AS... тек-
стового редактора).  Отредактированную команду SQL можно исполнить введя в ко-
мандную строку "R", "/" или "@файл" (файл - имя командного файла, где сохранен
текст отредактированной команды).
   С помощью системного редактора можно создавать и редактировать файлы,  сос-
тоящие из любых допустимых последовательностей команд  SQL, PL/SQL и SQL*Plus,
а затем выполнять их с помощью команд  "START",  "@" или  "@@" (см. п. 3). Для
создания (редактирования) такого файла,  обычно называемого  командным файлом,
надо выполнить команду
       SQL> EDIT <имя файла>
2.4. Размещение комментариев в командных файлах
   Существует три способа ввода комментариев в текст командного файла: команда
REMARK SQL*Plus,  ввод двух дефисов (--) перед строкой комментария и помещение
текста комментария между ограничителями начала (/*) и конца (*/) комментария.
   REM и -- надо ставить перед каждой строкой многострочных комментариев,  а в
ограничители можно заключать любое число строк комментария. Команда REM должна
появляться в начале строки, а  --  может вводиться после текста комментируемой
команды или ее части.  При этом такие комментарии  не могут быть продолжены на
следующей строке.
   Отметим, что строку с командой SQL*Plus нельзя завершать комментариями, на-
чинающимися на --, так как - признак незавершенности команды (см. п. 2.1).
   Примеры:
   REM Замена заголовка             |   /* Замена заголовка
   --  В на Вид_блюда               |      В на Вид_блюда     */
   COL В HEA Вид_блюда              |   COL В HEA Вид_блюда
   SELECT     -- выбрать            |   SELECT     /* выбрать */
   Блюдо,Основа,Выход               |   Блюдо,Основа,Выход
   FROM Блюда -- из Блюда           |   FROM Блюда /* из Блюда */
   WHERE     -- где                 |   WHERE      -- где
   Основа='Мясо'                    |   Основа='Мясо'
   ORDER BY  -- упорядочить по      |   ORDER BY   -- упорядочить по
   Блюдо;                           |   Блюдо;
      3. Выполнение командных файлов
   Как уже указывалось выше,  командные файлы (файлы,  содержащие набор команд
языков SQL,  PL/SQL и  SQL*Plus) можно выполнять с помощью команд START, @ или
@@.
   Команды  START и @ эквивалентны.  В них после имени команды указывается имя
командного файла, а затем список аргументов (если они есть). В самих командных
файлах параметры,  значения которых будут замещаться  значениями аргументов из
указанного выше списка, должны иметь имена &1, &2, ...,  т.е. состоять из сим-

                                 - 8 -
вола амперсанда (&), за которым следует число. Это число определяет порядковый
номер аргумента в списке аргументов команд START или @.
   Если параметр представляет собой символьное значение или дату, то он должен
быть заключен в апострофы.
   Например, если в таблице Блюда необходимо отыскивать блюдо по основному про-
дукту (Основа) и трудоемкости приготовления (Труд), то можно создать командный
файл osn_trud.sql с содержимым вида:
     SELECT БЛ, Блюдо FROM Блюда WHERE Основа = '&1' AND Труд = &2;
Если требуется найти овощные блюда с трудоемкостью 3, то можно дать запрос:
     SQL> START osn_trud "Овощи" 3    или    SQL> @osn_trud "Овощи" 3
где аргументы, состоящие из несколько слов и (или) написанные русскими буквами,
следует заключать в кавычки.
   Наконец, если опустить список аргументов,  то при определенных условиях (см.
п. 4)  SQL*Plus запросит значения аргументов при выполнении  командного файла.
Например, если в файле osn_trud.sql сохранен вариант с параметрами &1 и &2 и их
значения  еще не определялись  в предыдущих вызовах  или были удалены командой
SET UNDEFINE, то вызов
     SQL> @osn_trud
приведет к появлению запроса
     Enter value for 1: _
После ввода значения  "Овощи" появится запрос на ввод следующего аргумента.  А
затем может быть показано выполняемое преобразование аргументов (см.SET VERIFY
в п. 4) и ответ на запрос, т.е. на экране терминала будет расположены строки:
     SQL> @osn_trud
     Enter value for 1: "Овощи"
     Enter value for 2: 3
     old 1: SELECT БЛ, Блюдо FROM Блюда WHERE Основа = '&1' AND Труд = &2
     new 1: SELECT БЛ, Блюдо FROM Блюда WHERE Основа = 'Овощи' AND Труд = 3
     БЛ Блюдо
     -- ----------------
      1 Салат летний
     17 Морковь с рисом
   Командный файл может содержать не только команды, но и вызовы командных фай-
лов, т.е. допустимы вложенные командные файлы и глубина вложенность не лимити-
рована. Когда в процессе выполнения командного файла SQL*Plus встречает коман-
ду START файл или @файл, то он начинает поиск указанного файла в текущем ката-
логе.  Если там его нет,  то поиск производится  во всех подкаталогах текущего
каталога.
   Команда @@файл отличается от @файл (START файл) только тем, что она отыски-
вает вложенные командные файлы только в текущем каталоге и с ее помощью нельзя
передать в командный файл значения аргументов.
      4. Динамически изменяющиеся программы
4.1. О динамически изменяющихся программах
   В п. 3 была показана возможность получения различных результатов по одной и
той же программе.  Еще большие возможности появились бы у пользователя если бы

                                 - 9 -
он смог динамически изменять  не только исходные данные,  но и структуру прог-
раммы (запроса, командного файла и т.п.). SQL*Plus предоставляет такую возмож-
ность с помощью, так называемых, подставляемых переменных.
   Подставляемую переменную размещают вместо какой-либо части  команды SQL или
SQL*Plus (списка столбцов, WHERE-фразы и т.п.) и перед выполнением команды вво-
дят в переменную тот или иной текст этой части. Текст замещает имя переменной,
изменяя тем самым структуру команды.
   Например, если существуют три переменные var1,var2 и var3, значения которых
соответственно равны: "БЛ, Блюдо", "Блюда" и "Основа = 'Овощи'", то по запросу
     SQL> SELECT &var1 FROM &var2 WHERE &var3;
SQL*Plus покажет (или не покажет - см. п. 4.3) преобразование команды
     old 1: SELECT &var1 FROM &var2 WHERE &var3
     new 1: SELECT БЛ, Блюдо FROM Блюда WHERE Основа = 'Овощи'
и выдаст следующие результаты
     БЛ Блюдо
     -- ----------------
      1 Салат летний
      3 Салат витаминный
     17 Морковь с рисом
     23 Помидоры с луком
   Если же создана переменная var4 со значением
         "БЛ, Блюдо FROM Блюда WHERE Основа = 'Овощи'"
то по команде
     SQL> SELECT &var4;
может быть показано преобразование команды
     old 1: SELECT &var4
     new 1: SELECT БЛ, Блюдо FROM Блюда WHERE Основа = 'Овощи'
и получен результат, аналогичный результату предыдущей команды.
   Легко заметить,  что при размещении переменной  в тексте изменяемой команды
к ее имени должен быть добавлен префикс & (далее будет рассмотрено и использо-
вание другого префикса -  &&).  Встретив имя переменной с префиксом,  SQL*Plus
подставляет вместо них значение этой переменной.
   Замещать можно любой текст команды  кроме ее первого слова (имени команды),
а также команд строкового редактора текста и команд,  где замена бессмысленна,
например, REMARK, TIMING и т.п.
4.2. Определение подставляемых переменных
   Для определения переменных используется команда DEFINE, которая позволяет:
   1. Определить текстовую (типа CHAR) переменную пользователя.
Например, для задания используемой выше переменной var4 использовалась команда
   SQL> DEFINE var4 = "БЛ, Блюдо FROM Блюда WHERE Основа = 'Овощи'"  .
Если присваемое переменной значение - это строка чисто буквенных латинских сим-
волов, то ее можно не заключать в кавычки.

                                 - 10 -
   2. Просмотреть значение и тип всех или указанной переменной.
Например,  если определены только указанные выше переменные var1 - var4 и надо
получить их описание, то надо дать команду DEFINE без аргументов:
   SQL> DEFINE
   DEFINE var1  =  "БЛ, Блюдо" (CHAR)
   DEFINE var2  =  "Блюда" (CHAR)
   DEFINE var3  =  "Основа = 'Овощи'" (CHAR)
   DEFINE var4  =  "БЛ, Блюдо FROM Блюда WHERE Основа = 'Овощи'" (CHAR)
По команде
   SQL> DEFINE var4
будет выведена последняя строка показанного выше списка, т.е. описание указан-
ной в DEFINE переменной var4.
   При помощи команды DEFINE может быть определена только переменная типа CHAR.
Команда ACCEPT  дает возможность неявно определить переменную типа NUMBER (см.
п. 4.5).
4.3. Управление подстановкой переменных
   Существует несколько команд, позволяющих изменять стандартные (по умолчанию)
режимы показа и подстановки переменных:
   SET SCAN   - разрешает (ON) или запрещает (OFF) подстановку переменных.
   SET DEFINE - определяет символ подстановки (по умолчанию "&") или действует
                аналогично SCAN (ON/OFF).
   SET VERIFY - разрешает (ON) или запрещает (OFF) показ преобразования коман-
                ды в процессе подстановки переменных (см. п. 4.1).
   SET CONCAT - определяет разделитель (по умолчанию - точка) текста окончания
                слова и имени переменной, содержащей начало этого слова.
   Поясним подробнее проблемы, возникающие при замене значением переменной на-
чала, середины или конца какого-либо слова.  При дополнении конца слова разде-
лителем символов слова и имени переменной является сам символ подстановки (&).
При установке переменной  в начало  или середину слова нельзя без специального
разделителя выявить,  где же закончилось имя переменной и где начались символы
слова.  Например,  если потребовалось получить из таблицы Продукты  сведения о
содержании белков, жиров и углеводов в луке и муке, то можно дать запрос
   SQL> SELECT Продукт,Белки,Жиры,Углев FROM Продукты
         WHERE Продукт IN ('Лук','Мука');
Используя для "сокращения" текста запроса подставляемую переменную x со значе-
нием "ук", преобразуем этот запрос следующим образом
   SQL> SELECT Продукт,Белки,Жиры,Углев FROM Продукты
         WHERE Продукт IN ('Л&x.','М&x.а');
Здесь для разделения частей слов и именем подставляемой переменной использова-
лись символы "&" и ".". Значение последнего можно изменить командой SET CONCAT.
4.4. Различия в использовании префиксов & и &&
   Если подставляемая переменная не определена к моменту ее использования,  то
SQL*Plus будет запрашивать значение переменной от пользователя. Например, если
не определена переменная x и дана команда
   SQL> SELECT Продукт,Белки,Жиры,Углев FROM Продукты
     2  WHERE Продукт IN ('Л&x.','М&x.а');

                                 - 11 -
на экране терминала появится запрос
   Enter value for x: _
и после ввода значения "ук" вновь появится аналогичный запрос. Когда же вторич-
но будет введено значение "ук", команда будет выполнена и на экране сохранятся
строки:
   SQL> SELECT Продукт,Белки,Жиры,Углев FROM Продукты
     2  WHERE Продукт IN ('Л&x.','М&x.а');
   Enter value for x: "ук"
   Enter value for x: "ук"
   old 1: SELECT Продукт,Белки,Жиры,Углев FROM Продукты
          WHERE Продукт IN ('Л&x.','М&x.а')
   new 1: SELECT Продукт,Белки,Жиры,Углев FROM Продукты
          WHERE Продукт IN ('Лук','Мука')
   ПРОДУКТ БЕЛКИ ЖИРЫ УГЛЕВ
   ------- ----- ---- -----
   Лук        17    8    95
   Мука      106   13   732
Если теперь запросить с помощью команды DEFINE список переменных, то среди них
не будет переменной x - система не сохраняет значений переменных с префиксом &,
введенных с терминала.
   В тех случаях,  когда вводимое значение подставляемой переменной необходимо
сохранить, следует использовать префикс &&. Например,
   SQL> SELECT Продукт,Белки,Жиры,Углев FROM Продукты
     2  WHERE Продукт IN ('Л&x.','М&x.а');
   Enter value for x: "ук"
   old 1: SELECT Продукт,Белки,Жиры,Углев FROM Продукты
          WHERE Продукт IN ('Л&x.','М&x.а')
   new 1: SELECT Продукт,Белки,Жиры,Углев FROM Продукты
          WHERE Продукт IN ('Лук','Мука')
             ...
   Здесь не потребовалось вторично вводить значения переменной x,  так как оно
сохранилось в памяти системы после первого ввода.
4.5. Связь с пользователем и операционной системой
   В предыдущем пункте было показано, как SQL*Plus запрашивает от пользователя
ввода значения неопределенной  подставляемой переменной.  Кроме этого SQL*Plus
имеет еще три команды для организации связи с пользователем:
  PROMPT - выдает на экран заданное сообщение или подсказку для пользователя,
  ACCEPT - запрашивает значение текстовой или числовой переменной,
  PAUSE  - выдает на экран заданное сообщение и ожидает нажатия клавиши Enter.
   Существует команда HOST,  позволяющая выполнять командную строку операцион-
ной системы без выхода из SQL*Plus.
   Синтаксис и примеры использования всех этих команд приведены в их описании.

CREATE TABLE dept
	(deptno    NUMBER(2)      CONSTRAINT pk_dept PRIMARY KEY,
	 dname     VARCHAR2(14),
	 loc       VARCHAR2(13) )
CREATE TABLE emp
	(empno     NUMBER(4)      CONSTRAINT pk_emp PRIMARY KEY,
	 ename     VARCHAR2(10),
	 job       VARCHAR2(9),
	 mgr       NUMBER(4),
	 hiredate  DATE,
	 sal       NUMBER(7,2),
	 comm      NUMBER(7,2),
	 deptno    NUMBER(2)    CONSTRAINT fk_deptno REFERENCES emp )
CREATE TABLE bonus
	(ename     VARCHAR2(10),
	 job       VARCHAR2(9),
	 sal       NUMBER,
	 comm      NUMBER )
CREATE TABLE salgrade
	(grade     NUMBER,
	 losal     NUMBER,
	 hisal     NUMBER )
SELECT * FROM dept
DEPTNO  DNAME      LOC
------- ---------- ---------
10      ACCOUNTING NEW YORK
20      RESEARCH   DALLAS
30      SALES      CHICAGO 40      OPERATIONS BOSTON
SELECT * FROM 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 19-APR-87   3000             20
7839  KING    PRESIDENT        17-NOV-81   5000             10
7844  TURNER  SALESMAN    7698 08-SEP-81   1500             30
7876  ADAMS   CLERK       7788 23-MAY-87   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
SELECT * FROM salgrade
GRADE LOSAL HISAL
----- ----- -----
1     700   1200
2     1201  1400
3     1401  2000
4     2001  3000
5     3001  9999

Может пригодится:


Автор:
Прочитано: 5627
Рейтинг:
Оценить: 1 2 3 4 5

Комментарии: (1)

Прислал: Valery
Cool

Добавить комментарий
Ваше имя*:
Ваш email:
URL Вашего сайта:
Ваш комментарий*:
Код безопастности*:

Рассылка новостей
Рейтинги
© 2007, Программирование Исходники.Ру