#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);