有如下的存储过程create or replace procedure pro_synchronize(p_args varchar2) asbegin    update table_1 t1 set t1.tmp=(select t2.column_x from table_2 t2 where t2.id=t1.id); end;
对于 table_1 和 table_2 ,对于 table_1 中每一条记录,在 table_2 中都有一条对应的记录。执行该存储过程需要传递一个参数,这个参数是 table_2 中的字段名,实现将 table_2 中的指定字段值拷贝到 table_1 的 tmp 字段。即,上文中的t2.column_x需要用参数 p_args 替换,如何实现?

解决方案 »

  1.   


    create or replace procedure pro_synchronize(p_args varchar2) as
    str varchar2(1000):='';
    begin
    str:='update table_1 t1 set t1.tmp=(select '||p_args||'from table_2 t2 where t2.id=t1.id)';  
    execute immediate str;
    end;
      

  2.   


    create or replace procedure pro_synchronize(p_args varchar2) as
    v_sql varchar2(200);
    begin  v_sql:= 'update table_1 t1 set t1.tmp=(select '''||p_args ||''' from table_2 t2 where t2.id=t1.id)';  
      execute immediate v_sql;
      commit;end;
      

  3.   

    改正下:
    create or replace procedure pro_synchronize(p_args varchar2) as
    v_sql varchar2(200);
    begin  v_sql:= 'update table_1 t1 set t1.tmp=(select '||p_args ||' from table_2 t2 where t2.id=t1.id)';  
      execute immediate v_sql;
      commit;end;