我想将表中的一列数据提取到主机数组中。在我的表中,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/