SQL> select * from aa;ID NAME -- ---------- 2 2 3 2 1 2SQL> select * from bb;ID NAME -- ---------- 1 2 create procedure pro(p_old in varchar2,p_new in varchar2) as begin merge into aa using(select * from bb) on (a.id=b.id) when matched then update set name=p_old when not matched then insert into values(a.id,p_new); end; /begin pro('4','new'); end; /
首先感谢大侠捧场!!! 我测试过在update和insert部分是可以的,但在using (select .. from .. where --这里用外部变量就出错?),是不是就where后面不能使用外部变量?!!
在動態sql里面這些肯定是可以的。
-- ----------
2 2
3 2
1 2SQL> select * from bb;ID NAME
-- ----------
1
2 create procedure pro(p_old in varchar2,p_new in varchar2)
as
begin
merge into aa
using(select * from bb)
on (a.id=b.id)
when matched then
update set name=p_old
when not matched then
insert into values(a.id,p_new);
end;
/begin
pro('4','new');
end;
/
我测试过在update和insert部分是可以的,但在using (select .. from .. where --这里用外部变量就出错?),是不是就where后面不能使用外部变量?!!
http://gigabase.idi.ntnu.no/oradoc/server.901/a90125/statements_916.htm#2080942
可以的,是否楼主对应类型搞错了,请细心检查