问题是这样的:
  使用ORACLE数据库,建了一个包mypak:
create or replace package mypak is
    type UserCursorType is ref cursor;
    procedure get_data(mycursor in out UserCursorType);  
end mypak;create or replace package body mypak is
  procedure get_data(mycursor in out UserCursorType) is
  begin
    OPEN mycursor FOR SELECT cname FROM infotab;
  end;
end mypak;
   
用PRO*C/C++编了个测试小程序:
//测试游标操作: 
void get_datapro()
{  char cname[6];
  sql_cursor data_sursor;
  EXEC SQL ALLOCATE :data_sursor;
  EXEC SQL call mypak.get_data(:data_sursor);
  while(1){
    EXEC SQL FETCH :data_sursor INTO :cname;
printf("cname=%S*\n",cname);  }
 EXEC SQL CLOSE :data_sursor;
 EXEC SQL FREE :data_sursor;}
测试结果是游标data_sursor变量没有获得存储过程的返回结果。
请各位高手帮忙解决在PRO*C/C++下如何利用ORACLE库的存储过程或函数返回查询的多行数据操作(使用游标)?

解决方案 »

  1.   

    请你一定回答我一个问题。希望你一定回答可以吗?
        我用的ORACLE9I VC6.0 。
      问题是:
         1.我在PRO*C 的GUI里设置了相关的参数和路径。PRO*C 代码能成功通过。在VC里生成目标代码出错。VC里我是加载了ORACLE库函数的。我的问题是ORACLE 是不是要设置相关的东西。以便PRO*C 调用。
         2.你的问题可以看一看我发的帖子。一起想想怎样实现。一个帖友说他用 SYS_REFCURSOR
      

  2.   

    关于你的两个问题,建议你参阅《ORACLE9I PRO*C/C++编程指南》 一书,可以解决你的两个问题,
    简单地说,主要就是设置VC的开发环境:
      1)修改ORACLE数据库安装目录下的C:\Oracle\product\10.1.0\Db_1\precomp\admini\pcscfg.cfg文件:例:
    define=(WIN32_LEAN_AND_MEAN)
    parse=full
    include=C:\Oracle\product\10.1.0\Db_1\precomp\public
    include=C:\Oracle\product\10.1.0\Db_1\OCI\include
    include=C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE
      2)在VC中指定ORACLE 的头文件路径,例C:\ORACLE\PRODUCT\10.1.0\DB_1\PRECOMP\PUBLIC
      3)在VC中指定ORACLE 的库文件路径,例C:\ORACLE\PRODUCT\10.1.0\DB_1\PRECOMP\LIB
      4)在VC中指定ORACLE 的库文件,例oraSQL10.LIB。(oracle10g)
      

  3.   

    请问哪儿有pro *c的电子书啊