create or replace procedure P_InsertInto_ab01(InsertRows out number) is
begin
--删除原有的数据
execute immediate 'truncate table ab01';
--导入新数据
insert into ab01 (select * from ab01@xcsb);
commit;
--导入的总行数
select count(*) from ab01;
end;
由于我要导入多个表,但导入的方法都是一样的,所以要使用动态的存储过程!
这是我最开始用的方法,程序脚本如下:
//使用动态SQL
declare proc_mine dynamic procedure for sqlsa;
string ls_sql = "P_InsertInto_ab01"
prepare sqlsa from :ls_sql;
execute dynamic proc_mine;
decimal ld_result
fetch proc_mine into :ld_result;
close proc_mine;
可是在PB运行的过程中,出现错误了,错误是:“ora-24333零迭代计数”
我很郁闷,最后找出错误的原因了:
string ls_sql = "P_InsertInto_ab01"
改为:
string ls_sql = "execute P_InsertInto_ab01"
问题就解决了!
总结:如果存储过程中带有输入参数的话可以这样处理:
declare proc_mine dynamic procedure for sqlsa;
string ls_sql = "execute P_InsertInto_ab01 @para1=?,@para2=?"
prepare sqlsa from :ls_sql;
//参数
string ls_para1,ls_para2
ls_para1="1"
ls_para2="2"
execute dynamic proc_mine using :ls_para1,:ls_para2;
decimal ld_result
fetch proc_mine into :ld_result;
close proc_mine;