动态存储过程实例:动态存储过程当然先得有一张表
例如 mdf_table
Table_name desc_table
Table1           aa
Table2           bb当然我们可以在表中加入更多的字段。我这个实例的主要功能是把table1到table2~~~中的数据做一个汇总,把结果放入到table1_out……中。
没有什么使用的功能,只能做一个流程上的演示。
我这里使用存储过程。
create or replace procedure test_pro
is
str_sql varchar(10000);
str_sql1 varchar(10000);
v_table_name mdf_table.table_name%type;
v_desc_table mdf_table.desc_table%type;
cursor mdf_cur is select table_name,desc_table from mdf_table;
begin
       open mdf_cur;
       LOOP
       fetch mdf_cur into v_table_name,v_table_name;
       exit when mdf_cur%notfound;
       str_sql:='insert into '||v_table_name||'_out select * from '||v_table_name;
       execute immediate str_sql;
       str_sql1:=v_desc_table;
       end loop;
       close mdf_cur;
       
end;
当然这里没有写实际的数据操作。
如果我们数据库中有Table1和Table2等表的话就可以通过一个过程处理所有的表了。

解决方案 »

  1.   


    --首先还是顶楼主下
    --这里指出点问题,和一些不明白的create   or   replace   procedure   test_pro 
    is 
    str_sql   varchar(10000); 
    str_sql1   varchar(10000); 
    v_table_name   mdf_table.table_name%type; 
    v_desc_table   mdf_table.desc_table%type; 
    cursor   mdf_cur   is   select   table_name,desc_table   from   mdf_table; 
    begin 
                  open   mdf_cur; 
                  LOOP 
                  fetch   mdf_cur   into   v_table_name,v_table_name;    --指出一个错误,这里是不是写错了 最好一个变量应该是v_desc_table
                  exit   when   mdf_cur%notfound; 
                  str_sql:= 'insert   into   '||v_table_name|| '_out   select   *   from   '||v_table_name;   --这里哪里做了把table1到table2~~~中的数据做一个汇总?
                  execute   immediate   str_sql; 
                  str_sql1:=v_desc_table;        --这句话在此有何意义?
                  end   loop; 
                  close   mdf_cur; 
                  
    end; 
      

  2.   

    --str_sql1:=v_desc_table;这个好像没有什么好大的作用
    create   or   replace   procedure   test_pro 
    is 
    str_sql   varchar(10000); 
    str_sql1   varchar(10000); 
    v_table_name   mdf_table.table_name%type; 
    v_desc_table   mdf_table.desc_table%type; 
    cursor   mdf_cur   is   select   table_name,desc_table   from   mdf_table; 
    begin 
                  open   mdf_cur; 
                  LOOP 
                  fetch   mdf_cur   into   v_table_name,v_table_name; 
                  exit   when   mdf_cur%notfound; 
                  str_sql:= 'insert   into   '||v_table_name|| '_out   select   *   from   '||v_table_name; 
                  execute   immediate   str_sql; 
                  str_sql1:=v_desc_table; 
                  end   loop; 
                  close   mdf_cur; 
      

  3.   

    --楼主是不是打字打快了 
    fetch   mdf_cur   into   v_table_name,v_table_name; --应该改成这样吧
    fetch mdf_cur into v_table_name,v_desc_table;