【问题标题】:oracle - multiple insert into type table collectionoracle - 多次插入类型表集合
【发布时间】:2013-01-03 22:59:36
【问题描述】:

我在 oracle 11g 中创建了以下对象。

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 添加多行?

在此先感谢 :)

【问题讨论】:

    标签: oracle collections types select-into bulk-collect


    【解决方案1】:
    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;
    

    【讨论】:

    • 完美:) 非常感谢!一个问题 - 在 begin 语句之后,为什么你有 newTable := myTable();当 newTable 已经被声明为 myTable 类型时?
    • @Timbob:如果我理解正确,newTable := myTable() 初始化 newTable。在该语句之前,newTable 是未初始化的。在这种状态下,任何newTable 的使用都会导致引发错误。
    • @Timbob 仅供参考,一个稍微短一点的方法就是newTable := myTable(myObject(50, 5), myObject(40, 7));,即不需要初始化或扩展。
    • @DazzaL 谢谢 - 整理得很好 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多