oracle-多次插入类型表集合
我在Oracle11g中创建了以下对象oracle-多次插入类型表集合,oracle,collections,types,select-into,bulk-collect,Oracle,Collections,Types,Select Into,Bulk Collect,我在Oracle11g中创建了以下对象 CREATE OR REPLACE TYPE myObject as object( fieldOne number, fieldTwo number ); 并创建了一个新的表类型myObject CREATE OR REPLACE TYPE myTable IS TABLE OF myObject; 现在,我想创建一个myTable的新实例,并在SQL Plus命令行上的myTable中添加几个硬编码行,然后将对象作为参数传递给myProcedure
CREATE OR REPLACE TYPE myObject as object(
fieldOne number,
fieldTwo number
);
并创建了一个新的表类型myObject
CREATE OR REPLACE TYPE myTable IS TABLE OF myObject;
现在,我想创建一个myTable的新实例,并在SQL Plus命令行上的myTable
中添加几个硬编码行,然后将对象作为参数传递给myProcedure
我试过以下方法
declare newTable myTable;
begin
select myObject(50,5) bulk collect into newTable from dual;
select myObject(40,7) bulk collect into newTable from dual;
myProcedure(newTable);
commit;
end;
尽管第二个select into
语句覆盖了第一个语句,但哪种方法仍然有效
我的问题是,;如何将多行添加到newTable
非常感谢:)完美:)非常感谢!一个问题-在begin语句之后,为什么有newTable:=myTable();当newTable已经声明为myTable类型时?@timbo:如果我理解正确,
newTable:=myTable()
初始化newTable
。在该语句之前,newTable
未初始化。在这种状态下,任何使用newTable
都会导致出现错误。@timbo仅供参考,一种稍微短一点的方法就是newTable:=myTable(myObject(50,5),myObject(40,7))代码>ie不需要初始化或扩展。@DazzaL谢谢-这很好地解决了问题:)
declare
newTable myTable;
begin
newTable := myTable();
newTable.extend(2); -- The desired size of the collection
-- Oracle collections begin at index 1, not 0
newTable(1) := myObject(50, 5);
newTable(2) := myObject(40, 7);
myProcedure(newTable);
end;