我有一个需求如下:
我有好几组表,如A,B,C,D,E
现在我要写一个存储过程,将A表中的内容和B表中的内容合并成一个C表,
当然这里的A表,B表,C表,都是存储过程的参数,还有条件。
如下格式,
create or replace procedure proc_test_a(tab1 in varchar2,tab2 in varchar2,tab3 in varchar2 ,condition in varchar,tab1fields in varhcar2,tab2fields in varhcar2,tab3fields in varhcar2,)也就是说,由表名,字段,条件都由用户传入,事先不确定。如何来写,,请大家指点。

解决方案 »

  1.   

    动态SQL来拼接查询的SQL语句,给点表结构和数据及结果
      

  2.   

    问题是你AB表内容合并成C表,怎么合并啊?
      

  3.   


    type curtype is ref cursor;
    mycur curtype;
    ....
    open mycur for 'select .... from .... where ....';close mycur;
      

  4.   

    我现在的问题是,如何将动态游标的内容fetch出来,放到一些变量里,因为游标是动态建立的,到底有多少个字段,是什么类型,都是传入的参数。请高手指点。
      

  5.   


    我想fetch  mycur into  变量这个变量怎么定义。
      

  6.   

    传字段的话要去用游标从user_tab_cols中匹配 较麻烦 效率不高 
    你就直接传sql语句
      

  7.   


    .....
    type my_type is record(str varchar2(100));
    type cur is ref cursor ;
    my_cur    cur;
    rs        my_type;begin
          sql_str:='select '||p_col2||' from '||table_name||' where '||p_col1||'='||p_value;
           open my_cur for sql_str;
           loop
              fetch my_cur into rs;
                    exit when my_cur%notfound;
                    result :=result || rs.str || ',';
           end loop;
           close my_cur ;--关闭游标....
      

  8.   

    p_col2  这里要表示多个不同类型的字段名,
    所以,你的my_type里只有一个varchar2类型,
    不行的。。比如说, select a,b,c from test where a>2我需要传入的参数是  'a,b,c'  'test'   'a>2'三个参数,
    有人说传入整个SQL语句,但是我也无法获得每行每一个字段的值啊。
      

  9.   

    Insert_head:=' insert into '||tab1 ||' select t.* from t_head t where t.cond  <='||condition;
      execute immediate Insert_head;
      

  10.   

    只有execute immediate 是可以调用动态的表名、字段、条件等,很方便;我用这个写了定期自动创建新的表,并把满足一定条件的历史数据转移过去的存储过程
      

  11.   

    拼接sql字符串 用execute 去执行字符串
      

  12.   


    假如表abc(a,b,c)
    现在传字段a,b,c  及表名abc装成动态sql及游标都没有问题.
    问题是我想对单独对a,b,c做一些处理,
    所以我要分别将a,b,c三个字段的内容取出,
    问题是出在取出上,,如果取出,保存到变量,这个变量如何定义,
    定义成什么类型???