使用来自 SOCI 的匿名 PL SQL 块调用 PLsql 脚本
Calling PLsql script with an anonymous PL SQL block from SOCI
>我正在寻找一种通过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: zero iteration count
.PLsql 脚本在 SqlPlus 中执行时工作正常。
- 如何在语句和Refcursor RC?我是否应该为此目的使用其他 SOCI 结构(语句除外(?
- 我知道上面有两个说明脚本;(i. refcursor creation, ii. 匿名 PLsql 块本身(。我不确定是否可以调用多个单个 SOCI 语句中的说明。这能得到证实吗?
以下是我尝试过的。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
语句
variable rc refcursor
既不是SQL也不是PL/SQL,而是Oracle的SQL*Plus命令行实用程序和兼容的第三方产品的一部分。我不知道C++但大概你需要在主机程序中定义一个 ref 光标对象。
如果这不可行,并且您使用的是 Oracle 12.1 或更高版本,则可以使用隐式结果集构造,如下所示:
declare
rc sys_refcursor;
begin
open rc for select * from dual;
dbms_sql.return_result(rc);
end;
如是否可以从 PL/SQL 块输出 SELECT 状态中所述?
相关文章:
- 如何使用c++在VS 2019上运行SQL查询
- System.InvalidCastException - SQL to C++ - safe_cast<float>
- 在C++中调用 MS SQL 存储过程
- 尝试创建表会给出 SQL 逻辑错误
- 在 MySQL/Connector C++中使用 SQL 联接
- Qt PL/SQL - 赋值运算符 - 字符串缓冲区太小
- PostgresSQL - SQL Ready 语句与字符串转义,防止 SQL 注入攻击
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 使用 SQLConfig数据源创建 SQL Server DSN 失败:关键字-值对无效
- 使用 Qt5 SQL 进行异步数据库访问的策略
- Qt/SQL - 从 QSqlQuery exec Stored Procedure 获取列类型和名称?
- 如何将QTime保存在SQL Server Express表中并读回?
- 为 Sql 服务器实现 odbc 包装器.将数据库数据读取为字符或要求驱动程序将数据转换为 C 类型
- 使用 python 或 c ++ 中的 sql 根据输入数据输出输出示例
- 无法使用 SQL VDI(虚拟设备接口)创建条带化备份
- sql记录集函数的状态设计模式
- 使用来自 SOCI 的匿名 PL SQL 块调用 PLsql 脚本
- PL/SQL可以将选择结果集保存到clob中
- 为什么从客户端应用程序调用 PL/SQL 调用 SQL 引擎
- 从Oracle PL/SQL中获取数据到主机阵列