我的存储过程如下
CREATE OR REPLACE PROCEDURE Test(sqlstr in varchar2,tablename in varchar2,col_count in INTEGER,company_id in varchar2,report_date in varchar2)
is
TYPE var_list   IS varray (40) OF varchar2(30);var_tab     var_list;ls_type_temp integer;
cursor1 integer;
rows_processed integer;
insert_str VARCHAR2(3000);
begin
var_tab := var_list(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40);
cursor1 := dbms_sql.open_cursor;
    dbms_sql.parse(cursor1, sqlstr, DBMS_SQL.V7);
    for ls_type_temp in 1..col_count  loop
    dbms_sql.define_column(cursor1, ls_type_temp, var_tab(ls_type_temp),150);
end loop; rows_processed := dbms_sql.execute(cursor1); while  dbms_sql.fetch_rows(cursor1) > 0  loop
insert_str :='insert into '||tablename||' values('''||company_id||''','''||report_date||''',';
    for ls_type_temp in 1..col_count  loop
dbms_sql.column_value(cursor1, ls_type_temp, var_tab(ls_type_temp));
if ls_type_temp = col_count then
insert_str := insert_str||''''||var_tab(ls_type_temp)||'''';
else
   insert_str := insert_str||''''||var_tab(ls_type_temp)||''',';
   end if;
    end loop;
    insert_str := insert_str||')';
    --DBMS_OUTPUT.PUT_LINE(insert_str);
EXECUTE IMMEDIATE insert_str;
commit;
end loop;
   dbms_sql.close_cursor(cursor1);
Commit;
end;
/