PL-SQL在对象的集合表中插入记录

时间:2016-06-13 11:17:35

标签: oracle plsql

我在模式级别声明了这个对象集合表:

CREATE OR REPLACE TYPE "T_ATTRIBUTEPAGE_ATTRIBUTELIST" IS TABLE OF o_ATTRIBUTEPAGE_ATTRIBUTELIST;

o_ATTRIBUTEPAGE_ATTRIBUTELIST是:

CREATE OR REPLACE TYPE "O_ATTRIBUTEPAGE_ATTRIBUTELIST" IS OBJECT (
    WizAttrEditID           NUMBER,
    InternalIndex           NUMBER,
    DimensionObjectID       NUMBER,
    AttributeName           VARCHAR2(50),
    AttributeLabel          VARCHAR2(50),
    AttributeType           NUMBER,
    AttributeLength         VARCHAR2(50),
    MandatoryAttribute      NUMBER,
    ReadOnly                NUMBER,

    Name                VARCHAR2(2000),
    Num                 NUMBER,

    IsModified          NUMBER,
    Colour              NUMBER);

我想在集合中插入一个项目,我试图这样做:

ls_attribute_list := attributelist(1950053739,1,3, "PROTECTION_ROLE", "Protection Role",5,1,1,0, "Path A", 1, 1,0);

其中ls_attribute_listattributelist的类型为T_ATTRIBUTEPAGE_ATTRIBUTELIST,但我得到了:

  

错误:PLS-00316:PL / SQL TABLE必须使用单个索引

1 个答案:

答案 0 :(得分:2)

attributelist(i);用于获取现有i集合的attributelist th 元素。你传递的是多个语法无效的参数,Oracle假设你试图从集合中获取一个元素,只是传递了太多的参数,因此抛出PLS-00316异常。

如果要使用一个元素创建新列表,请使用类型的名称:

ls_attribute_list := T_ATTRIBUTEPAGE_ATTRIBUTELIST( -- Nested table collection type
  O_ATTRIBUTEPAGE_ATTRIBUTELIST(                    -- Object type
    1950053739,                                     -- Object attributes
    1,                                              -- ...
    3,
    'PROTECTION_ROLE',
    'Protection Role',
    5,
    1,
    1,
    0,
    'Path A',
    1,
    1,
    0
  )                                                 -- Complete the object
);                                                  -- Complete the collection

(注意:字符串文字被单个'引号包围。)

  

我想在集合中插入一个项目

您可以使用以下方式执行此操作:

attributelist.EXTEND( 1 );                          -- Append one NULL element
attributelist( attributelist.LAST )                 -- See Note below
  := O_ATTRIBUTEPAGE_ATTRIBUTELIST(                 -- Object type
    1950053739,                                     -- Object attributes
    1,                                              -- ...
    3,
    'PROTECTION_ROLE',
    'Protection Role',
    5,
    1,
    1,
    0,
    'Path A',
    1,
    1,
    0
  );                                                -- Complete the object

(注意:如果集合密集,那么您可以使用collectionvalue.COUNTcollectionvalue.LAST来获取集合中索引最高的元素;但是,如果集合是稀疏的,那么{{ 1}}并且您只能使用COUNT < LAST。)