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元素。