Merge into tablename
     using  (datasource)
     on ()
     ...
     ...语句中是否可以使用外部变量?

解决方案 »

  1.   

    嘗試一下就知道了。
    在動態sql里面這些肯定是可以的。
      

  2.   

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

  3.   

    首先感谢大侠捧场!!!
    我测试过在update和insert部分是可以的,但在using (select .. from .. where --这里用外部变量就出错?),是不是就where后面不能使用外部变量?!!
      

  4.   

    参考:
    http://gigabase.idi.ntnu.no/oradoc/server.901/a90125/statements_916.htm#2080942
    可以的,是否楼主对应类型搞错了,请细心检查
      

  5.   

    类型没有错,单独将select语句(带外部变量)拿出来运行是可以的!!!