Oracle CXX-E-未声明,标识符“;执行官;是未定义的
我熟悉OraclePL/SQL和C/C++语言,我可以编写代码从数据库中提取数据并将结果输出到控制台/命令/输出流/等等 但是,我不熟悉openVMS的开发。但我能够验证Oracle CXX-E-未声明,标识符“;执行官;是未定义的,oracle,openvms,Oracle,Openvms,我熟悉OraclePL/SQL和C/C++语言,我可以编写代码从数据库中提取数据并将结果输出到控制台/命令/输出流/等等 但是,我不熟悉openVMS的开发。但我能够验证CXX编译器(内置于操作系统中)在编译/链接并运行以下代码后是否正常工作: #include <stdio.h> void main(void) { printif("Hello World!\n"); } 起初,我认为我可能在标题处缺少一个库,因此我尝试了以下方法: #include <stdio.
CXX
编译器(内置于操作系统中)在编译/链接并运行以下代码后是否正常工作:
#include <stdio.h>
void main(void) {
printif("Hello World!\n");
}
起初,我认为我可能在标题处缺少一个库,因此我尝试了以下方法:
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#ifdef PC
#include <fcntl.h>
#else
#include <unixio.h>
#include <file.h>
#endif
#include <ctype.h>
#包括
#包括
#包括
#ifdef PC
#包括
#否则
#包括
#包括
#恩迪夫
#包括
但是上述库都没有导致编译器停止抱怨execsql
statement
我查阅了有关在openVMS上编写C程序的Oracle技术文档,找到了一些示例代码,其中包括
和其他类似的
,但没有一个解决了我的问题
我猜,以前编写的其他c文件可能是通过一个特殊的命令编译的,该命令负责EXEC SQL语句(通过在编译时动态附加一个依赖库??)
所以我的问题是:如何编译代码并获得某个表中的记录数?您的C代码中嵌入了SQL。用Oracle的说法,这是Pro*C代码,它首先需要通过预编译器运行,以将嵌入式SQL和/或PL/SQL转换为常规C代码
有关更多信息,请参阅Oracle。您的C代码中嵌入了SQL。用Oracle的说法,这是Pro*C代码,它首先需要通过预编译器运行,以将嵌入式SQL和/或PL/SQL转换为常规C代码
请查看Oracle以了解更多信息。经过多次尝试和错误,我找到了解决问题的有效方法。@Sentinel发布的答案很有用,但文档很难理解 我决定发布成功编译包含PL/SQL语句的C代码的步骤。我特意编写了这些步骤,让您从头开始了解整个过程,因为我对Oracle文档缺乏如此层次的解释感到非常沮丧。在研究了Oracle文档以及StackOverflow的其他一些答案之后,我不得不将所有这些步骤放在一起,更不用说一些YouTube越南语视频(我不知道如何翻译) 第一步 确保您的C代码包含正确的include oracle库
#include<stdio.h>
#include<stdlib.h>
exec sql include sqlca;
exec sql begin declare section;
int cnt; //variable to be accessed by PL/SQL block
exec sql end declare section;
main() {
exec sql connect SCOTT identified by TIGER;
if(sqlca.sqlcode==0) {
// assuming no errors from the last sql statement
exec sql select count(*) into :cnt from TEST_TABLE;
// this is an example only. Replace the statement with a useful one
printf("\nNumber of rows: %d", cnt);
} else {
printf("\nError Code: %d, Message: %s", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
}
}
步骤3
现在,您将有一个名为new_TEST.PC
的新文件,其中包含预编译的SQL c以及原始c代码。现在是使用本机C编译器编译此文件的时候了
CXX /DEBUG=TRACE /OPTIMIZE /PREFIX=ALL /GRAN=LONG /NAME=AS_IS /FLOAT=IEEE NEW_TEST.PC
步骤4
现在,可以使用Oracle链接器链接对象文件了
LNPROC NEW_TEST NEW_TEST CPP
步骤5
现在可以运行可执行文件了
RUN NEW_TEST.EXE
经过这么多的尝试和错误,我找到了解决我问题的有效方法。@Sentinel发布的答案很有用,但文档很难理解 我决定发布成功编译包含PL/SQL语句的C代码的步骤。我特意编写了这些步骤,让您从头开始了解整个过程,因为我对Oracle文档缺乏如此层次的解释感到非常沮丧。在研究了Oracle文档以及StackOverflow的其他一些答案之后,我不得不将所有这些步骤放在一起,更不用说一些YouTube越南语视频(我不知道如何翻译) 第一步 确保您的C代码包含正确的include oracle库
#include<stdio.h>
#include<stdlib.h>
exec sql include sqlca;
exec sql begin declare section;
int cnt; //variable to be accessed by PL/SQL block
exec sql end declare section;
main() {
exec sql connect SCOTT identified by TIGER;
if(sqlca.sqlcode==0) {
// assuming no errors from the last sql statement
exec sql select count(*) into :cnt from TEST_TABLE;
// this is an example only. Replace the statement with a useful one
printf("\nNumber of rows: %d", cnt);
} else {
printf("\nError Code: %d, Message: %s", sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
}
}
步骤3
现在,您将有一个名为new_TEST.PC
的新文件,其中包含预编译的SQL c以及原始c代码。现在是使用本机C编译器编译此文件的时候了
CXX /DEBUG=TRACE /OPTIMIZE /PREFIX=ALL /GRAN=LONG /NAME=AS_IS /FLOAT=IEEE NEW_TEST.PC
步骤4
现在,可以使用Oracle链接器链接对象文件了
LNPROC NEW_TEST NEW_TEST CPP
步骤5
现在可以运行可执行文件了
RUN NEW_TEST.EXE