c++ - 从 Oracle PL/SQL 获取数据到主机阵列

标签 c++ arrays oracle plsql

我想将表中的一列数据提取到主机数组中。在我的表中,DOB 是一个整数类型。我的 C++ 代码如下所示:

EXEC SQL BEGIN DECLARE SECTION;
int birthdays[10];
EXEC SQL END DECLARE SECTION;

...//Code to connect with the database

EXEC SQL EXECUTE
DECLARE
    ...
BEGIN
   SELECT DOB INTO :birthdays FROM DRIVER_LICENSE WHERE DL_NUMBER < 10;
END

DOB 列是整数类型,DRIVER_LICENSE 表中的 DL_NUMBERS 从 0 开始编号。当我尝试编译它时,出现错误“PLS-S-00597,INTO 列表中的表达式”BIRTHDAYS' 是类型错误"

如果不在 EXECUTE 中,我可以运行选择。 C++代码:

EXEC SQL BEGIN DECLARE SECTION;
int birthdays[10];
EXEC SQL END DECLARE SECTION;

SQL EXEC SELECT DOB INTO :birthdays FROM DRIVER_LICENSE WHERE DL_NUMBER < 10;

给我 DRIVER_LICENSE 表的 DOB 列中的数字。

我正在尝试使用 PL/SQL 来整合大量 SQL 调用,以尽量减少与服务器的通信。我可以通过遍历游标并一次为生日数组元素赋值,将信息放入 C++ 生日数组,但这似乎效率很低。

最佳答案

我对你的 C++ 库/框架/任何调用上下文一无所知,但在 PL/SQL 中,select into 期望 a single row result set并且绑定(bind)变量必须是标量变量。 int birthdays[10] 看起来像一个数组,因此第一个示例中的 PL/SQL 编译器错误消息非常有意义。

我不认为你的第二个例子可以工作,除非魔法吟唱 SQL EXEC 以某种方式在 PL/SQL 上下文中隐式运行(并引发与第一个例子相同的 PL/SQL 编译器错误) . select into 是一个 PL/SQL-only,应该在 SQL 上下文中引发一个 SQL 解析器错误。

看起来你希望获得a multi row result set ,因此在 PL/SQL 中,您应该改用 select into bulk collect

您应该更多地研究您的 C++ 调用上下文 SQL 合作文档,以了解它期望如何绑定(bind)到数组中。

关于c++ - 从 Oracle PL/SQL 获取数据到主机阵列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39357994/

相关文章:

c++ - 读取 ifstream 中从位置 N 开始的二进制字节?

c++ - 多重定义 C++

android - ndk 构建错误 : 'string' in namespace 'std' does not name a type

java - 在方法中返回数组

c# - 将json字符串转换为字符串数组

oracle - Entity Framework 忽略架构

c++ - 如何在头文件之外定义构造函数?

php - 排序数组并保留键的值

Oracle 11g Express Edition SYSTEM 架构被锁定

oracle - 当我删除一个列时,Oracle 会发生什么?