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

Oracle PL-SQL在对象集合表中插入记录,oracle,plsql,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

我在架构级别声明了此对象集合表:

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\u attribute\u list
attributelist
属于
T\u ATTRIBUTEPAGE\u attributelist
类型,但我得到:

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

属性列表(i)
用于获取现有
attributelist
集合的
i
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.COUNT
collectionvalue.LAST
获取集合的最高索引元素;但是,如果集合稀疏,则可以使用
COUNT
,并且只能使用
collectionvalue.LAST

很好,效果很好,如果列表不是空的,是否有办法在列表中的某个位置插入元素?
attributelist(i):=O_ATTRIBUTEPAGE_attributelist(…)
将覆盖
i
th元素,而不覆盖它,仅当我将每个元素移动到要添加的元素之后?如果要在集合的中间插入元素,则创建一个新集合并添加
1
st到
I-1
th项,然后追加新元素,然后追加初始列表中的其余元素。或者,您可以通过1,然后在反向i+1中对n执行
。。attributelist.LAST LOOP attributelist(n):=attributelist(n-1);端环
然后覆盖
i
th元素。