Отправляет email-рассылки с помощью сервиса Sendsay

Открыто о СУБД Oracle на русском

  Все выпуски  

Открыто о СУБД Oracle на русском : создаем индексы, хранимый Java-объект и библиотеку


Информационный Канал Subscribe.Ru

Выпуск 24

Синтаксис: создаем индексы, хранимый Java-объект и библиотеку

Уважаемые подписчики! Это очередной авторский выпуск, посвященный формальному синтаксису. Мы продолжаем разбирать операторы CREATE, по алфавиту. По ходу дела также - синтаксис конструкции хранения, задающей параметры для сегментов. Синтаксис представлен в виде расширенных формул Бэкуса-Наура для версии сервера 9.0.1.

Оператор CREATE INDEX

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

<оператор CREATE INDEX> ::=
CREATE [<тип индекса>] INDEX [<схема>.]<имя индекса>
   ON <кластер, таблица или соединение>;

<тип индекса> ::=
UNIQUE | BITMAP

<кластер, таблица или соединение> ::=
<ссылка на кластер>
| <ссылка на таблицу>
| <конструкция битового индекса для соединения>

<ссылка на кластер> ::=
CLUSTER [<схема>.]<имя кластера> <атрибуты индекса>

<ссылка на таблицу> ::=
[<схема>.]<имя таблицы> [<псевдоним>]
   (<элемент индекса> {, <элемент индекса>}) <особенности индекса>

<элемент индекса> ::=
<индексируемое выражение> [<порядок сортировки>]

<индексируемое выражение> ::=
<имя столбца> | <выражение над столбцами>

<порядок сортировки> ::=
ASC | DESC

<особенности индекса> ::=
<прикладной индекс>
| [<глобальный или локальный индекс>] <атрибуты индекса>

<прикладной индекс> ::=
INDEXTYPE IS <тип индекса> [PARALLEL] [PARAMETERS ('<строка>')]

<глобальный или локальный индекс> ::=
<глобальный индекс> | <локальный индекс>

<глобальный индекс> ::=
GLOBAL [PARTITION BY RANGE (<список столбцов>)
   (<фрагмент по диапазону>{, <фрагмент по диапазону>})]

<фрагмент по диапазону> ::=
PARTITION [<имя фрагмента>] VALUES LESS THAN
   (<значение>{, <значение>}) {<атрибут сегмента>}

<список столбцов> ::=
<имя столбца>{, <имя столбца>}

<атрибут сегмента> ::=
<физический атрибут>
| TABLESPACE <имя табличного пространства>
| <журнализация>

<локальный индекс> ::=
LOCAL [<локальная фрагментация индекса>]

<локальная фрагментация индекса> ::=
<по таблице, фрагментированной по диапазону>
| <по таблице, фрагментированной по списку>
| <по таблице, фрагментированной по хеш-функции>
| <по таблице с составной фрагментацией>

<по таблице, фрагментированной по диапазону> ::=
(<фрагмент индекса>{, <фрагмент индекса>})

<фрагмент индекса> ::=
PARTITION [<имя фрагмента> {<атрибут сегмента>}]

<по таблице, фрагментированной по списку> ::=
(<фрагмент индекса>{, <фрагмент индекса>})

<по таблице, фрагментированной по хеш-функции> ::=
STORE IN (<табличные пространства>)
| (<спецификация фрагмента>{, <спецификация фрагмента>)

<табличные пространства> ::=
<имя табличного пространства>{, <имя табличного пространства>}
| DEFAULT

<спецификация фрагмента> ::=
PARTITION [<имя фрагмента> [TABLESPACE <имя табличного пространства>]]

<по таблице с составной фрагментацией> ::=
STORE IN (<табличные пространства>)
   [(<спецификация составного фрагмента>
   {,<спецификация составного фрагмента>})]

<спецификация составного фрагмента> ::=
PARTITION [<имя фрагмента> {<атрибут сегмента>}
   [<подфрагменты индекса>]]

<подфрагменты индекса> ::=
STORE IN (<табличные пространства>)
| (<подфрагмент индекса>{, <подфрагмент индекса>})

<подфрагмент индекса> ::=
SUBPARTITION [<имя подфрагмента>
   [TABLESPACE <имя табличного пространства>]]

<конструкция битового индекса для соединения> ::=
[<схема>.]<имя таблицы> (<столбец соединения>{, <столбец соединения>})
   FROM [<схема>.]<имя таблицы>{, [<схема>.]<имя таблицы>}
   WHERE <условие> [<локальный индекс>] <атрибуты индекса>

<атрибуты индекса> ::=
{<атрибут индекса>}

<атрибут индекса> ::=
{<физический атрибут>}
| <журнализация>
| ONLINE
| COMPUTE STATISTICS
| TABLESPACE <пространство>
| <сжатие>
| <сортировка>
| <параллелизм>

<физический атрибут> ::=
PCTFREE <целое число>
| PCTUSED <целое число>
| INITRANS <целое число>
| MAXTRANS <целое число>
| <конструкция хранения>

<журнализация> ::=
LOGGING | NOLOGGING

<пространство> ::=
<имя табличного пространства> | DEFAULT

<сжатие> ::=
COMPRESS <целое число> | NOCOMPRESS

<сортировка> ::=
NOSORT | REVERSE

<параллелизм> ::=
NOPARALLEL | PARALLEL [<целое число>]

Конструкция хранения

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

<конструкция хранения> ::=
STORAGE (<особенность хранения> {<особенность хранения>})

<особенность хранения> ::=
INITIAL <целое число> [<единица измерения>]
| NEXT <целое число> [<единица измерения>]
| MINEXTENTS <целое число>
| MAXEXTENTS <количество экстентов>
| PCTINCREASE <целое число>
| FREELISTS <целое число>
| FREELIST GROUPS <целое число>
| OPTIMAL [<оптимальный размер>]
| BUFFER_POOL <особенность использования пула>

<единица измерения> ::=
K | M

<количество экстентов> ::=
<целое число> | UNLIMITED

<оптимальный размер> ::=
NULL | <целое число> [<единица измерения>]

<особенность использования пула> ::=
KEEP | RECYCLE | DEFAULT

Примеры

Создание глобально фрагментированного индекса (пример Тома Кайта)
tkyte@TKYTE816> CREATE TABLE partitioned
  2  (timestamp date,
  3   id        int
  4  )
  5  PARTITION BY RANGE (timestamp)
  6  (
  7  PARTITION part_1 VALUES LESS THAN
  8  (to_date('01-jan-2000','dd-mon-yyyy')),
  9  PARTITION part_2 VALUES LESS THAN
 10  (to_date('01-jan-2001','dd-mon-yyyy'))
 11  )
 12  /

Table created.


tkyte@TKYTE816> create index partitioned_index
  2  on partitioned(id)
  3  GLOBAL
  4  partition by range(id)
  5  (
  6  partition part_1 values less than(1000),
  7  partition part_2 values less than (MAXVALUE)
  8  )
  9  /


Index created.
Локально фрагментированный индекс на основе битовых карт, с конструкцией хранения
CREATE BITMAP INDEX partno_ix
ON lineitem(partno)
TABLESPACE ts1
LOCAL  (PARTITION quarter1 TABLESPACE ts2,
  PARTITION quarter2 STORAGE (INITIAL 10K NEXT 2K),
  PARTITION quarter3 TABLESPACE ts2,
  PARTITION quarter4);
Индекс по функции
CREATE INDEX income_ix
 ON employees(salary + (salary*commission_pct));
Индекс со сжатием первого столбца
CREATE INDEX ord_customer_ix ON orders (customer_id, sales_rep_id)
 COMPRESS 1;

Оператор CREATE INDEXTYPE

Создание индексного типа - объекта, определяющего набор функций для управления прикладным (domain) индексом.

<оператор CREATE INDEXTYPE> ::=
CREATE [OR REPLACE] INDEXTYPE [<схема>.]<имя индексного типа>
   FOR <оператор индексного типа>{, <оператор индексного типа>}
   USING [<схема>.]<реализующий тип>;

<оператор индексного типа> ::=
[<схема>.]<имя оператора> (<тип параметра>{, <тип параметра>})

Примеры

Создание индексного типа
CREATE INDEXTYPE TextIndexType
 FOR contains (VARCHAR2, VARCHAR2)
 USING TextIndexMethods;

Оператор CREATE JAVA

Создание объекта, содержащего исходный текст, класс или ресурс Java.

<оператор CREATE JAVA> ::=
CREATE [OR REPLACE] [AND <дополнительное действие>] [NOFORCE] JAVA
   <тип Java-объекта> [<права вызывающего>] [<разрешение имени объекта>]
   <код Java-объекта>;

<дополнительное действие> ::=
RESOLVE | COMPILE

<тип Java-объекта> ::=
CLASS [SCHEMA <схема>]
| SOURCE <поименованный объект>
| RESOURCE <поименованный объект>

<поименованный объект> ::=
NAMED [<схема>.]<основное имя>

<права вызывающего> ::=
AUTHID CURRENT_USER | AUTHID DEFINER

<разрешение имени объекта> ::=
RESOLVER (<сопоставление имени> {<сопоставление имени>})

<сопоставление имени> ::=
(<сопоставляемая строка> [,] <схема>)
| (<сопоставляемая строка> [,] -)

<код Java-объекта> ::=
USING <источник текста на Java>
| AS <исходный текст на Java>

<источник текста> ::=
BFILE (<имя каталога>,<имя файла на сервере>)
| <тип большого объекта> <подзапрос>
| '<ключ для большого объекта>'

<тип большого объекта> ::=
CLOB | BLOB | BFILE

Примеры

Создание хранимой функции на языке Java для выполнения команд ОС (пример Тома Кайта)
create or replace and compile java source named "Util"
as
  import java.io.*;
  import java.lang.*;

public class Util extends Object {
  public static int RunThis(String[] args) {
    Runtime rt = Runtime.getRuntime();
    int rc = 1;

    try {
      Process p = rt.exec(args[0]);
      int bufSize = 4096;
      BufferedInputStream bis = 
        new BufferedInputStream(p.getInputStream(), bufSize);
      int len;
      byte buffer[] = new byte[bufSize];

      while ((len = bis.read(buffer, 0, bufSize)) != -1)
        System.out.write(buffer, 0, len);
      rc = p.waitFor();
    }
    catch (Exception e) {
      e.printStackTrace();
      rc = -1;
    }
    finally {
      return rc;
    }
  }
}
/
create or replace function run_cmd(p_cmd in varchar2) return number
as language java
name 'Util.RunThis(java.lang.String[]) return integer';
/

Создание Java-класса на основе существующего файла
CREATE JAVA CLASS USING BFILE (bfile_dir, 'Agent.class');

Создание Java-ресурса на основе существующего файла
CREATE JAVA RESOURCE NAMED "appText"
 USING BFILE (bfile_dir, 'textBundle.dat');

Оператор CREATE LIBRARY

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

<оператор CREATE LIBRARY> ::=
CREATE [OR REPLACE] LIBRARY [<схема>.]<имя библиотеки><is или as>
  '<спецификация файла>' [AGENT '<связь базы данных агента>'];

<is или as> ::=
IS | AS

Примеры

Создание библиотеки в ОС UNIX
CREATE LIBRARY ext_lib AS '/OR/lib/ext_lib.so';

Создание библиотеки в ОС Windows
CREATE LIBRARY stat_lib AS 'c:\tools\stat\stat.dll';

Создание библиотеки из удаленного источника
CREATE LIBRARY app_lib as '${ORACLE_HOME}/lib/app_lib.so'
 AGENT 'cq.profix.com';

В следующем выпуске

Использование нового хранимого пакета DBMS_FLASHBACK Oracle 9i и кое-что про причины возникновения ошибки ORA-1555 - по мотивам творений Тома Кайта. Следите за новостями на сайте проекта Open Oracle.

С наилучшими пожеланиями,

  В.К.



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное