C++ 从Oracle PL/SQL将数据获取到主机阵列
我想将表中的一列数据拉入主机数组。在我的表中,DOB是一个整数类型。我的C++代码看起来像这样: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
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调用确实不完整。批量收集是我所需要的。