Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从Oracle PL/SQL将数据获取到主机阵列_C++_Arrays_Oracle_Plsql - Fatal编程技术网

C++ 从Oracle PL/SQL将数据获取到主机阵列

C++ 从Oracle PL/SQL将数据获取到主机阵列,c++,arrays,oracle,plsql,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 DRIVE

我想将表中的一列数据拉入主机数组。在我的表中,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
execsql开始声明部分;
int生日[10];
execsqlend声明部分;
…//与数据库连接的代码
EXEC SQL EXECUTE
声明
...
开始
将DOB选择为:驾驶执照中的生日,其中DL\U编号<10;
结束
DOB列为整数类型,DRIVER_LICENSE表中的DL_编号从0开始。当我试图编译这个时,我得到错误“PLS-S-00597,INTO列表中的表达式“生日”类型错误”

如果运行中没有执行,我可以运行选择。C++代码:< /P>

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;
execsql开始声明部分;
int生日[10];
execsqlend声明部分;
SQL EXEC将DOB选择为:来自驾照的生日,其中DL\U编号<10;
给我驾驶执照表的DOB列中的数字


我尝试使用PL/SQL来整合很多SQL调用,以最小化与服务器的通信。我可以通过游标循环,将信息输入到C++生日数组中,并且一次一个地将值分配给生日数组元素,但这看起来很低效。

< P>你的目标不清楚;你到底在想什么?完成

如果您只是尝试从数据库表中获取值,则只需简单的选择即可。无需特殊过程。这实际上可能会导致更大的开销,因为在使用该过程之前,需要将该过程发送到数据库进行编译

我不知道C++语法,但您缺少第二个代码集的表标识符。

SQL EXECUTE SELECT dob INTO :birthdays FROM driver_license WHERE dl_number < 10;
SQL执行SELECT dob INTO:来自驾照的生日,其中dl\U编号<10;

您的目标不明确;您真正想要实现的是什么

如果您只是尝试从数据库表中获取值,则只需简单的选择即可。无需特殊过程。这实际上可能会导致更大的开销,因为在使用该过程之前,需要将该过程发送到数据库进行编译

我不知道C++语法,但您缺少第二个代码集的表标识符。

SQL EXECUTE SELECT dob INTO :birthdays FROM driver_license WHERE dl_number < 10;
SQL执行SELECT dob INTO:来自驾照的生日,其中dl\U编号<10;

我对你的C++库/框架/调用上下文一无所知,但是在PL/SQL <代码>中选择“< /代码>”,绑定变量必须是标量变量。<代码> int生日[10 ] < /C> >看起来像一个数组,所以在第一个例子中PL/SQL编译器错误消息完全有意义。 我认为你的第二个例子不可能奏效,除非神奇的圣歌
sqlexec
以某种方式隐式运行在PL/SQL上下文中(并引发与第一个例子相同的PL/SQL编译器错误)。
selectinto
仅是PL/SQL,应该在SQL上下文中引发SQL解析器错误

看起来您希望获得,因此在PL/SQL中,您应该使用
select-into-bulk-collect


你应该研究你的C++调用上下文SQL协作文档,以了解它是如何绑定到数组的。

我对你的C++库/框架/调用上下文一无所知,但是在PL/SQL <代码>中选择“< /代码>”,绑定变量必须是标量变量。<代码> int生日[10 ]
看起来像一个数组,因此第一个示例中的PL/SQL编译器错误消息非常有意义

我认为你的第二个例子不可能奏效,除非神奇的圣歌
sqlexec
以某种方式隐式运行在PL/SQL上下文中(并引发与第一个例子相同的PL/SQL编译器错误)。
selectinto
仅是PL/SQL,应该在SQL上下文中引发SQL解析器错误

看起来您希望获得,因此在PL/SQL中,您应该使用
select-into-bulk-collect


你应该研究C++调用上下文SQL协作文档,以了解它是如何绑定到数组的。

谢谢。我知道,这个例子中,简单的选择会起作用,而不需要PL/SQL。但是,我们有很多地方把数组拉到数组中,并基于此来决定要拉什么东西。我想把逻辑移到Oracle服务器上,减少调用它的次数。@ HyyWoFoLyd我建议创建数据库包并将业务逻辑移动到数据库层。现在你所做的不是减少任何事情,实际上增加了不必要的复杂性和编译时间。看起来你想绑定一个C++ DDA。Oracle只返回表。Oracle只返回表结果。如果要将表结果转换成数组,则必须使用ODPtoStalk函数。不确定C++中的内容是什么,但谷歌搜索应该提供。谢谢。我知道,在这个例子中,简单的选择将不需要PL/SQL。但是,我们有很多地方。这是我们将数据拉入阵列的地方,并在此基础上决定还需要拉什么。最终,我们希望将逻辑移到Oracle服务器上,并减少对它的调用次数。@HeywoodFloyd我建议创建数据库包,并将业务逻辑移到数据库层。您现在所做的不是减少任何东西,而是实际上增加了不必要的复杂性和编译时间。看起来你想把C++数据类型绑定到PLSQL方法。Oracle只返回表。如果你想将表结果转换成数组,你就必须使用ODPtoStalk函数。不确定C++中的内容是什么,但是谷歌搜索应该提供这个。谢谢。第二次SQL调用确实不完整。批量收集是我所需要的。谢谢。第二次SQL调用确实不完整。批量收集是我所需要的。