日期:2014-05-17  浏览次数:20821 次

如何暂存查询结果,用于后续操作?
我查询到了若干记录行,保存在表变量中,然后针对这些记录,进行一系列更新和插入。
下面红色的代码就是我的意图,但是这么写是不行的,因为表变量不被当作一个表。

请问有什么办法可以实现这样的需求?(除了用全局临时表之外,那个比较复杂)



declare
TYPE emp_table_type is table of tbl_emp.n_emp_id%type INDEX BY BINARY_INTEGER;
  emptable emp_table_type;
  begin
select n_emp_id bulk collect into emptable from tbl_emp where n_emp_id=999;
insert tableA select * from emptable;
update tableB set xx=xx where id in (select n_emp_id from emptable);

end;


------解决方案--------------------
创建临时表或者公用表达式
------解决方案--------------------
探讨
我查询到了若干记录行,保存在表变量中,然后针对这些记录,进行一系列更新和插入。
下面红色的代码就是我的意图,但是这么写是不行的,因为表变量不被当作一个表。

请问有什么办法可以实现这样的需求?(除了用全局临时表之外,那个比较复杂)



declare
TYPE emp_table_type is table of tbl_emp.n_emp_id%type INDEX BY BI……

------解决方案--------------------
declare 
TYPE emp_table_type is table of tbl_emp.n_emp_id%type INDEX BY BINARY_INTEGER; 
emptable emp_table_type; 
begin 
select n_emp_id bulk collect into emptable from tbl_emp where n_emp_id=999; 
for i in 1..emptable.count() 
loop 
insert INTO tableA(id) VALUES(emptable(i)); 
update tableB set xx=xx where id =emptable(i); 
end loop;
end;
------解决方案--------------------
表变量主要用于循环操作。集合变量。

或者
你的需要根本不要定义表变量。
insert into tableA select n_emp_id from tbl_emp where n_emp_id=999;
update tableB set xx=xx where id in (select n_emp_id from tbl_emp where n_emp_id=999
);