在嵌套表列上创建索引

时间:2016-10-16 18:49:43

标签: 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嵌套表列上创建索引。

所以根据documentation ,语法是这样的:

CREATE INDEX index_name
ON nested_storage_table(NESTED_TABLE_ID, document_typ);

我没有得到第二个参数document_typ的含义?并没有找到任何解释。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

这是Oracle文档不同步的一个有趣示例。索引示例应包括类型的定义。但是,我们可以在the PL/SQL reference中找到这些示例。所以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);