create or replace procedure a_procedure(
v_table_name varchar2
)
is
a_1 number;
v_str varchar2(30);
begin
select count(*) into a_1 from user_tab_columns where table_name=v_table_name;
if a_1=1 then
v_str:='drop table  '||v_table_name||';';
execute immediate v_str;
else
v_str:='create table v_table_name_01 as select * from '||v_table_name;
execute immediate v_str;
v_str:='truncate table '||v_table_name;
execute immediate v_str;
v_str:='insert into '||v_table_name||'(select * from v_table_name_01)';
execute immediate v_str;
end if;
end a_procedure;我写了这个存储过程也编译通过
但我怎们调用这存储过程呢?
我用
declare
begin
execute a_procedure('EMP');
end;
这个方法不行~~请各位大虾告诉我谢谢了

解决方案 »

  1.   

    declare
    begin
     a_procedure('EMP');
    end;
      

  2.   

    稍微修改一下:
    declare
    begin
       a_procedure('EMP');
    end;
      

  3.   

    如果需要在存储过程中事务控制,则执行完所有语句以后commit;否则放在调用处执行commit
      

  4.   

    在 sqlplus 中可以直接用 execute a_procedure('EMP'); 调用,不需要包含在 plsql 块中。如果要在 plsql 块中调用,则不可以通过 execute 调用。
    begin
      a_procedure('EMP');
    end;
    /