pro*c变量声明的问题

bhj5787 2006-05-22 03:07:57
文件内容
#include "test.h"

EXEC SQL BEGIN DECLARE SECTION;
typedef int ID;
EXEC SQL END DECLARE SECTION;
int main(argc,argv)
int argc ;
char**argv;
{

EXEC SQL BEGIN DECLARE SECTION;
ID LN_SERV_ID;
EXEC SQL END DECLARE SECTION;
EXEC SQL
SELECT 1
INTO :LN_SERV_ID
FROM dual;

return 1;
}

目前想把
EXEC SQL BEGIN DECLARE SECTION;
typedef int ID;
EXEC SQL END DECLARE SECTION;
移至test.h文件中
但是移至后预编译提示如下

Pro*C/C++: Release 8.1.7.0.0 - Production on Mon May 22 14:54:03 2006

(c) Copyright 2000 Oracle Corporation. All rights reserved.

System default option values taken from: /data/oracle/oracle/product/8.1.7/precomp/admin/pcscfg.cfg

Syntax error at line 9, column 2, file test.pc:
Error at line 9, column 2 in file test.pc
ID LN_SERV_ID;
.1
PCC-S-02201, Encountered the symbol "ID" when expecting one of the following:

auto, char, const, double, enum, extern, float, int, long,
ulong_varchar, OCIBFileLocator OCIBlobLocator,
OCIClobLocator, OCIDateTime, OCIExtProcContext, OCIInterval,
OCIRowid, OCIDate, OCINumber, OCIRaw, OCIString, register,
short, signed, sql_context, sql_cursor, static, struct,
typedef, union, unsigned, utext, uvarchar, varchar, void,
volatile, a typedef name, a precompiled header, exec oracle,
exec oracle begin, exec, exec sql, exec sql begin,
exec sql end, exec sql type, exec sql var, exec sql include,
The symbol "enum," was substituted for "ID" to continue.

Error at line 0, column 0 in file test.pc
PCC-F-02102, Fatal error while doing C preprocessing

--------------
若何修改才能正确?

同时想知道为什么在红帽 linux9必须有
EXEC SQL BEGIN DECLARE SECTION;
ID LN_SERV_ID;
EXEC SQL END DECLARE SECTION;
这样的声明。
我在hpunix下就不需要这个的,有什么配置控制吗?
...全文
638 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolmop 2006-12-29
  • 打赏
  • 举报
回复
对应楼主的例子就是,把
EXEC SQL BEGIN DECLARE SECTION;
typedef int ID;
EXEC SQL END DECLARE SECTION;
改为:typedef int ID;
编译就有问题。


我修改后的文件:
/*EXEC SQL BEGIN DECLARE SECTION;*/
typedef int ID;
/*EXEC SQL END DECLARE SECTION;*/

EXEC SQL INCLUDE sqlca;

int main( int argc, char **argv)
{

EXEC SQL BEGIN DECLARE SECTION;
ID LN_SERV_ID;
EXEC SQL END DECLARE SECTION;

EXEC SQL SELECT 1 INTO :LN_SERV_ID FROM dual;

return 1;
}
coolmop 2006-12-29
  • 打赏
  • 举报
回复
但还有一个问题就是:
我定义了一个结构体,之后申明了一个这种结构体的共享变量,编译报错。
但如果把结构体定义在EXEC SQL BEGIN...和EXEC SQL END...之间就没问题。
coolmop 2006-12-29
  • 打赏
  • 举报
回复
谢谢!
用EXEC SQL include "test.h";
可以解决将EXEC SQL BEGIN...放到.h文件中问题。
已测试通过。
basten622 2006-12-28
  • 打赏
  • 举报
回复
同意楼上的。
不过不建议将以下定义:
EXEC SQL BEGIN DECLARE SECTION;
typedef int ID;
EXEC SQL END DECLARE SECTION;
放到.h文件。
因为这样是作为全局变量使用,不利于数据封装。
如果你确实有此需求就另当别论了。
flying_fish 2006-12-28
  • 打赏
  • 举报
回复
EXEC SQL include "test.h";
playmud 2006-12-28
  • 打赏
  • 举报
回复
EXEC SQL BEGIN DECLARE SECTION;
typedef int ID;
EXEC SQL END DECLARE SECTION;
放入.h的时候就不能用
#include "test.h"
这种形式去加载了
coolmop 2006-12-27
  • 打赏
  • 举报
回复
我也碰到楼主描述的问题。有人知道怎么解决吗?谢谢先
qtj 2006-07-11
  • 打赏
  • 举报
回复
同时想知道为什么在红帽 linux9必须有
EXEC SQL BEGIN DECLARE SECTION;
ID LN_SERV_ID;
EXEC SQL END DECLARE SECTION;
这样的声明。
我在hpunix下就不需要这个的,有什么配置控制吗?


如果:预编译选项CODE=CPP或MODE=ANSI 时则必须在定义部分定义宿主变量.
bhj5787 2006-05-23
  • 打赏
  • 举报
回复
只能自己up了

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧