读书人

怎么暂存查询结果用于后续操作

发布时间: 2012-08-11 20:50:31 作者: rapoo

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

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



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
);

读书人网 >oracle

热点推荐