我在架构级别声明了这些
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
中的无效标识符知道怎么做吗?感谢任何帮助。感谢。
答案 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 ....