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






                  Справочное руководство по языку SQL        5-42


E         ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ                   F

E         CREATE CLUSTER                                F

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

         Предпосылки Необходимо иметь привилегию RESOURCE. Для созда-
                    ния кластера для другого пользователя Вам необхо-
                    димо иметь привилегию DBA.

         Синтаксис  CREATE CLUSTER [user.]cluster
                        (column datatype [,column datatype] ...]
                        [PCTUSED integer] [PCTFREE integer]
                        [SIZE integer]
                        [INITRANS integer] [MAXTRANS integer]
                        [TABLESPACE tablespace]
                        [STORAGE storage]

         Ключевые   user             имя владельца кластера
         слова и    cluster          имя кластера
         параметры  column           имя одного или нескольких столб-
                                     цов, составляющих ключ кластера.
                                     Определение ключа  кластера дано
                                     в "Замечаниях по использованию".
                    datatype         один из  действительных в ORACLE
                                     типов данных,  описанных в Главе
                                     1 "Реляционная модель".  Заметь-
                                     те, что NULL и NOT NULL можно не
                                     специфицировать.
                    PCTUSED integer  специфицирует   предел,  который
                                     ORACLE  будет  использовать  для
                                     определения, можно ли в блок до-
                                     бавлять еще  строки.  integer  -
                                     это целое число,  интерпретирую-
                                     щееся  как  процент.  За  полным
                                     описанием PCTUSED обратитесь ни-
                                     же к оператору CREATE TABLE.
                    PCTFREE integer  специфицирует память, резервиру-
                                     емую в каждом блоке кластера для
                                     будущего расширения.  integer  -
                                     это целое число,  интерпретирую-
                                     щееся  как  процент.  За  полным
                                     описанием PCTFREE обратитесь ни-
                                     же к оператору CREATE TABLE.
                    SIZE             специфицирует среднее   значение
                                     памяти, необходимой для хранения
                                     всех строк с одинаковым значени-
                                     ем ключа кластера.
                    INITRANS integer  специфицирует  начальное  коли-

                                   -- 126 --



                                     чество  параллельных транзакций,
                                     пытающихся изменить блоки,  при-
                                     надлежащих   данному   кластеру.
                                     Описание  параметра INITRANS да-
                                     ется  ниже  в   разделе   CREATE
                                     TABLE.
                                     
                      Справочник по SQL - операторам         5-43


                    MAXTRANS integer специфицирует максимальное число
                                     параллельных транзакций,  пытаю-
                                     щихся изменить любой блок,  при-
                                     надлежащий   кластеру.  Описание
                                     параметра MAXTRANS дается ниже в
                                     разделе CREATE TABLE.
                    TABLESPACE       специфицирует табличное   прост-
                    tablespace       ранство, которому будет принадле-
                                     жать кластер.
                    STORAGE storage  определяет,   как   блоки  будут
                                     распределяться для кластера. См.
                                     ниже описание фразы STORAGE.


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

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

                    Общее правило  -  кластеризовать  таблицы,  часто
                    объединяемые вместе.  Хотя  кластеризация   может
                    снизить время доступа при объединении, она может
                    его увеличить  при  полном  сканировании  таблиц,
                    входящих в мультитабличные кластеры.  Перед клас-
                    теризацией Вы должны рассмотреть, насколько часто
                    выполняется объединение  таблиц в запросах и нас-
                    колько часто выполняется их  полное  сканирование
                    (равно как и негативное влияние  кластеризации на
                    выполнение операций INSERT,  UPDATE, DELETE). Для
                    получения дополнительной информации о преимущест-
                    вах кластеризации и связанных с ней вопросах  об-
                    ратитесь к  Главе 2 "Настройка SQL - операторов и
                    приложений" документа "ORACLE RDBMS Руководство о
                    настройке производительности".

         Ключ       Ключ кластера  определяет,  каким  образом ORACLE
         кластера   будет группировать строки в  кластере.  Строки  с
                    одинаковым значением  ключа  кластера будут физи-
                    чески храниться вместе.


                                   -- 127 --



                    Столбцы, определяемые в операторе  CREATE CLUSTER,
                    становятся  ключом  кластера.  Эти столбцы должны
                    соответствовать и по типу  данных  и  по  размеру
                    столбца  каждой кластеризованной таблицы. Столбцы
                    таблиц, составляющие ключ кластера, не обязатель-
                    но должны совпадать по имени.

                    Каждое отличающееся значение ключа кластера запо-
                    минается лишь однажды вне  зависимости  от  числа
                    строк, в  которых  оно присутствует.  Это экономит
                    дисковую память и  увеличивает производительность
                    многих операций.
                    
                  Справочное руководство по языку SQL        5-44













































                                   -- 128 --




                    Каждый значение ключа кластера включает в себя:

                       * ROWID (19 байтов)
                       * внутренняя   память   для   кластеризованных
                         столбцов (длина  в  байтах  каждого  столбца
                         плюс 1 байт заголовка)

                    Например, для следующего оператора:

                    CREATE CLUSTER XYZ (ABC CHAR(5), MNO CHAR(7))

                    создается ключевое значение из 33 байтов:

                       * 19 байтов на ROWID
                       * 5 и 7 байтов на столбцы ABC и MNO
                       * 2 байта на заголовки для обоих столбцов

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

         Size       ORACLE использует параметр SIZE  для  определения
                    памяти,  резервируемой для строк, соответствующих
                    одному ключу кластера  и,  следовательно,  макси-
                    мального  количества ключей кластера на один блок
                    ORACLE. Если SIZE не является делителем количест-
                    ва байтов в блоке ORACLE, система будет использо-
                    вать  ближайший  следующий  делитель.  Если  SIZE
                    больше  размера  физического блока ORACLE,  будет
                    браться значение, равное блоку (другими словами -
                    как минимум один ключ на блок).

                    Если Вы опустили фразу SIZE, ORACLE назначит один
                    ключ на физический блок.

                    Кроме того,  при  назначении  реального  значения
                    SIZE для  кластера  ORACLE  принимает во внимание
                    длину ключа кластера (больший ключ требует  боль-
                    шего SIZE). Посмотреть действительный размер SIZE
                    можно, запросив столбец KEY_SIZE  таблицы словаря
                    данных USER_CLUSTERS.

                    Хотя максимальное  число ключей кластера и фикси-
                    ровано для данного кластера, ORACLE не резервиру-
                    ет одинаковую память для каждого ключа. Например,
                    если Вы специфицировали SIZE,  приведший к  шести
                    ключам на  блок ORACLE,  6 ключей кластера вместе
                    со своими строками может быть любого размера, по-
                    ка их общая длина не превысит размер блока. Ключи
                    кластера переменной  длины  позволяют  запоминать
                    данные более  эффективно,  нежели - фиксированной
                    длины, так как  данные,  запоминающиеся  на  один

                                   -- 129 --



                    ключ кластера редко бывают фиксированными.
                    
                      Справочник по SQL - операторам         5-45


                    Значение SIZE,  меньшее средней длины  данных  на
                    ключ кластера,  может  привести к распространению
                    данных одного ключа на несколько блоков. И наобо-
                    рот, чересчур  большое значение приведет к беспо-
                    лезной трате памяти базы.

         Добавление Таблицы добавляются к кластеру  с  помощью  фразы
         таблиц к   CLUSTER  оператора  CREATE  TABLE.  Кластер может
         кластеру   включать в себя до 16 таблиц, хотя затраты произ-
                    водительности  растут  после  кластеризации 4 - 5
                    таблиц. Таблицы с данными типа LONG  также  могут
                    кластеризоваться.

                    Все таблицы кластера используют параметры распре-
                    деления памяти  кластера,  включающие  следующие:
                    PCTUSED, PCTFREE, INITRANS, MAXTRANS, TABLESPACE,
                    STORAGE.

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

                    Индекс кластера  необходимо создать до выполнения
                    каких-либо DML - операций над его  таблицами. Его
                    необходимо создать  вручную,  пользуясь следующим
                    синтаксисом:

                    CREATE INDEX iname ON CLUSTER cname

                    Обратите внимание,  что при создании  индекса  не
                    задается имя столбца так как индекс кластера соз-
                    дается на ключе кластера, определенном оператором
                    CREATE CLUSTER. См. также оператор CREATE INDEX.
                    
                  Справочное руководство по языку SQL        5-46




















                                   -- 130 --




         Пример     Чтобы создать кластер PERSONNEL,  содержащий таб-
                    лицы DEPT и EMP,  специфицировав параметры памяти
                    для кластеризованных таблиц, введите:

                    CREATE CLUSTER PERSONNEL (department_number NUMBER)
                      STORAGE (INITIAL 100K NEXT 50K PCTINCREASE 10)

                    Для кластеризации в нем таблиц EMP и DEPT следует
                    ввести:

                    CREATE TABLE EMP
                       (empno NUMBER NOT NULL,
                        deptno NUMBER NOT NULL,
                        ... )
                      CLUSTER PERSONNEL (deptno)

                    CREATE TABLE DEPT
                       (deptno NUMBER NOT NULL,
                        dname CHAR(9),
                        loc CHAR(9))
                      CLUSTER PERSONNEL (deptno)

                    И наконец, создайте индекс кластера:

                    CREATE INDEX idx_personnel ON CLUSTER personnel

                    Создав индекс кластера, Вы можете вставлять стро-
                    ки в таблицы EMP и DEPT.

         Связанные  Операторы CREATE INDEX и CREATE TABLE; фраза STORAGE
         темы
                    
                      Справочник по SQL - операторам         5-47

























                                   -- 131 --




E    ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ                        F

E    CREATE DATABASE                                    F
                                                                 F
    Назначение   Создать базу данных с возможностями:

                 * установки  максимального  количества  экземпляров,
                 файлов базы данных и файлов журнала повторного вы-
                 полнения
                 * указания имен и размеров базы данных и файлов жур-
                 нала повторного выполнения
                 * выбора режима  использования  журнала  (ARCHIVELOG
                 или NOARCHIVELOG)

    Предпосылки  Требуется привилегия DBA

                 Предупреждение: Эта команда готовит базу данных для
                 начального использования и УДАЛЯЕТ ВСЕ ДАННЫЕ ИЗ СУ-
                 ЩЕСТВУЮЩИХ ФАЙЛОВ. Пользуйтесь этой командой  только
                 узнав все ее возможности.

    Синтаксис    CREATE DATABASE [database]
                     [CONTROLFILE REUSE]
                     [LOGFILE filespec [,filespec] ...]
                     [MAXLOGFILES integer ]
                     [DATAFILE filespec [,filespec] ...]
                     [MAXDATAFILES integer ]
                     [MAXINSTANCES integer ]
                     [ARCHIVELOG | NOARCHIVELOG]
                                   ------------
                     [EXCLUCIVE]
                      --------Д
    Ключевые слова database       назначает состоящее из не более чем
    и параметры                   восьми символов имя базы данных.
                                  Умалчиваемое имя базы  специфициру-
                                  ется в параметре DB_NAME файла INIT.
                                  ORA. Имя базы данных проверяется по
                                  управляющему файлу в момент монтиро-
                                  вания и открытия.

                 filespec         спецификация файла базы данных в
                                  форме:
                                  'filename' [SIZE integer [K|M][REUSE]

                 SIZE integer     указывает SIZE в байтах. Отсутствие
                                  этого  параметра  предполагает   по
                                  умолчанию использование файлов базы
                                  размером 10  мегабайтов  и  журнала
                                  регистрации  -  по  500 килобайтов.
                                  Если указано "К", integer умножает-
                                  ся на 1024, "М" - на 1048576.

                 REUSE            указывает, что  будут  повторно ис-
                                  пользоваться  существующие   файлы,
                                  информация в них полностью разруша-
                                  ется.


                                   -- 132 --



    
                  Справочное руководство по языку SQL        5-48

























































                                   -- 133 --



                 CONTROLFILE      указывает, что существующие  управ-
                 REUSE            ляющие файлы, специфицируемые пара-
                                  метром CONTROL_FILES          файла
                                  INIT.ORA, будут использоваться пов-
                                  торно, игнорируя и переписывая  лю-
                                  бую содержавшуюся в них информацию.
                                  Не используется,  при первом созда-
                                  нии базы данных.
                 LOGFILE          специфицирует один или  более  фай-
                 filespec         лов, которые  будут  использоваться
                                  для журнала  повторного выполнения.
                                  Если эта опция не указана, по умол-
                                  чанию создаются два файла с  имена-
                                  ми, зависящими от конкретной опера-
                                  ционной системы.
                 MAXLOGFILES      специфицирует          максимальное
                 integer          количество файлов  журнала, которые
                                  когда-либо будут  использоваться  в
                                  этой базе данных.  Это число  уста-
                                  навливает абсолютный лимит,  перек-
                                  рывая параметр LOG_FILES. Это число
                                  не может  быть  увеличено кроме как
                                  при пересоздании   базы.   Диапазон
                                  значений 2-256. Потери при указании
                                  большего числа незначительны и вли-
                                  яют лишь на размер управляющих фай-
                                  лов.
                 DATAFILE         специфицирует одно  или  более имен
                 filespec         файлов, которые будут использовать-
                                  ся для  хранения  данных.  Если  не
                                  указан, создается один файл с  име-
                                  нем, зависящим от операционной сис-
                                  темы. Все файлы,  указанные в  этом
                                  аргументе будут  принадлежать  таб-
                                  личному пространству SYSTEM.
                 MAXDATAFILES     специфицирует максимальное    коли-
                 integer          чество файлов базы  данных, которые
                                  когда-либо   будут  использоваться.
                                  Это число  устанавливает абсолютный
                                  лимит,      перекрывая     параметр
                                  DB_FILES.  Это число не может  быть
                                  увеличено  кроме как при пересозда-
                                  нии базы. Диапазон значений 1-255 и
                                  зависит  от  операционной  системы.
                                  Потери при указании  большего числа
                                  файлов  невелики  и влияют незначи-
                                  тельно только на размер управляющих
                                  файлов. Умалчиваемое значение 32.
                 MAXINSTANCES     указывает максимальное   количество
                 integer          экземпляров, которые   одновременно
                                  могут монтировать и открывать базу.
                                  Это число  устанавливает абсолютный
                                  лимит, перекрывая параметр INSTANCES
                                  Диапазон значений 1-255.
         
                      Справочник по SQL - операторам         5-49



                                   -- 134 --




                 ARCHIVELOG       специфицирует начальный  режим  ис-
                 NOARCHIVELOG     пользования файлов  журнала повтор-
                                  ного выполнения.  Режим может  быть
                                  изменен с  помощью  ALTER DATABASE.
                                  По умолчанию            принимается
                                  NOARCHIVELOG, что  означает повтор-
                                  ное использование файлов без  пред-
                                  варительного архивирования;   такой
                                  журнал может  использоваться только
                                  для восстановления   экземпляра   и
                                  бесполезен для восстановления носи-
                                  теля. ARCHIVELOG означает,  что пе-
                                  ред повторным  использованием файлы
                                  журнала будут  архивироваться,  что
                                  дает возможность их  применения для
                                  восстановления как  экземпляра, так
                                  и носителя.

                 EXCLUSIVE        специфицирует, как  будет  монтиро-
                                  ваться база после завершения созда-
                                  ния. EXLUSIVE указывает, что к базе
                                  данных может обратиться только один
                                  экземпляр. Так   как   база  данных
                                  всегда создается в режиме EXCLUSIVE,
                                  это ключевое слово не обязательно.

                                  Для доступа  к базе данных несколь-
                                  ких экземпляров ее необходимо  раз-
                                  монтировать  и монтировать в режиме
                                  SHARED,  используя опции DISMOUNT и
                                  MOUNT    SHARED   оператора   ALTER
                                  DATABASE.

    Замечания по Оператор CREATE DATABASE будет удалять все данные из
    использова-  указанных файлов базы данных для подготовки их к на-
    нию          чальному использованию.   Следовательно,  если  этот
                 оператор применяется к существующей базе  данных, ее
                 содержание будет утеряно.

    Примеры      Чтобы создать  базу  данных,  используя умалчиваемые
                 значения для всех аргументов, введите:

                 CREATE DATABASE

                 Создание с полным указанием аргументов:

                 CREATE DATABASE NEWTEST
                     CONTROLFILE REUSE
                     LOGFILE 'LOGONE.LOG' SIZE 50000,
                             'LOGTWO.LOG' SIZE 50000
                     MAXLOGFILES 5
                     DATAFILE 'DBONE.DAT' 100000
                     MAXDATAFILES 10
                     MAXINSTANCES 2
                     ARCHIVELOG
                     EXCLUSIVE


                                   -- 135 --



    Связанные    Операторы ALTER  DATABASE,  CREATE ROLLBACK SEGMENT,
                 CREATE TABLESPACE;  команды   SQL*DBA:   STARTUP   и
                 SHUTDOWN (в  Приложении  В - "Справочник по SQL*DBA"
                 документа "ORACLE RDBMS  Руководство  администратора
                 базы данных").
                 
                  Справочное руководство по языку SQL        5-50




















































                                   -- 136 --




E         ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ                   F

E         CREATE DATABASE LINK                          F


         Назначение Создание связи из локальной базы данных с пользо-
                    вателем в удаленной базе.  Межбазовая связь может
                    быть как с базой данных ORACLE, так и нет, напри-
                    мер - DB2 фирмы IBM.

         Предпосылки Необходимо  иметь  доступ к имени пользователя в
                    удаленной базе  данных.  Межбазовые  связи   типа
                    PUBLIC может  делать только пользователь с приви-
                    легией DBA.  И на локальной,  и на удаленной базе
                    данных должно   быть   инсталировано  программное
                    обеспечение SQL*Net.

         Синтаксис  CREATE [PUBLIC] DATABASE LINK link
                         [CONNECT TO user IDENTIFIED BY password]
                         USING 'connect_string'

         Ключевые   PUBLIC           Если опция PUBLIC опущена,  соз-
         слова и                     дается личная  связь  (доступная
         параметры                   только пользователю,  ее создав-
                                     шего). Если  же эта опция специ-
                                     фицирована, связь     становится
                                     доступной всем  пользователям за
                                     исключением тех, кто создал лич-
                                     ную связь с тем же именем.

                    link             имя, которое  дается создаваемой
                                     связи.

                    user,password    действительное  имя пользователя
                                     и пароль   в   специфицированной
                                     удаленной базе данных.

                    connect_string   спецификация удаленной базы дан-
                                     ных, доступной   через  SQL*Net.
                                     Информация о    специфицировании
                                     удаленных баз  данных приводится
                                     в "Руководстве  пользователя  по
                                     SQL*Net" для  конкретного прото-
                                     кола передачи данных.

         Замечания  Создав межбазовую связь,  Вы можете обращаться  к
         по исполь- таблицам удаленной базы в запросах и подзапросах,
         зованию    ссылаясь на нее во фразе FROM с тем  же эффектом,
                    что и  при  прямом  подключении  к  определенному
                    пользователю в удаленной базе.

                    Если фраза, содержащая имя пользователя и пароль,
                    отсутствует, будет  использоваться  имя  и пароль
                    текущего пользователя.  Например,  если SCOTT вы-
                    даст команду создания связи и не задаст пользова-



                                   -- 137 --



                    теля и пароль, ORACLE будет использовать для дос-
                    тупа к  удаленной  базе  данных  имя пользователя
                    SCOTT и его пароль.

                    Удаленные таблицы специфицируются  добавлением  к
                    таблице имени  связи  (@linkname)  во  фразе FROM
                    оператора SELECT.
                    
                      Справочник по SQL - операторам         5-51


















































                                   -- 138 --




                    Запросы и подзапросы,  выполняемые через межбазо-
                    вую связь, подчиняются следующим ограничениям:

                       * Количество межбазовых связей,  которые можно
                         использовать в одном запросе,  в большинстве
                         систем ограничиваются четырьмя.  Этот предел
                         можно расширить, увеличив значение параметра
                         OPEN_LINKS файла INIT.ORA.
                       * Через  связь  не  могут быть выбраны столбцы
                         типа LONG.
                       * В  древовидных  структурах  (используя фразу
                         CONNECT BY):

                           * оператор PRIOR не может  применяться  во
                             фразах, отличных от CONNECT BY
                           * фраза START WITH не может содержать под-
                             запросов
                           * ни фраза CONNECT BY,  ни START  WITH  не
                             может содержать функции USERENV('ENTRYID'),
                             ROWNUM и   определенные    пользователем
                             функции.

         Пример     Чтобы определить межбазовую связь BOSTON, которая
                    ссылается на пользователя SCOTT с паролем TIGER в
                    базе D:BOSTON-MFG, введите:

                    CREATE DATABASE LINK BOSTON
                       CONNECT TO SCOTT IDENTIFIED BY TIGER
                       USING 'D:BOSTON-MFG'

                    После создания  межбазовой связи Вы можете запра-
                    шивать таблицы пользователя SCOTT следующим обра-
                    зом:

                    SELECT * FROM EMP@BOSTON

                    Кроме того,  Вы можете запрашивать таблицы и дру-
                    гих пользователей.  Но следующий пример предпола-
                    гает, что SCOTT имеет доступ к таблице DEPT поль-
                    зователя ADAMS:

                    SELECT * FROM ADAMS@BOSTON

                    Предыдущий запрос     будет     соединяться     с
                    пользователем SCOTT в удаленной базе и затем зап-
                    рашивать таблицу DEPT пользователя ADAMS.

                    Для скрытия факта,  что таблица EMP  пользователя
                    SCOTT находится на удаленной базе, можно восполь-
                    зоваться синонимом. Следующий оператор приведет к
                    тому, что дальнейшие запросы из таблицы EMP будут
                    обращаться к удаленной базе данных:

                    CREATE SYNONYM EMP FOR SCOTT.EMP@BOSTON




                                   -- 139 --



         Связанные  Операторы CREATE SYNONYM и SELECT.
         темы
                                                      
                  Справочное руководство по языку SQL        5-52


E         ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ                   F

E         CREATE INDEX                                  F

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

         Предпосылки Необходимо быть владельцем таблицы или  иметь  к
                    ней привилегию INDEX или иметь привилегию DBA.

         Синтаксис  CREATE [UNIQUE] INDEX index ON
                     {table (column [ASC|DESC][,column [ASC|DESC]]...]
                     | CLUSTER cluster}
                     [INITRANS n] [MAXTRANS n]
                     [TABLESPACE tablespace]
                     [STORAGE storage]
                     [PCTFREE n]
                     [NOSORT]

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

                    index            имя создаваемого индекса.  Как и
                                     для других объектов базы данных,
                                     имя индекса должно быть уникаль-
                                     ным среди объектов данного поль-
                                     зователя.

                    table            имя существующей   таблицы,  для
                                     которой создается индекс.

                    column           имя столбца таблицы.

                    ASC              допустим для совместимости с DB2,
                    DESC             хотя в любом случае индексы соз-
                                     даются в порядке возрастания.

                    CLUSTER          имя кластера, для которого будет
                    cluster          создаваться индекс кластера.

                    INITRANS         (См. ниже  в этой главе описание
                    MAXTRANS         параметров INITRANS и MAXTRANS в
                                     операторе CREATE TABLE).

                                   -- 140 --



                    TABLESPACE       имя табличного  пространства,  в
                    tablespace       котором будет содержаться индекс.

                    STORAGE storage  (См. ниже описание фразы STORAGE)
                                     
                      Справочник по SQL - операторам         5-53





















































                                   -- 141 --




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

                    NOSORT           указывает системе  ORACLE,   что
                                     данные в  таблице  расположены в
                                     возрастающем порядке и, следова-
                                     тельно, при  сортировке  индекса
                                     строки сортировать не надо.

         Замечания  ORACLE может воспользоваться  индексами  с  целью
         по исполь- увеличения производительности в следующих случаях:
         зованию
                         * при доступе к таблицам по индексным столб-
                           цам
                         * при  поиске строк со значениями, заданными
                           для индексированных столбцов.

                    Однако, индекс замедляет операции  по добавлению,
                    удалению и изменению строк, так как данные индек-
                    са также нуждаются в сопровождении.

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

                    При необходимости ORACLE может  использовать весь
                    индекс или его начальную часть.  Допустим, индекс
                    IDX1 создан на столбцах A,B,C таблицы TAB1 (в по-
                    рядке A,B,C).  ORACLE может использовать этот ин-
                    декс для ссылки на столбцы A,B,C (полный индекс),
                    на столбцы A,B и на столбец C.  Ссылка на столбцы
                    B,C не может использовать индекс IDX1.  Но Вы ко-
                    нечно же  можете создать индекс только для столб-
                    цов B и C.

         Несколько  Для одной таблицы можно создать индексы для  раз-
         индексов   личных столбцов    (или    различных   комбинаций
         в таблице  столбцов). Имейте в виду,  что каждый индекс сни-
                    жает производительность  модификации  данных.  На
                    количество индексов,  которые можно  создать  для
                    одной таблицы, ограничений не накладывается.

         Внутренний Элемент индекса для заданного столбца состоит из:
         формат
         индекса        * ROWID строк (6 байтов для уникального или 7
                          байтов - для неуникального индекса)
                        * внутренней  памяти для индексируемых столб-
                          цов (длина в байтах  каждого  столбца  плюс
                          один байт дополнительно)
                           
                  Справочное руководство по языку SQL        5-54



                                   -- 142 --




                    Например, неуникальный индекс для  столбца  ENAME
                    CHAR(10) требует 18 байтов:

                        * 7 байтов на ROWID
                        * 10 байтов - длина столбца
                        * 1 дополнительный байт

                    Максимально допустимый  размер  элемента  индекса
                    зависит от Вашей операционной  системы.  Описание
                    внутреннего формата данных различного типа в сис-
                    теме ORACLE можно найти в Главе 6 -  "Типы данных
                    ORACLE" документа "ORACLE RDBMS Руководство адми-
                    нистратора базы данных".

         Уникальные Создавая уникальный индекс для одного  или группы
         индексы    столбцов, Вы гарантируете, что в таблице не будет
                    двух одинаковых по этим столбцам строк.  Для таб-
                    лицы можно  создать любое число уникальных индек-
                    сов; большинство таблиц имеют  как  минимум  один
                    уникальный индекс:  индекс на основном ключе таб-
                    лицы.

         Соглашения Каждый индекс должен следовать стандартам  имено-
         по имено-  вания системы  ORACLE и отличаться от других имен
         ванию      объектов данного  пользователя.  Ниже  приводятся
                    дополнительные рекомендации  по именованию индек-
                    сов:

                          * включайте в имена индексов имена таблиц и
                            столбцов, на которых он создается.
                          * предваряйте имя индекса буквой "I".
                          * разделяйте  пунктуацией  имена  таблиц  и
                            столбцов.

                    Например, индекс,  созданный на  столбцах  SAL  и
                    COMM таблицы EMP можно назвать: I_EMP$SAL_COMM.

         Производи- В  момент создания индекса ORACLE будет оставлять
         тельность  незаполненным PCTFREE от блока индекса. Например,
                    если PCTFREE равен 20,  каждый блок индекса будет
                    заполнен на 80%  своей емкости.  Большее значение
                    PCTFREE  позволяет  выполнить  большее количество
                    вставок перед тем, как индексные блоки будут раз-
                    деляться  (что  требует  дополнительных временных
                    затрат).  Небольшое значение PCTFREE подходит для
                    статичных таблиц, в которых маловероятно разделе-
                    ние индексных блоков.  Маленький индекс влечет за
                    собой ускорение его просмотра.

                    При начальном  заполнении  таблицы в общем случае
                    будет быстрее,  если Вы создадите таблицу, запол-
                    ните ее,  а  затем  создадите индекс.  Если же Вы
                    создали индекс до заполнения  таблицы,  он  будет
                    модифицироваться при вставке каждой строки.
                  
                      Справочник по SQL - операторам         5-55


                                   -- 143 --




         NOSORT     Опция NOSORT может существенно снизить время, не-
                    обходимое  для  создания индекса.  При нормальном
                    создании индекса сперва  таблица  сортируется  по
                    индексируемым столбцам,  а уже затем строится ин-
                    декс.  На сортировку обычно тратится значительная
                    часть времени построения индекса.  Если же строки
                    таблицы уже отсортированы в  порядке  возрастания
                    по индексируемым столбцам, опция NOSORT позволяет
                    системе ORACLE пропустить фазу сортировки.

                    При создании индекса кластера  опцию  NOSORT  ис-
                    пользовать нельзя.

                    Опция NOSORT  будет  также  снижать и общее коли-
                    чество памяти,  необходимой для построения индек-
                    са. Для  сортировки  ORACLE  использует временные
                    сегменты и коли сортировка выполняться  не будет,
                    индекс создастся  с гораздо меньшей временной па-
                    мятью.

                    Для того, чтобы воспользоваться опцией NOSORT, Вы
                    должны гарантировать, что строки таблицы располо-
                    жены в возрастающем порядке.  Так как  физическая
                    независимость данных присуща всем системам управ-
                    ления реляционными базами данных (особенно - сис-
                    теме  ORACLE),  не  существует  способа изменения
                    внутреннего порядка расположения строк в таблице.
                    Поэтому создание  индекса  с опцией NOSORT должно
                    выполняться сразу же после загрузки в таблицу от-
                    сортированных данных.

                    Запуская построение  индекса с опцией NOSORT,  Вы
                    ничем не рискуете,  так как если порядок строк  в
                    таблице окажется нарушенным, ORACLE выдаст ошибку
                    и Вы сможете повторить создание индекса  уже  без
                    опции NOSORT.

         Nulls      Значения NULL   не  индексируются,  следовательно
                    запрос:

                    SELECT ENAME FROM EMP WHERE COMM IS NULL

                    не будет использовать индекс, созданный на столб-
                    це COMM.

                    Уникальный индекс также не рассматривает значения
                    NULL как дублирующиеся  и  добавление  нескольких
                    таких строк не повлечет за собой ошибки.

         Создание   При начальном  создании кластера ORACLE автомати-
         индексов   чески не создает для него индекса, однако пока он
         кластера   не создан,  над кластером нельзя выполнять опера-
                    ции DML.  Заметьте,  что одним оператором  CREATE
                    INDEX Вы можете создать либо индекс кластере, ли-
                    бо индекс таблицы, но не оба вместе. Следователь-
                    но,  можно использовать фразу CLASTER только если
                    Вы не указали в том  же  операторе  CREATE  INDEX

                                   -- 144 --



                    имени таблицы.
                    
                  Справочное руководство по языку SQL        5-56


                    Для создания индекса в кластере EMPLOYEE введите:

                    CREATE INDEX IC_EMP ON CLUSTER EMPLOYEE

                    Заметьте, что при этом не указываются столбцы, на
                    которых создается индекс,  так как для кластера в
                    качестве них берутся столбцы ключа кластера.

         Примеры    Для индексирования таблицы EMP по  столбцу  ENAME
                    необходимо ввести:

                    CREATE INDEX I_EMP$ENAME ON EMP (ENAME)

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

                    Для индексирования  таблицы  EMP по столбцу EMPNO
                    введите:

                    CREATE UNIQUE INDEX I_EMP$EMPNO ON EMP (EMPNO)

                    В данном случае введение уникальности  гарантиру-
                    ет, что  в таблицу не будут занесены два служащих
                    с одним табельным номером.

         Связанные  Операторы ALTER  INDEX,  DROP   INDEX,   VALIDATE
         темы       INDEX; фраза STORAGE.
             
                      Справочник по SQL - операторам         5-57
























                                   -- 145 --




E    ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ                        F


E    CREATE ROLLBACK SEGMENT                                    F


    Назначение   Создать сегмент отката, указав по желанию:

                 * сможет ли создаваемый  сегмент  распределяться  по
                 запросу любого экземпляра (PUBLIC),  либо только для
                 экземпляров, поименовавших   его   в   своем   файле
                 INIT.ORA (private).
                 * табличное пространство, содержащее сегмент
                 * параметры памяти

    Предпосылки  Требуется привилегия DBA.

    Синтаксис    CREATE [PUBLIC] ROLLBACK SEGMENT rollback_segment
                   [ TABLESPACE tablespace ]
                   [ STORAGE storage ]

    Ключевые слова PUBLIC         если указан, говорит о том, что дан-
    и параметры                   ный сегмент отката будет общим, т.е.
                                  доступным для использования любым
                                  экземпляром.Если опущен, сегмент бу-
                                  дет личным.
                 rollback_segment правильный идентификатор ORACLE дли-
                                  ной до 30 символов.
                 TABLESPASE       именует табличное пространство, в ко-
                 tablespace       тором будет создаваться сегмент. По
                                  умолчанию принимается SYSTEM.
                 STORAGE storage  специфицирует параметры распределения
                                  памяти для сегмента отката. Правила
                                  задания см. в описании фразы STORAGE.

    Замечания по При добавлении сегмента  к  табличному  пространству
    использова-  последнее должно быть в состоянии online.  В таблич-
    нию          ном пространстве может быть несколько сегментов  от-
                 ката. В  общем  случае,  несколько  сегментов отката
                 увеличивают производительность.  Обсуждение оптималь-
                 ного числа и размеров сегментов отката дано  в Главе
                 5 документа  "ORACLE  RDBMS Руководство по настройке
                 производительности".


    Примеры      Чтобы создать  сегмент отката в табличном пространс-
                 тве SYSTEM, введите:

                 CREATE PUBLIC ROLLBACK SEGMENT RBS_2
                 TABLESPACE SYSTEM
                 STORAGE (INITIAL 50000 INCREMENT 50000 MAXEXTENTS 10)

    Связанные    Операторы CREATE TABLESPACE,  CREATE DATABASE, ALTER
    темы         ROLLBACK SEGMENT,   DROP   ROLLBACK  SEGMENT;  фраза
                 STORAGE.
                 
                  Справочное руководство по языку SQL        5-58

                                   -- 146 --




E         ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ                   F

E         CREATE SEQUENCE                               F

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

         Предпосылки Требуется  привилегия  RESOURCE  как минимум - в
                    одном табличном пространстве. При создании после-
                    довательности, которой будет владеть другой поль-
                    зователь, необходима привилегия DBA.

         Синтаксис  CREATE SEQUENCE [user.]sequence
                        [INCREMENT BY n]
                        [START WITH n]
                        [MAXVALUE n | NOMAXVALUE]
                        [MINVALUE n | NOMINVALUE]
                        [CYCLE | NOCYCLE]
                                 ------
                        [CACHE n | NOCACHE]
                        [ORDER | NOORDER]

         Ключевые   user             владелец     последовательности.
         слова и                     Подразумевается    пользователь,
         параметры                   выдавший команду CREATE SEQUENCE

                    sequence         имя последовательности.   Должно
                                     следовать соглашениям  ORACLE по
                                     именованию объектов базы данных.

                    INCREMENT BY     определяет интервал между после-
                                     довательными номерами. Если име-
                                     ет отрицательное  значение,   то
                                     последовательность    убывающая,
                                     если положительное -  последова-
                                     тельность возрастающая. Допусти-
                                     мо любое целое число  не  равное
                                     нулю. Умолчание 1 (возрастающая).

                    START WITH       первый  генерируемый  последова-
                                     тельный номер.  По умолчанию для
                                     возрастающих последовательностей
                                     равен MINVALUE,  а для убывающих
                                     - MAXVALUE. Используйте эту фра-
                                     зу, если не хотите, чтобы после-
                                     довательность начиналась с умал-
                                     чиваемых значений.

                    MINVALUE         минимальное значение  последова-
                    NOMINVALUE       тельного  номера,  которое будет
                                     генерироваться.  Эта фраза опре-
                                     деляет нижнюю границу последова-



                                   -- 147 --



                                     тельности. Для возрастающих пос-
                                     ледовательностей  равно  1,  для
                                     убывающих 10e2 -1.

                    MAXVALUE         максимальное значение последова-
                    NOMAXVALUE       тельного  номера,  которое будет
                                     генерироваться.  Эта фраза опре-
                                     деляет  верхнюю границу последо-
                                     вательности.  Для убывающих пос-
                                     ледовательностей  равно  1,  для
                                     возрастающих 10e -1.
                              
                      Справочник по SQL - операторам         5-59














































                                   -- 148 --




                    CYCLE            По умолчанию      предполагается
                    NOCYCLE          NOCYCLE, что означает завершение
                                     генерирования   последовательных
                                     номеров по достижении конца пос-
                                     ледовательности. Любая   попытка
                                     сгенерировать номер  после этого
                                     приведет к ошибке.
                                     Если специфицировано CYCLE, пос-
                                     ледовательность после достижения
                                     MAXVALUE (для возрастающих)  вы-
                                     даст MINVALUE.   Для   убывающих
                                     последовательностей после выдачи
                                     MINVALUE выдастся MAXVALUE.

                    CACHE            CACHE заранее готовит последова-
                    NOCACHE          тельные номера, так что при зап-
                                     росе их можно выбрать их памяти,
                                     в результате чего генерация пос-
                                     ледовательных номеров выполняет-
                                     ся быстрее.

                                     По умолчанию предполагается зна-
                                     чение CACHE     20.    Значение,
                                     указываемое в  CACHE  не  должно
                                     превышать разницы между MAXVALUE
                                     и MINVALUE.

                    ORDER            ORDER специфицирует,  что гаран-
                    NOORDER          тируется генерация    последова-
                                     тельных номеров в порядке запро-
                                     са. Это    бывает    важно   для
                                     приложений, которые   используют
                                     последовательные номера   в  ка-
                                     честве меток времени. Обычно это
                                     неважно, если таблицы используют
                                     последовательности для генериро-
                                     вания основных ключей. Даже если
                                     параметр ORDER не указан, после-
                                     довательность скорее всего будет
                                     генерироваться так,  как если бы
                                     он был указан.

         Замечания  Вы можете  использовать  последовательные  номера
         по исполь- для автоматической генерации  основных  ключей  к
         зованию    данным,  а  также координировать ключи между нес-
                    кольких столбцов или таблиц.  Для создания после-
                    довательности Вы должны иметь привилегию RESOURSE
                    как минимум - в одном табличном  пространстве,  а
                    для доступа к чужой последовательности необходимо
                    иметь к ней привилегию SELECT.  DBA может генери-
                    ровать последовательности с владельцами, отличны-
                    ми от создающего пользователя. Последовательности
                    могут быть изменены и отменены.  Возможна регист-
                    рация доступа к ним.  Кроме того,  последователь-
                    ность может иметь синоним.
                    
                  Справочное руководство по языку SQL        5-60

                                   -- 149 --




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

                    Так как  последовательные номера генерируются не-
                    зависимо от  таблиц,  один  и  тот  же  генератор
                    последовательностей может  быть  использован  для
                    одной или  нескольких  таблиц.  Допустимо,  чтобы
                    последовательные номера  иногда пропускались. Это
                    связано с тем,  что транзакция,  их сгенерировав-
                    шая, была откачена (roll back).  Более того,  от-
                    дельные пользователи могут и не знать, что из той
                    же последовательности берут номера другие пользо-
                    ватели.

                    Чтобы посмотреть,  к каким последовательностям Вы
                    имеете доступ,  запросите  обзоры  словаря данных
                    USER_SEQUENCES и ALL_SEQUENCES.

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

         Умолчания  Умолчания для  последовательностей спроектированы
         для после- таким образом, что не указав никаких фраз Вы соз-
         дователь-  дадите возрастающую последовательность,  начинаю-
         ностей     щуюся с 1, возрастающую на 1 и не имеющую верхне-
                    го предела.  Если   Вы   специфицировали   только
                    "INCREMENT BY -1", создастся убывающая последова-
                    тельность начинающаяся с -1 и не  имеющая нижнего
                    ограничения. Фразы,   описанные   в  подзаголовке
                    "Ключевые слова и параметры", допускают различные
                    вариации этих стандартных последовательностей.

         Рост       Последовательность может:
         последо-
         ватель-        * расти безгранично
         ностей         * останавливаться на заранее заданном пределе
                        * начинаться снова после достижения заранее
                          заданного лимита

                    Чтобы создать последовательность  без  границ  не
                    специфицируйте MAXVALUE для возрастающих последо-
                    вательностей и MINVALUE - для убывающих,  а также

                                   -- 150 --



                    специфицируйте NOCYCLE.
                    
                      Справочник по SQL - операторам         5-61


                    Чтобы создать последовательность, останавливающу-
                    юся в   на  определенном  номере,  специфицируйте
                    MAXVALUE для возрастающих  последовательностей  и
                    MINVALUE - для убывающих,  а также специфицируйте
                    NOCYCLE. Любая попытка  сгенерировать  последова-
                    тельный номер после достижения ограничения приве-
                    дет к ошибке.

                    Чтобы создать  последовательность,   начинающуюся
                    снова после достижения предела,  специфицируйте и
                    MAXVALUE и MINVALUE. Специфицируйте также и CYCLE.

                    Фраза START WITH влияет только на первый последо-
                    вательный номер.  При возврате на начало последо-
                    вательность будет начинаться с MINVALUE  в случае
                    возрастания и MAXVALUE - в случае убывания.

         Использо-  Число последовательных  номеров,  кеширующихся  в
         вание кеша памяти,  определяется аргументом фразы CACHE. Ке-
                    шируемые  последовательности  обеспечивают  более
                    быструю генерацию  последовательны  номеров.  Кеш
                    для  каждой данной последовательности заполняется
                    после первого запроса номера из  этой  последова-
                    тельности.  В случае краха системы все кешируемые
                    последовательные номера,  не использованные в за-
                    писанных транзакциях (commited), теряются. Потен-
                    циальное число  потерянных  номеров  равно  числу,
                    указанному во фразе CACHE.

                    Параметры, влияющие  на поведение всех последова-
                    тельностей, задаются в файле INIT.ORA. Это описа-
                    но в  Приложении  D документа "ORACLE RDBMS Руко-
                    водство администратора базы данных".

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

         NEXTVAL    Псевдостолбец NEXTVAL  используется для генериро-
                    вания очередного номера из  указанной  последова-
                    тельности. Ссылка    на    NEXTVAL   приводит   к
                    генерированию очередного номера.  Обращение имеет
                    следующий синтаксис:

                    sequence.NEXTVAL

                    где sequence - это имя последовательности. В сле-
                    дующих разделах обсуждается,  где  NEXTVAL  может
                    быть использован.
                    
                  Справочное руководство по языку SQL        5-62


                                   -- 151 --




         CURRVAL    Псевдостолбец CURRVAL - это текущее значение пос-
                    ледовательного номера. Ссылка на NEXTVAL приводит
                    к тому,  что текущее значение номера помещается в
                    CURRVAL. В текущем сеансе NEXTVAL должен быть ис-
                    пользован хотя бы один раз до ссылки  на CURRVAL.
                    Обращение к CURRVAL имеет следующий синтаксис:

                    sequense.CURRVAL

                    где sequence - имя последовательности,  на которую
                    ссылался NEXTVAL.

         Когда мож-.NEXTVAL и CURRVAL можно использовать:
         но исполь-
         зовать        * во фразе SELECT оператора  SELECT  (исключая
         NEXTVAL и       обзоры)
         CURRVAL       * в списке значений оператора INSERT
                       * в выражении SET оператора UPDATE

         Ограниче-  NEXTVAL и CURRVAL не разрешено использовать:
         ния на
         NEXTVAL и     * внутри подзапроса
         CURRVAL       * внутри списка select для обзора
                       * с ключевым словом DISTINCT
                       * с фразами ORDER BY, GROUP BY и HAVING опера-
                         тора SELECT
                       * с операциями объединения  (UNION, INTERSECT,
                         MINUS)


         Пример     После создания последовательность может использо-
                    ваться для генерирования номеров. Допустим в сле-
                    дующих примерах,  что пользователь  ELLY  создала
                    последовательность с именем ESEQ:

                    CREATE SEQUENCE ESEQ INCREMENT BY 10

                    Первое обращение к ESEQ.NEXTVAL вернет 1, следую-
                    щее вернет 11.  Каждая последующая  ссылка  будет
                    возвращать значение на 10 большее предыдущего.

                    NEXTVAL всегда  необходимо предварять именем пос-
                    ледовательности: ESEQ.NEXTVAL.  Для данной после-
                    довательности ссылка на NEXTVAL в одном операторе
                    может быть выполнена лишь однажды. Несколько ссы-
                    лок в  одном операторе будут возвращать одно и то
                    же значение последовательного номера.
                    
                      Справочник по SQL - операторам         5-63









                                   -- 152 --




                    NEXTVAL может быть встроено внутрь DML - операто-
                    ра:

               INSERT INTO EMP VALUES (ESEQ.NEXTVAL,'LEWIS','TIMOTHY')

                    (в предположении  что  EMP  имеет  три   столбца:
                    EMPNO, LAST_NAME, FIRST_NAME).

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

                    После выполнения   предыдущего  оператора  INSERT
                    можно будет выполнить следующую команду:

                    INSERT INTO EMP_PROJ VALUES (ESEQ.CURRVAL, 101)

                    (предполагая, что EMP_PROJ содержит  два столбца:
                    EMPNO и PROJNO).

                    Использование в   одном  операторе  и  NEXTVAL  и
                    CURRVAL приведет к тому,  что в обоих случаях бу-
                    дет использоваться  NEXTVAL независимо от порядка
                    их появления в команде.

                    Чтобы увидеть последний номер,  сгенерированный в
                    Вашем сеансе, можно выполнить следующий оператор:

                    SELECT ESEQ.CURRVAL FROM any_table

         Последо-   Допустим, Ваше предприятие производит телевизоры.
         вательнос- Вы используете генератор  последовательностей для
         ти в опе-  создания  серийных  номеров выпускаемых телевизо-
         торах      ров.  Случайно выбранные телевизоры тестируются и
         UPDATE     по этому факту модифицируется запись о тестирова-
                    нии, при этом используется серийный номер аппара-
                    та.   Если   Вы   используете  последовательность
                    TV_SERIAL, вставка строк в таблицу TV и модифика-
                    ция таблицы TEST_RESULT будет выглядеть следующим
                    образом:

                    INSERT INTO TV VALUES (TV_SERIAL.NEXTVAL, SYSDATE,
                                           '19 INCH')
                    UPDATE TEST_RESULT
                        SET TV_NUMBER=TV_SERIAL.CURRVAL
                        WHERE TEST_NUMBER = 1015

         Связанные  Операторы ALTER SEQUENCE,  AUDIT,  DROP SEQUENCE,
         темы       GRANT, REVOKE.  "Основные ключи" в Главе 1 - "Ре-



                                   -- 153 --



                    ляционная модель" данного руководства.
                    
                  Справочное руководство по языку SQL        5-64


E         ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ                   F

E         CREATE SYNONYM                                F


         Назначение Создание синонимов для таблиц,  обзоров, последо-
                    вательностей с возможностями:

                       * создание общего синонима (PUBLIC)
                       * создание синонима, ссылающегося на удаленную
                         базу данных

         Предпосылки Вы  должны  быть владельцем или иметь привилегию
                     SELECT таблицы или обзора,  для которых создаете
                     синоним. Чтобы  создать  синоним типа PUBLIC или
                     синоним для объекта, владельцем которого являет-
                     ся другой пользователь,  необходимо иметь приви-
                     легию DBA.

         Синтаксис   CREATE [PUBLIC] SYNONYM [user.]synonym
                         FOR [user.]table [@databaselink]

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

                    synonym          имя синонима, следующее соглаше-
                                     ниям по именованию объектов.

                    user             существующее в  базе  данных имя
                                     пользователя. Если  оно опущено,
                                     оператор CREATE  SYNONYM предпо-
                                     лагает, что Вы  владелец таблицы
                                     или обзора.

                    table            имя существующей таблицы, обзора
                                     или последовательности.

                    databaselink     существующая связь  к  удаленной
                                     базе данных.  Если  user опущен,
                                     синоним ссылается   к   таблице,
                                     принадлежащей пользователю, спе-
                                     цифицированному в     межбазовой
                                     связи.


         Замечания  Использование синонимов продиктовано соображения-
         по исполь- ми безопасности и удобства, включая следующие:
         зованию
                        * для обращения к таблице или обзору без ука-
                          зания их владельца


                                   -- 154 --



                        * для обращения к таблице или обзору без ука-
                          зания базы данных, которой они принадлежат
                        * для назначения другого имени таблице

                    Вышеуказанные свойства      обеспечивают      как
                    независимость данных, так и прозрачность; синони-
                    мы позволяют функционировать приложениям не обра-
                    щая внимание на то, какому пользователю принадле-
                    жит таблица  или  обзор,  а  также - в какой базе
                    данных они хранятся.
                    
                      Справочник по SQL - операторам         5-65















































                                   -- 155 --




         Контекст   Личный синоним должен иметь имя,  отличное от ос-
                    тальных объектов данного пользователя. ORACLE пы-
                    тается разрешить  ссылки  к  объектам  на  уровне
                    пользователя перед объектами на уровне "PUBLIC" -
                    синонимов. Например, если пользователь SCOTT вла-
                    деет таблицей с именем DEPT,  а DBA создал PUBLIC
                    синоним с  именем DEPT для объекта BLAKE.DEPT, то
                    если SCOTT выполнит следующий оператор:

                    SELECT * FROM DEPT

                    то выберутся строки из  SCOTT.DEPT.  Для  выборки
                    строк из одноименной таблицы другого пользователя
                    SCOTT должен выполнить следующий оператор:

                    SELECT * FROM BLAKE.DEPT

                    ORACLE будет пытаться разрешить ссылки к объектам
                    через синонимы,  если верны следующие предположе-
                    ния:

                         * таблице или  обзору  не  предшествует  имя
                           пользователя
                         * за именем таблицы или  обзора  не  следует
                           имя межбазовой связи

         Примеры    Предполагая, что Вам предоставлен доступ к табли-
                    це MARKET_RESEARCH пользователя SCOTT для  созда-
                    ния синонима   MARKET,   ссылающегося  к  таблице
                    MARKET_RESEARCH, необходимо  выполнить  следующий
                    оператор:

                    CREATE SYNONYM MARKET
                        FOR SCOTT.MARKET_RESEARCH

                    Для создания общего синонима таблицы EMP  пользо-
                    вателя SCOTT, находящейся в в удаленной базе дан-
                    ных SALES, DBA может выполнить следующее:

                    CREATE PUBLIC SYNONYM EMP
                        FOR SCOTT.EMP@SALES

                    Заметьте, что  если  таблица  принадлежит другому
                    пользователю, можно создать синоним с тем же име-
                    нем, что и таблица.

         Связанные  Операторы CREATE  DATABASE  LINK,  CREATE  TABLE,
         темы       CREATE VIEW.
                    
                  Справочное руководство по языку SQL        5-66








                                   -- 156 --




E         ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ                   F

E         CREATE TABLE                                  F


         Назначение Создание базовой структуры для хранения  данных в
                    базе - таблицы со следующими возможностями:

                    * определить характеристики распределения памяти
                    * специфицировать табличное пространство для таб-
                      лицы
                    * кластеризовать таблицу
                    * загрузить  таблицу  результатами  произвольного
                      запроса

         Предпосылки Требуется привилегия RESOURCE. Для создания таб-
                    лицы, владельцем которой Вы не являетесь, необхо-
                    дима привилегия DBA.

         Синтаксис  CREATE TABLE [user.]table
                      ( {column_element | table_constraint}
                     [, {column_element | table_constraint} ]...)
                     [PCTFREE n] [PCTUSED n]
                     [INITRANS n] [MAXTRANS n]
                     [TABLESPACE tablespace]
                     [STORAGE storage]
                     [CLUSTER cluster (column [,column]...)]
                     [AS query]

         Ключевые   user             владелец таблицы.  Если не  ука-
         слова и                     зан, то  пользователь,  выдавших
         параметры                   команду CREATE TABLE, становится
                                     владельцем таблицы.

                    table            имя таблицы, следующее стандарт-
                                     ным  соглашениям  по  именованию
                                     объектов  базы (включая правило,
                                     что таблицы,  обзоры,  кластеры,
                                     индексы, межбазовые связи, сино-
                                     нимы и последовательности должны
                                     иметь   у  данного  пользователя
                                     различные имена).

                    column_element   определяет столбцы  и   необяза-
                                     тельные ограничения для столбцов
                                     таблицы. Как  минимум,   таблица
                                     должна содержать  один  столбец.
                                     См. также выше  раздел  "Элемент
                                     описания для столбца".

                    table_constraint определяет  ограничения для таб-
                                     лицы. См.  также   выше   раздел
                                     "Фраза CONSTRAINT".

                    tablespace       определяет табличное  пространс-
                                     тво, к которому будет  принадле-
                                     жать таблица.

                                   -- 157 --



                    storage          определяет будущее распределение
                                     памяти для  таблицы.  См.   ниже
                                     раздел "Фраза STORAGE".

                    cluster          именует существующий    кластер,
                                     владельцем которого     является
                                     пользователь.
                                     
                      Справочник по SQL - операторам         5-67


















































                                   -- 158 --




                    query            правильный запрос (как определя-
                                     ется в  разделе "SELECT").  Если
                                     Вы специфицируете query,  то мо-
                                     жете в  операторе  CREATE  TABLE
                                     определять только  имена  столб-
                                     цов. Тип данных и размер копиру-
                                     ются из  соответствующих  столб-
                                     цов, специфицированных в запросе.
                                     Если все столбцы в запросе имеют
                                     правильно определенные  и   уни-
                                     кальные имена, (column...) может
                                     быть опущено.  В этом случае бу-
                                     дут использоваться  имена столб-
                                     цов из    запроса.    Если    же
                                     (column...) специфицировано, ко-
                                     личество столбцов должно  совпа-
                                     дать с  количеством  столбцов  в
                                     запросе. После того, как таблица
                                     будет создана, результаты запро-
                                     са будут занесены в эту таблицу.
                                     Запрос не  может  содержать фраз
                                     ORDER BY и UPDATE.
                                     Если используется  запрос, фраза
                                     column_element может   содержать
                                     только имена столбцов.  Тип дан-
                                     ных и  размерность каждого будут
                                     производными от результатов зап-
                                     роса. Ограничения  для  таблиц и
                                     столбцов могут быть  добавлены с
                                     помощью фразы    ADD   оператора
                                     ALTER TABLE. Для модификации ог-
                                     раничений для столбцов и таблицы
                                     необходимо их отменить  и  доба-
                                     вить заново (DROP и ADD).
                    Следующие ниже фразы могут быть  указаны в  любом
                    порядке, но запрос должен быть последним.
                    PCTFREE          резервирует часть общей памяти в
                                     каждом блоке  таблицы под после-
                                     дующие модификации       данных.
                                     PCTFREE специфицируется  как по-
                                     ложительное число от 0 до  100 и
                                     указывает, какой  процент памяти
                                     блока будет  резервироваться под
                                     модификации. PCTFREE   равное  0
                                     говорит о том,  что блоки  будут
                                     заполняться до конца. Значение 0
                                     бесполезно, так как в этом  слу-
                                     чае в  таблицу  невозможно будет
                                     заносить данные.  По   умолчанию
                                     предполагается 10 процентов. Ес-
                                     ли берется  умалчиваемое  значе-
                                     ние, вставляемые   строки  будут
                                     заполнять максимально 90% каждо-
                                     го блока.
                                     PCTFREE имеет  такой  же смысл в
                                     операторах CREATE   CLUSTER    и
                                     CREATE INDEX. Комбинация PCTFREE

                                   -- 159 --



                                     и PCTUSED определяет,  будет  ли
                                     вставляемая строка  помещаться в
                                     существующий блок или - в новый.
                                     
                  Справочное руководство по языку SQL        5-68


                                     Свободное пространство, зарезер-
                                     вированное с   помощью  PCTFREE,
                                     разрешено использовать для  рас-
                                     ширения строк    внутри   блока.
                                     Вместо того,  чтобы  расширяться
                                     на дополнительные  блоки,  изме-
                                     ненные строки расширяются в пре-
                                     делах свободной   памяти  блока.
                                     Когда же этой  свободной  памяти
                                     становится  недостаточно, строки
                                     расширяются на другие блоки, об-
                                     разуя сцепленные  строки.  Сцеп-
                                     ленные строки снижают производи-
                                     тельность, так как для доступа к
                                     той же информации необходимо вы-
                                     полнить большую  работу. PCTFREE
                                     следует выбирать после  тщатель-
                                     ной оценки,   насколько   сильно
                                     строки будут расширяться  в  ре-
                                     зультате модификации     данных.
                                     Слишком маленькое значение  при-
                                     ведет к    сцепленным   строкам,
                                     слишком большое - к  неэффектив-
                                     ному использованию памяти.
                    PCTUSED          специфицирует минимальный   уро-
                                     вень использования памяти, кото-
                                     рый ORACLE будет  поддерживать в
                                     каждом блоке таблицы. Как только
                                     процент используемой памяти ста-
                                     нет меньше PCTUSED,  блок стано-
                                     вится кандидатом   на    вставку
                                     строк. PCTUSED   специфицируется
                                     как положительное число от  0 до
                                     100. По умолчанию предполагается
                                     40.
                                     Новые строки будут вставляться в
                                     блоки, в  которых   используемая
                                     память меньше,    чем   значение
                                     PCTUSED. Блок становится  канди-
                                     датом на  вставку  строк и зано-
                                     сится в список свободных блоков,
                                     когда процент  использования па-
                                     мяти в  нем  становится   меньше
                                     указанного в PCTUSED. Блоки уда-
                                     ляются из списка свободных, если
                                     в результате вставки строки про-
                                     цент использования памяти стано-
                                     вится выше PCTUSED.  Таблицы,  в
                                     которых видится  мало  удалений,
                                     могу работать с PCTUSED 40 и ни-
                                     же. Большее   значение   PCTUSED

                                   -- 160 --



                                     приводит к   более  эффективному
                                     использованию памяти при потерях
                                     от снижения   производительности
                                     из за  необходимости обслуживания
                                     списка свободных блоков.
                                     В операторе CREATE CLUSTER фраза
                                     PCTUSE имеет такое же значение.
                                     
                      Справочник по SQL - операторам         5-69

                    MAXTRANS         специфицируется     максимальное
                                     число транзакций,  которые могут
                                     параллельно менять данные в бло-
                                     ке. Каждая транзакция,  изменяю-
                                     щая данные,   требует   элемента
                                     транзакции (но не  для  SELECT).
                                     Память, необходимая     элементу
                                     транзакции, зависит от  операци-
                                     онной системы  и обычно равна 23
                                     байтам, распределяющимся в  сво-
                                     бодной памяти   блока.  MAXTRANS
                                     может меняться от 1 до 255  и по
                                     умолчанию предполагается  255. В
                                     этом случае при нормальной вели-
                                     чине свободной  памяти Вы скорее
                                     превысите ее,  ежели  исчерпаете
                                     MAXTRANS.
                                     Для кластера MAXTRANS  играет ту
                                     же роль, что и для таблицы.
                    INITRANS         определяется начальное количест-
                                     во элементов транзакций, распре-
                                     деляемых внутри  каждого  блока.
                                     Для каждого  элемента транзакций
                                     ORACLE резервирует 23  байта  из
                                     свободной памяти  блока  (но это
                                     зависит от операционной системы)
                                     в момент, когда блок впервые ис-
                                     пользуется. INITRANS  может  ме-
                                     няться в диапазоне от 1 до 255 и
                                     по умолчанию  предполагается  1.
                                     Когда число транзакций, обращаю-
                                     щихся к  этом   блоку   превысит
                                     INITRANS, ORACLE будет распреде-
                                     лять дополнительные     элементы
                                     транзакций пока  не  исчерпается
                                     память в блоке или не превысится
                                     значение MAXTRANS.  INITRANS га-
                                     рантирует, таким образом, что при
                                     начальном использовании   именно
                                     такое количество транзакций  мо-
                                     гут модифицировать данные в бло-
                                     ке. Корме  того,  этот  параметр
                                     предотвращает накладные расходы,
                                     связанные с динамическим распре-
                                     делением элементов транзакций.
                                     INITRAN играет ту  же  роль  для
                                     кластеров и индексов,  за исклю-
                                     чением того,  что там умалчивае-

                                   -- 161 --



                                     мое значение  для INITRANS=2.
                    TABLESPACE       задает имя табличного пространс-
                                     тва, в котором будет создаваться
                                     таблица. Если оно не указано, то
                                     распределение  будет выполняться
                                     в умалчиваемом табличном  прост-
                                     ранстве, задаваемом   оператором
                                     ALTER USER.
                    STORAGE          управляет  распределением памяти
                                     для таблицы. Память должна расп-
                                     ределяться так,  чтобы минимизи-
                                     ровать частоту распределения но-
                                     вых участков.  См.  ниже  раздел
                                     "Фраза STORAGE".
                                     
                  Справочное руководство по языку SQL        5-70


                    CLUSTER          специфицирует, что таблица долж-
                                     на быть включена  в  кластер.  В
                                     этом  случае  columns  - столбцы
                                     таблицы, соответствующие класте-
                                     ризуемым  столбцам  кластера.  В
                                     общем случае это  столбцы,  сос-
                                     тавляющие  основной ключ или яв-
                                     ляющиеся его частью.  Специфици-
                                     руйте  по одному столбцу таблицы
                                     для каждого столбца ключа  клас-
                                     тера.  Столбцы  должны соответс-
                                     твовать по позиции, а не по име-
                                     ни.    Данная    таблица   будет
                                     пользоваться распределением  па-
                                     мяти  кластера и, следовательно,
                                     в сочетании с опцией cluster па-
                                     раметры     PCTUSED,    PCTFREE,
                                     TABLESPACE и STORAGE  будут  да-
                                     вать ошибку.


         Замечания  Таблица может  содержать  до  254  столбцов.  Она
         по исполь- должна соответствовать стандартным соглашениям по
         зованию    именованию объектов базы данных.

                    За исключением параметра query, таблицы создаются
                    без данных.  Обычно  строки добавляются с помощью
                    оператора INSERT.

         Взаимное соответствие PCTUSED и PCTFREE.

                    При использовании вместе PCTUSED и PCTFREE  помо-
                    гут Вам  использовать  память в таблице более эф-
                    фективно. Сумма этих величин  должна  быть  меньше
                    100.

                    При вставке  строк ORACLE в первую очередь встав-
                    ляет их в блоки,  содержащиеся в списке свободных
                    блоков. К этим блокам относятся и те, которые еще
                    не содержат в себе строк. ORACLE будет продолжать

                                   -- 162 --



                    работать с  блоками  из  списка  свободных пока у
                    всех их не превысится PCTFREE. Когда все блоки из
                    списка свободных  будут  исчерпаны,  для хранения
                    строк будут распределяться новые.


E         Словарь данных                                F

                    Оператор CREATE  TABLE  заставляет ORACLE записы-
                    вать информацию о таблицах,  столбцах и ограниче-
                    ниях в Словарь Данных.  Любая операция по измене-
                    нию структуры таблицы  автоматически  приводит  к
                    отображению изменения в словаре данных.

                    Следующие обзоры словаря данных содержат информа-
                    цию, относящуюся к таблицам:

                        * USER_TABLES
                        * USER_OBJECTS
                        * USER_TAB_COLUMNS
                        * USER_INDEXES
                        * ALL_TABLES
         
                      Справочник по SQL - операторам         5-71



































                                   -- 163 --





E         Ограничения                           F

                    ORACLE Version 6.0 поддерживает синтаксис ограни-
                    чений для  таблиц и столбцов.  Семантическая под-
                    держка будет осуществляться в последующих версиях.

         Примеры

                    Чтобы определить   для   примера   таблицу    EMP
                    пользователя SCOTT, введите:

                    CREATE TABLE EMP
                       (EMPNO NUMBER NOT NULL PRIMARY KEY
                        ENAME CHAR(10) NOT NULL
                                     CHECK (ENAME = UPPER(ENAME)),
                        JOB CHAR(9),
                        MGR NUMBER REFERENCES SCOTT.EMP(EMPNO),
                        HIREDATE DATE CHECK (HIREDATE >= SYSDATE),
                        SAL NUMBER(10,2) CHECK (SAL > 500),
                        COMM NUMBER(9,0) DEFAULT NULL,
                        DEPTNO NUMBER(2) NOT NULL REFERENCES
                                              SCOTT.DEPT(DEPTNO)
                     PCTFREE 5 PCTUSED 75

                    В этом   определении   таблицы    специфицируется
                    PCTFREE 5 и PCTUSED 75, что соответствует относи-
                    тельно статичной таблице. Определяются также нес-
                    колько ограничений для столбцов таблицы EMP.

                    Таблица примера SALGRADE, находящаяся в табличном
                    пространстве HUMAN_RESOURCE,  с небольшой памятью
                    и  малым  дополнительным распределением создается
                    следующим образом:

                    CREATE TABLE SALGRADE (GRADE NUMBER,
                                           LOSAL NUMBER,
                                           HISAL NUMBER)
                      TABLESPACE HUMAN_RESOURCE
                      STORAGE (INITIAL 6144 NEXT 6144
                               MINEXTENTS 1 MAXEXTENTS 5
                               PCTINCREASE 5)

         Связанные  Операторы ALTER  TABLE,  CREATE  CLUSTER,  CREATE
         темы       INDEX, CREATE   TABLESPACE,   DROP  TABLE;  фразы
                    CONSTRAINT и STORAGE; элемент описания столбца.
             
                  Справочное руководство по языку SQL        5-72










                                   -- 164 --




E    ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ                        F

E    CREATE TABLESPACE                                  F


    Назначение   Создать табличное пространство, назначив:

                 * имена файлов, составляющих это пространство
                 * умалчиваемые параметры памяти
                 * будет ли табличное пространство после создания в
                   online или offline.

    Предпосылки  Требуется привилегия DBA

    Синтаксис    CREATE TABLESPACE tablespace
                     DATAFILE {filespec [,filespec] ...}
                      [DEFAULT STORAGE storage]
                      [ONLINE | OFFLINE]

    Ключевые слова tablespace     идентификатор ORACLE длиной до 30
    и параметры                   символов используется для задания
                                  имени табличному пространству.
                 filespec         спецификация файла базы данных в
                                  форме:
                                  filename [SIZE integer [K|M][REUSE]
                 SIZE integer     указывает количество байтов. Отсут-
                                  ствие этого параметра предполагает по
                                  умолчанию использование файлов базы
                                  размером 10 мегабайтов и журнала ре-
                                  гистрации - по 500 килобайтов. Если
                                  указано "К", integer умножается на
                                  1024, "М" - на 1048576.

                 REUSE            указывает, что будут повторно исполь-
                                  зоваться существующие файлы, информа-
                                  ция в них полностью разрушается.
                 DATAFILE         определяет файл или файлы, составля-
                                  ющие табличное пространство. Точная
                                  спецификация файлов зависит от опе-
                                  рационной системы.
                 DEFAULT          умалчиваемые параметры памяти для
                 STORAGE          всех объектов,  создаваемых  в этом
                                  пространстве. Умалчиваемые значения
                                  памяти зависят от операционной сис-
                                  темы. Полное описание параметров па-
                                  мяти см. во фразе STORAGE.
                 ONLINE           делает табличное пространство соотве-
                 OFFLINE          тственно доступным или недоступным.
                                  Умолчание - ONLINE - означает, что
                                  табличное пространство   становится
                                  доступным пользователям, имеющим пра-
                                  во это  делать,  немедленно.  Обзор
                                  словаря данных DBA_TABLESPACES пока-
                                  зывает статус каждого табличного про-
                                  странства.
                                            
                      Справочник по SQL - операторам         5-73

                                   -- 165 --





    Замечания по Табличное пространство является единицей копирования
    использова-  /восстановления  базы данных.  Оно содержит сегменты
    нию          для таблиц,  индексов,  сегменты отката и временные.
                 Все базы данных имеют по крайней мере одно табличное
                 пространство SYSTEM, которое создается в момент соз-
                 дания базы данных.  Независимо от того, в каком сос-
                 тоянии находится табличное пространство, к нему мож-
                 но добавлять файлы операционной системы. Аналогично,
                 оно  может  быть  удалено  независимо  от  состояния
                 (online или offline),  но все же рекомендуется перед
                 отменой выводить табличное пространство  в  offline.
                 Этим Вы гарантируете,  что не существует незавершен-
                 ных транзакций в данном табличном пространстве.

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


      SIZE и REUSE

                 Если Вы  специфицировали  и  ключевое  слово  SIZE и
                 REUSE, ORACLE будет использовать указанный файл базы
                 данных,  если он существует и имеет указанный размер.
                 В противном случае система ORACLE создаст файл  ука-
                 занного размера.

                 Если Вы  специфицировали  SIZE  и  опустили ключевое
                 слово REUSE,  файл базы данных существовать не  дол-
                 жен. В  этом  случае  ORACLE создаст файл указанного
                 размера.

                 Если опущен параметр SIZE, файл базы данных уже дол-
                 жен существовать.


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

                 CREATE TABLESPACE TABSPACE_2
                 DATAFILE 'TABSPACE_FILE2.DAT' SIZE 20M
                 DEFAULT STORAGE (
                    INITAL 10K NEXT 50K
                    MINEXTENTS 1 MAXEXTENTS 999
                    PCTINCREASE 10
                 )
                    ONLINE


      Связанные     Операторы ALTER TABLESPACE и DROP TABLESPACE.
      темы
                 
                  Справочное руководство по языку SQL        5-74





                                   -- 166 --




E         ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ                   F

E         CREATE VIEW                                   F


         Назначение Определение обзора (логической таблицы,  базирую-
                    щейся на одной или нескольких таблицах).

         Предпосылки Надо быть владельцем или иметь привилегию SELECT
                    для таблиц(ы) базы данных.  Чтобы создать  обзор,
                    владельцем которого  Вы не являетесь,  необходимо
                    иметь привилегию DBA.

         Синтаксис  CREATE VIEW [user.]view [(alias [,alias]...)]
                         AS query
                         [WITH CHECK OPTION [CONSTRAINT constraint]]

         Ключевые   user             владелец создаваемого обзора.
         слова и
         параметры  view             имя обзора

                    query            определяет столбцы и строки таб-
                                     лиц(ы), на которых будет базиро-
                                     ваться обзор. В качестве query
                                     может выступать любой правильный
                                     оператор SELECT,  не  содержащий
                                     фраз ORDER BY и FOR UPDATE. Опи-
                                     сание синтаксиса запроса  см.  в
                                     Главе 6   -   "Фразы   оператора
                                     SELECT" данного руководства.

                    WITH CHECK OPTION специфицирует,  что  вставки  и
                                     модификации, выполняемые   через
                                     этот обзор, запрещены, если дан-
                                     ные строки   невозможно  выбрать
                                     через этот  обзор.  WITH   CHECK
                                     OPTION можно  использовать  и  в
                                     обзоре, базирующемся  на  другом
                                     обзоре.

                    CONSTRAINT       имя, назначаемое     ограничению
                                     "WITH CHECK  OPTION".  Если  это
                                     имя не указано,  оно назначается
                                     системой в форме:  SYS_Cn, где n
                                     - целое,  делающее имя ограниче-
                                     ния уникальным в пределах систе-
                                     мы.
                                     
                      Справочник по SQL - операторам         5-75









                                   -- 167 --




         Замечания  Обзор - это логическое "окно" в  одну  или  более
         по исполь- таблиц. Обзоры обладают следующими свойствами:
         зованию
                         * Обзор  не  хранит данных,  вместо этого он
                           показывает данные из других таблиц  (кото-
                           рые, в свою очередь, могут быть обзорами).
                         * Обзор можно использовать в SQL -  операто-
                           рах везде,  где можно использовать таблицы
                           (т.е. -  в  операторах   INSERT,   UPDATE,
                           DELETE, SELECT) с несколькими ограничения-
                           ми. Вы  можете  только  выбирать  (select)
                           данные из обзоров, чьи запросы содержат:
                                * объединения
                                * фразы  GROUP  BY,  CONNECT  BY  или
                                  START WITH
                                * фразу DISTINCT, псевдостолбцы (нап-
                                  ример ROWNUM) или выражение в спис-
                                  ке столбцов

                    Вы можете модифицировать обзоры, содержащие псев-
                    достолбцы или выражения,  если оператор UPDATE не
                    ссылается к псевдостолбцу или выражению из обзора.

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

E         Правила именования обзоров                    F

                    Имена столбцов  в  обзорах должны согласовываться
                    со следующими правилами:
                         * Имена столбцов должны следовать  стандарт-
                           ным соглашениям  для  объектов базы данных
                           (детально рассмотрены в Главе  3 "Элементы
                           языка SQL").
                         * Имена столбцов иметь алиасы,  если они яв-
                           ляются производными от выражений в запросе
                         * Имена  столбцов  должны  быть   различными
                           (таблицы, составляющие  обзор  могут иметь
                           одинаковые имена столбцов).
                         * Если алиасы не используются,  имена столб-
                           цов обзора  должны  быть  производными  из
                           столбцов запроса.  Алиасы  столбцов  могут
                           также использоваться в списке select  зап-

                                   -- 168 --



                           роса.
                           
                  Справочное руководство по языку SQL        5-76


                         * Когда используются алиасы,  их  количество
                           должно совпадать  с  числом  выбираемых  в
                           запросе столбцов.  Например,  если  запрос
                           выбирает 4  столбца,  алиасов  должно быть
                           также 4.  Первому  столбцу  запроса  будет
                           назначен первый  алиас,  второму столбцу -
                           второй алиас и так далее.

                    Когда Вы обращаетесь к обзору, ORACLE проделывает
                    следующие шаги:

                    1. Выбирает  определение  обзора как указывалось в
                       операторе CREATE VIEW и запоминает его в  сло-
                       варе данных.
                    2. Проверяет Ваши привилегии доступа.
                    3. Использует запрос из обзора для выборки данных
                       из таблиц(ы) базы данных. Таблица базы - любая
                       таблица, специфицированная в запросе обзора.

                    Имейте в виду, что если обзор определяется в виде
                    "SELECT * FROM table",  а Вы поменяли определение
                    таблицы, обзор работать перестанет.  Эту проблему
                    можно решить удалением и повторным созданием  об-
                    зора.


         Регистрация доступа к обзорам

                    Умалчиваемыми опциями регистрации для обзора  яв-
                    ляется объединение опций регистрации всех таблиц,
                    составляющих обзор.

         Примеры    Чтобы создать обзор DEPT20 на  основании  таблицы
                    EMP, показывающий служащих Отдела 20 и их годовой
                    оклад, введите следующий оператор:

                    CREATE VIEW DEPT20
                       AS SELECT ENAME, SAL*12 ANNUAL_SALARY
                           FROM EMP
                           WHERE DEPTNO = 20

                    Заметьте, что в алиасе для столбца обзора нет не-
                    обходимости, так как выражение SAL*12  уже  имеет
                    алиас столбца запроса (ANNUAL_SALARY).

                    Чтобы создать  обзор  ROSTER для всех служащих из
                    таблицы EMP,  но который показывает только их та-
                    бельные номера, фамилии и title (и включает в се-
                    бя ограничение WITH CHECK OPTION с  именем  WCO),
                    введите:




                                   -- 169 --



                    CREATE VIEW ROSTER (ID_NUMBER, PERSON, TITLE)
                       AS SELECT EMPNO, ENAME, JOB, DEPTNO
                           FROM EMP
                           WHERE DEPTNO IN (SELECT DISTINCT DEPTNO
                                                   FROM DEPT)
                       WITH CHECK OPTION CONSTRAINT WCO
                    
                      Справочник по SQL - операторам         5-77


                    Благодаря тому,   что  указано  ограничение  WITH
                    CHECK OPTION,  ORACLE будет предотвращать  запись
                    новых строк в обзор ROSTER, если номер отдела но-
                    вого сотрудника не существует в таблице DEPT. Об-
                    ратите внимание,  что  строка действительно будет
                    вставляться в таблицу EMP только  после  успешной
                    проверки WITH CHECK OPTION.

         Связанные  Операторы CREATE TABLE, CREATE SYNONYM, DROP VIEW
         темы       и RENAME.
                    

KOAP Open Portal 2000