关于在PB中动态调用ORACLE的存储过程

来源:互联网 发布:linux查看系统版本 编辑:程序博客网 时间:2024/05/04 04:40

关于在PB中动态调用ORACLE的存储过程  

在Oracle中建立远程连接后,想通过程序将远程的表导入到本地数据库中,就在数据库中建立了对应表的存储过程,其中一个过程如下:

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; 

原创粉丝点击