免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3632 | 回复: 10
打印 上一主题 下一主题

[C++] 急, OCCI调用的问题, 正在郁闷中 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-21 12:29 |只看该作者 |倒序浏览
--ORACLE 函数代码, 用out参数返回一个数组

  1. CREATE OR REPLACE TYPE OBJ AS OBJECT ( Id NUMBER(10), name VARCHAR2(32) );
  2. CREATE OR REPLACE TYPE OBJ_ARRAY AS TABLE OF OBJ;


  3. CREATE OR REPLACE FUNCTION GetCollection (objs OUT OBJ_ARRAY) RETURN BINARY_INTEGER AS
  4.     vret BINARY_INTEGER;
  5. BEGIN
  6.     objs := OBJ_ARRAY();

  7.     for i in 1..5
  8.     loop
  9.             objs.extend();
  10.         objs(objs.Last) := OBJ(i, "test");
  11.     end loop;

  12.     vret := 0;
  13.     RETURN vret;
  14. END GetCollection;
复制代码


C++代码, 调用ORACLE函数, 并用getVector 取出数组,结果捕获到OCI-21500错误!


  1. #include <stdlib.h>
  2. #include <occi.h>
  3. #include <iostream>
  4. #include <string>
  5. #include <stdexcept>

  6. #include "ott/map.h"

  7. using namespace oracle::occi;
  8. using namespace std;

  9. int main(int argc, char** argv)
  10. {
  11.     try
  12.     {
  13.         string user = "test";
  14.         string passwd = "test";
  15.         string db = "test";

  16.         Environment* env = Environment::createEnvironment (Environment::OBJECT);
  17.         map(env);

  18.         Connection* conn = env->createConnection (user, passwd, db);
  19.             Statement* stmt = conn->createStatement("BEGIN :1 := GetCollection(:2); END;") ;

  20.         stmt->registerOutParam(1, OCCIINT);
  21.         stmt->registerOutParam(2, OCCIVECTOR, 0, "OBJ_ARRAY");
  22.         stmt->execute();

  23.             int code = stmt->getInt(1);

  24.             cout << "RetCode = " << code << endl; -- Prints "RetCode = 0"

  25.         std::vector< RefAny > vObjs;
  26.         getVector(stmt, 2, vObjs);    -- 执行到这行时, 捕获 OCI-21500: 而且还是内部错误.       

  27.         conn->terminateStatement(stmt);
  28.         env->terminateConnection(conn);
  29.         Environment::terminateEnvironment(env);
  30.     }
  31.     catch(SQLException& ex)
  32.     {
  33.         cerr << "Program raised exception " << ex.getErrorCode()
  34.                 << " with text:" << endl << ex.getMessage().c_str() << endl;
  35.         return EXIT_FAILURE;
  36.     }
  37.     catch(std::exception& ex)
  38.     {
  39.          cerr << "Program raised std::exception: " << ex.what() << endl;
  40.          return EXIT_FAILURE;
  41.     }
  42.     catch(...)
  43.     {
  44.          cerr << "Unhandled exception." << endl;
  45.          return EXIT_FAILURE;
  46.     }

  47.     return EXIT_SUCCESS
  48. }
复制代码


请大虾指点一下, 到底哪里出了问题?

论坛徽章:
0
2 [报告]
发表于 2008-10-21 13:13 |只看该作者
用cmd看一下oerr oci 21500

论坛徽章:
0
3 [报告]
发表于 2008-10-21 13:18 |只看该作者

回复 #2 gawk 的帖子

? 没明白

论坛徽章:
0
4 [报告]
发表于 2008-10-21 13:44 |只看该作者
再顶一下

论坛徽章:
0
5 [报告]
发表于 2008-10-21 13:55 |只看该作者
难道就这样石沉大海?

论坛徽章:
0
6 [报告]
发表于 2008-10-21 22:27 |只看该作者
期待大侠的出现, 小弟在此先谢过了

论坛徽章:
0
7 [报告]
发表于 2008-10-22 09:11 |只看该作者
先让帖子升起来

论坛徽章:
0
8 [报告]
发表于 2008-10-22 11:06 |只看该作者
在线等

论坛徽章:
0
9 [报告]
发表于 2008-10-22 17:43 |只看该作者
顶一下

论坛徽章:
0
10 [报告]
发表于 2008-10-24 13:11 |只看该作者
已经解决
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP