pl / sql集合/对象更新

时间:2014-01-30 15:59:59

标签: oracle object collections plsql sql-update

我在架构级别声明了这些

create or replace type "myobj" as as object
( var1 varchar2(10), var2 varchar2(10) );

create or replace type memtable as table of myobj;

在我的程序中,我有

mytable memtable := memtable();

for loop_index in 1 .. 1000000
Loop
     mytable.extend;
     mytable(loop_index) := myobj('blah', null);
end loop;

这很好......现在如果我想从表中选择,我可以做到

select * from table(mytable) where var1 = 'abc';

这也很好。

现在我想在所有这些百万个对象中更新var2,我将如何使用更新语句

update (select * from table(mytable)) set var2 = '123' where ....

这不起作用......编译器抱怨ORA-0904 mytable

中的无效标识符

知道怎么做吗?感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

也许DML必须至少有一个“真实”的表。试试这个:

CREATE GLOBAL TEMPORARY TABLE TT_memtable (val memtable) 
ON COMMIT PRESERVE ROWS;

然后在你的代码中:

insert into TT_memtable (val) values (mytable);    
update 
    (select * from TT_memtable natural JOIN table(val)) 
set var2 = '123' 
where ....