2016-11-29 164 views
0

我熟悉Oracle PL/SQL和C/C++语言,我可以编写从数据库中提取数据并将结果输出到控制台/命令/输出流的代码/等等。CXX-E-UNDECLARED,标识符“exec”未定义

但是,我不熟悉openVMS的开发。但我能确认CXX编译器(内置于操作系统)编译/链接和运行下面的代码后,工作原理:

#include <stdio.h> 
void main(void) { 
    printif("Hello World!\n"); 
} 

现在,我想我最好的连接到Oracle数据库(它安装在同一台服务器上,并且还有许多其他C/CP文件被写入来从数据库中提取数据并且工作正常),但我无法编译任何试图从数据库中读取的代码。为简单起见,这里是试图访问数据库的代码:

#include<stdio.h> 

void main(void) { 
    int cnt = -1; 
    exec sql SELECT count(*) INTO :cnt FROM EMPLOYEES; 
    printif("Number of employees: %d", cnt); 
} 

当我编译,我得到:

%CXX-E-UNDECLARED, identifier "exec" is undefined 

起初,我以为我可能会丢失在图书馆头,所以我尝试了以下内容:

#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> 

但没有上述库导致编译器停止抱怨exec sql statetment。

我去了关于在openVMS上编写C程序的Oracle技术文档,发现一些示例代码包括<sqlca.h>和其他像<sql_sqlda.h>但其中没有一个解决了我的问题。

我猜想,可能是一个特殊的命令,负责EXEC SQL语句在某种程度上编译之前写的其他的C文件(在编译时在运行安装依赖库???)

所以我的问题是:我能做些什么来编译我的代码并获得某个表中的记录数?

回答

0

你有什么在你的C代码中嵌入SQL。用Oracle的说法,这是Pro * C代码,它首先需要通过预编译器运行,以将嵌入式SQL和/或PL/SQL转换为常规C代码。

有关更多信息,请参阅Oracle Pro*C/C++ documentation