c – 使用来自SOCI的匿名PL SQL块调用PLsql脚本
发布时间:2020-12-16 07:20:54 所属栏目:百科 来源:网络整理
导读:我正在寻找一种通过SOCI调用匿名PLsql块的方法.数据传输通过先前在脚本中创建为变量的refcursor进行: variable rc refcursordeclare v_obj_id number(4,0) := 1; v_obj_def varchar(30); v_obj_type number := 1;begin open :rc for select v_obj_id,OBJ_DE
我正在寻找一种通过SOCI调用匿名PLsql块的方法.数据传输通过先前在脚本中创建为变量的refcursor进行:
variable rc refcursor declare v_obj_id number(4,0) := 1; v_obj_def varchar(30); v_obj_type number := 1; begin open :rc for select v_obj_id,OBJ_DEF_ID from MY_OBJECT_DEFS where OBJECT_TYPE = v_obj_type; end; 我需要从我的应用程序中读取refcursor来检索数据.我尝试通过soci :: statement执行上述操作,但它给出了错误:ORA-24333:零迭代计数.在SqlPlus中执行时,PLsql脚本工作正常. >如何在语句和语句之间建立连接 以下是我试过的. sSQL包含上面的PLsql脚本: dbConn.open("..."); int iObjId; std::string iObjDefId; soci::indicator ind_iObjId = soci::i_ok,ind_iObjDefId = soci::i_ok; soci::statement stmt(dbConn); stmt.alloc(); stmt.prepare(sSQL); stmt.exchange(soci::into(iObjId,ind_iObjId)); stmt.exchange(soci::into(iObjDefId,ind_iObjDefId)); stmt.define_and_bind(); stmt.execute(false); while (stmt.fetch()) { if (soci::i_ok == ind_iObjId) std::cout << "Obj ID: " << iObjId << std::endl; if (soci::i_ok == ind_iObjDefId) std::cout << "Obj Def ID: " << iObjDefId << std::endl; } 编辑:我正在使用Oracle 11g 解决方法
语句变量rc refcursor既不是SQL也不是PL / SQL,而是Oracle的
SQL*Plus命令行实用程序和兼容的第三方产品的一部分.我不知道C,但可能你需要在宿主程序中定义一个ref cursor对象.
如果这不可行,并且您使用的是Oracle 12.1或更高版本,那么您可以使用implicit result set构造, declare rc sys_refcursor; begin open rc for select * from dual; dbms_sql.return_result(rc); end; 正如Is it possible to output a SELECT state from a PL/SQL block?所述 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |