我查询到了若干记录行,保存在表变量中,然后针对这些记录,进行一系列更新和插入。
下面红色的代码就是我的意图,但是这么写是不行的,因为表变量不被当作一个表。请问有什么办法可以实现这样的需求?(除了用全局临时表之外,那个比较复杂)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 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;
begin
insert into tableA values (emptable(i));
update tableB set xxx=xxx where id=emptable(i);
end;
commit;把这个语句跟你的那红色部分替换掉!
测试下,我不确定不会报错
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;
--dbms_output.put_line(emptable(0).n_emp_id);
for i in 1..emptable.count() loop
insert tableA(id) vlaues(emptable(i).n_emp_id);
update tableB set xx=xx where id =emptable(i).n_emp_id;
end loop;
end;
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;
如果不在,就手动创建一个table罢。
如果能够像取一张表一样insert xxx select xxx,会好很多。
不知道有没有别的思路?
你的需要根本不要定义表变量。
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
);