我在模式级别声明了这个对象集合表:
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_list
和attributelist
的类型为T_ATTRIBUTEPAGE_ATTRIBUTELIST
,但我得到了:
错误:PLS-00316:PL / SQL TABLE必须使用单个索引
答案 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.COUNT
或collectionvalue.LAST
来获取集合中索引最高的元素;但是,如果集合是稀疏的,那么{{ 1}}并且您只能使用COUNT < LAST
。)