Oracle CXX-E-未声明,标识符“;执行官;是未定义的

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.

我熟悉OraclePL/SQL和C/C++语言,我可以编写代码从数据库中提取数据并将结果输出到控制台/命令/输出流/等等

但是,我不熟悉openVMS的开发。但我能够验证
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