Создание индекса для столбца вложенной таблицы

#oracle #oracle12c

#Oracle #oracle12c

Вопрос:

     CREATE TYPE nums_list AS TABLE OF NUMBER;

    CREATE TABLE mytest (
        id NUMBER,
        num NUMBER,
        tagged nums_list
    )
    NESTED TABLE tagged STORE AS mytest_tagged_table;
 

Теперь мне нужно создать индекс для tagged столбца вложенной таблицы.

Итак, согласно документации, синтаксис выглядит следующим образом:

 CREATE INDEX index_name
ON nested_storage_table(NESTED_TABLE_ID, document_typ);
 

Я не понимаю, что означает второй параметр document_typ ? и не нашел никаких объяснений по этому поводу.

Любая помощь приветствуется.

Ответ №1:

Это интересный пример того, что документация Oracle не синхронизирована. Пример индекса должен включать определения типов. Однако мы можем найти эти примеры в справочнике PL / SQL. Итак, PRINT_MEDIA.AD_TEXTDOCS_NTAB имеет тип TEXTDOC_TAB, который имеет эту подпись:

 CREATE TYPE textdoc_typ AS OBJECT
    ( document_typ      VARCHAR2(32)
    , formatted_doc     BLOB
    ) ;

CREATE TYPE textdoc_tab AS TABLE OF textdoc_typ;
 

Итак, document_typ это некоторая форма столбца метаданных в определяемом пользователем типе. В вашем случае нет эквивалента этого столбца из-за того, как вы определили тип коллекции: в нем нет именованных столбцов для индексации.

Трудно дать окончательное решение, не понимая, почему вы используете вложенную таблицу и почему вы считаете, что ей нужен индекс. Однако это может вам подойти:

 CREATE OR REPLACE TYPE num_t AS OBJECT (numcol NUMBER);

CREATE OR REPLACE TYPE nums_list AS TABLE OF num_t;
 

Таким образом, вы можете создать индекс во вложенном хранилище вашей таблицы:

 CREATE INDEX index_name
    ON nested_storage_table(NESTED_TABLE_ID, numcol);