这样一个存储过程:
creat or replace procedure PROC1(link varchar2)isinsert into table1@link select * from table2;end PROC1; 调用这个存储过程:ls_v varchar2(1);if ls_v ='s' then
   PROC1(slink);
else if ls_v = 't' then
   Proc1(tlink);
end if;这样做可以的么???

解决方案 »

  1.   

    不行,如果要用参数,得用动态执行e.g.:
    execute immediate 'select * from a@' || db_link;
      

  2.   

    因为我的sql语句挺长的,而且select语句里面还有几个的嵌套,所以我想动态语句写起来会很麻烦,而且维护起来也不方便,打算写一个存储过程来做,请问还有什么好的建议么????
      

  3.   

    可以但是要预先把这些dblink建好。
    在你的存储过程理肯定要用动态语句。
    在调用的时候。
    ls_v varchar2(1); 
    begin
    proc1(ls_v||'link');
    end;
      

  4.   

    可以但是要预先把这些dblink建好。
    在你的存储过程理肯定要用动态语句。
    在调用的时候。
    ls_v varchar2(1); 
    begin
    proc1(ls_v||'link');
    end;
      

  5.   


    那还是避免不了要用动态sql,如果动态sql太长了怎么办?我的sql语句大致如下:insert into table1 (v1,v2,v3,....,v20)
    select (a1,a2,...,a20)
    from (select k1,case(很长的case)..k2,case..k3,....k20
          from table2@db_lilnk);这样写下来很长有什么好的建议么???谢谢~~~
      

  6.   


    太长?
    这种sql无论怎样,也都是这么长的.
      

  7.   

    是可以,但必须要用动态sql,同时他会自动检查你这个dblink是否存在