我最近的项目中,要使用proc来写一个动态调用存储过程的代码。问题描述:
其中存储过程名以及参数全部由外界传进来,存储过程返回一个游标(cursor)。存储过程的格式大概如下所示:
先是一个包头,里面就定义一些游标create or replace package ctsh_integration as  TYPE intexternal_tp IS REF CURSOR;
  TYPE intproduct_tp IS REF CURSOR;
  TYPE payprepaid_tp IS REF CURSOR;
  TYPE intsbucontrast_tp IS REF CURSOR;
  TYPE intwaivedcontrast_tp IS REF CURSOR;其中一个存储过程如下:
create or replace procedure ctsh_inexidconfind_proc(
  v_service_internal_id             in        NUMBER,
  v_service_internal_id_resets      in        NUMBER,
  v_crm_integration_id              in        VARCHAR2,
  ctsh_inexidconfind_proc_cv IN OUT ctsh_integration.intexternal_tp
/*这里是存储过程中唯一的返回——游标*/

is
这里:存储过程ctsh_inexidconfind_proc首先插入一条数据,然后再返回一个游标。其它的存储过程也都只返回一个游标。我在网络上找到了一种用动态方法3实现的方法,如下:
/*定义变量*/
exec sql begin declare section; 
   long int service_internal_i=222;
   long int service_internal_id_resets=0;
   char crm_integration_id[]="AAASSZZ";
   char *test = "begin ctsh_inexidconfind_proc(:v1,:v2,:v3,:v4); end;";
   sql_cursor data;
exec sql end declare section; EXEC SQL ALLOCATE :data;EXEC SQL PREPARE S FROM :test;
EXEC SQL EXECUTE S USING :service_internal_i,:service_internal_id_resets,:crm_integration_id,:data;如果我使用EXEC SQL FETCH data INTO ......
则报错:游标未定义,同时不插入数据。
如果我不尝试访问data游标,则不报错,同时可以插入数据。
我怀疑查询结果已经返回了,只是访问方法出错。
请问其中的data游标如何访问?
还是说不能用这种方法动态访问存储过程?
如果不能还望指点一下如何实现。谢谢。注:需要任何信息,可以给我留言,我会尽快提供的。