自己写的oracle存储过程会用到

来源:互联网 发布:数据保护解决方案 编辑:程序博客网 时间:2024/05/20 09:23

create or replace procedure prc_statistic_declare(table_name varchar2 ,table_name_pass varchar2 ,not_exist varchar2,not_exist_record varchar2)
--eg:'t_statistic_bianyuanhu_month',t_statistic_bianyuanhu_month,('YEAR','STATISTIC_ID')','YESR'
is
   v_sql_column varchar2(1000);
   v_sql_record varchar2(1000);
   get_declare  varchar2(9000);
begin
  declare
 
     type v_column is record(c_value varchar2(200));
     dec_column v_column;
    
     type my_cursor is ref cursor;
     v_statistic_cur my_cursor;
    
  begin
     v_sql_column :=' select column_name  from user_tab_columns c WHERE c.TABLE_name = upper('||table_name||')
                      and c.column_name not in   ('||not_exist||')';
     dbms_output.put_line(v_sql_column);
     get_declare :=' ';
     open v_statistic_cur for v_sql_column;
     fetch v_statistic_cur into dec_column;
     while v_statistic_cur%found loop----------获得declare数组语句
            get_declare :='type '||dec_column.c_value||'  is table of '||table_name_pass||'.'||dec_column.c_value||'%type index by pls_integer;';
            dbms_output.put_line('type V_'||dec_column.c_value||'  is table of '||table_name_pass||'.'||dec_column.c_value||'%type index by pls_integer;');
            fetch v_statistic_cur into dec_column; 
     end loop;        
     commit;
    
    open v_statistic_cur for v_sql_column;
     fetch v_statistic_cur into dec_column;
     while v_statistic_cur%found loop----------获得declare数组语句
            get_declare :=' DEC_'||dec_column.c_value||' V_'|| dec_column.c_value||';';
            dbms_output.put_line(' DEC_'||dec_column.c_value||' V_'|| dec_column.c_value||';');
            fetch v_statistic_cur into dec_column; 
     end loop;        
     commit;
    
   dbms_output.put_line('');
   dbms_output.put_line('');
   v_sql_record :=' select column_name  from user_tab_columns c WHERE c.TABLE_name = upper('||table_name||')
                      and c.column_name not in  upper('||not_exist_record||')';
   dbms_output.put_line(v_sql_record);
     open v_statistic_cur for v_sql_record;
    fetch v_statistic_cur into dec_column;
     while v_statistic_cur%found loop-----------获得record语句
            get_declare := 'V_'||dec_column.c_value||'  '||table_name_pass||'.'||dec_column.c_value||'%type,';
            dbms_output.put_line(get_declare);
            fetch v_statistic_cur into dec_column; 
     end loop;        
     commit;
    open v_statistic_cur for v_sql_record;
    fetch v_statistic_cur into dec_column;
     while v_statistic_cur%found loop-----------获得record语句
            get_declare := 'REC_'||dec_column.c_value||'  V_'|| dec_column.c_value||'; ';
            dbms_output.put_line(get_declare);
            fetch v_statistic_cur into dec_column; 
     end loop;        
     commit;
   end;
   end prc_statistic_declare;

原创粉丝点击