免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3223 | 回复: 11
打印 上一主题 下一主题

[讨论]oracle 10g中pro*c编译的一些问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-25 19:03 |只看该作者 |倒序浏览
最近在做到oracle 10g的升级,以前的Pro*c程序在oracle 10g上发现问题多多,搜索了一下坛子,没怎么有10g上的成功经验,我现在也卡壳了,将过程拿过来跟大家交流一下。
1,最开始,syntax error at line 40, column 9, file /usr/include/sys/stdio.h。。。。
PCC-S-02201, Encountered the symbol "lock_t" when expecting one of the following。。。
这之类的,原因不明,不过在proc 命令中加 parse=NONE就可以避免;
有可能会出size_t,这个google了一个相关的解释说是gcc版本的问题,需要3.3.3之上的版本
2,出signal.h相关的错误,
如/usr/include/sys/siginfo.h:259: error: parse error before "ctid_t"
/usr/include/sys/siginfo.h:292: error: parse error before '}' token
/usr/include/sys/siginfo.h:292: error: ISO C forbids data definition。。。
这个跟gcc的版本有关,最好用3.3.3以上版本,也可以做一下修改:
cd /usr/local/lib/gcc-lib/i386-pc-solaris2.10/3.3.2/install-tools/
在mkheaders.conf文件前加入SHELL=/bin/sh
并执行
./mkheaders
3,如果还有问题可以查看一下pcscfg.cfg,不过如果makefile设定得当的话这里可以不作修改。参考


4,完了我这里还有问题,这个估计跟10g有关了。10g得proc文档很难找,只找到了一个“README FILE FOR PRODUCT Pro*C/C++ RELEASE 10.1.0.2.0”(/$ORACLE_HOME/precomp/doc/proc/readme.doc),里面没有详细讲。

第一种错误,EXEC SQL select * from a where a.b=:ID;这种语句中的ID需要定义为host variable,而我之前的都是用的c的变量(虽然不合语法,不过在8.1.7上都是过的);
第二种错误,c中定义的一些结构会导致错误。如:
EXEC SQL BEGIN DECLARE SECTION;
  my_stat db_sDataStat[BAT_INS_NUM];
..1
EXEC SQL END DECLARE SECTION;
PCC-S-02201, Encountered the symbol "my_stat" when expecting one of the following:。。。。
其中my_stat是用c定义的结构,现在就卡到这里了,不知道是我的概念理解错误,还是10G的问题,接触过的解答一下吧。

论坛徽章:
0
2 [报告]
发表于 2006-10-26 11:37 |只看该作者
遇到过此问题,只要把结构的声明放到声明区内就行了

论坛徽章:
0
3 [报告]
发表于 2006-10-26 15:30 |只看该作者
印象中自己定义的结构 是不能放在 EXEC SQL 声明里面的

论坛徽章:
0
4 [报告]
发表于 2006-10-26 16:04 |只看该作者
This example shows an embedded SQL TYPE statement in a Pro*C/C++ Precompiler program:

struct screen {
short len;
char buff[4002];
};

typedef struct screen graphics;

EXEC SQL TYPE graphics IS VARRAW(4002);
     graphics crt; -- host variable of type graphics....


在文档上看到这一段,可是看得不太懂。

如果struct screen{
short len;
char buff[4002];
char buff1[10000];
int a ;
...
}
这样该咋办?

论坛徽章:
0
5 [报告]
发表于 2006-10-27 00:20 |只看该作者
想问下,pro*c用得广泛吗?想往数据库编程方面发展,哪个谈谈?

论坛徽章:
0
6 [报告]
发表于 2006-10-27 15:37 |只看该作者
原帖由 erpxp 于 2006-10-27 00:20 发表
想问下,pro*c用得广泛吗?想往数据库编程方面发展,哪个谈谈?


这个该问 linternt,他应该很了解。
我们用pro*c主要是考虑效率,数据量比较大。

论坛徽章:
0
7 [报告]
发表于 2006-10-27 15:40 |只看该作者
原帖由 linternt 于 2006-10-26 11:37 发表
遇到过此问题,只要把结构的声明放到声明区内就行了


查了半天相关资料,发现这是真理,只能这样。
不过oracle 8怎么就ok了,10g就要这么多限制....

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2006-10-27 15:56 |只看该作者
原帖由 digex 于 2006-10-27 15:37 发表


这个该问 linternt,他应该很了解。
我们用pro*c主要是考虑效率,数据量比较大。

proc的效率好像不如oci吧?

论坛徽章:
0
9 [报告]
发表于 2006-10-27 17:24 |只看该作者
原帖由 lenovo 于 2006-10-27 15:56 发表

proc的效率好像不如oci吧?


oci还没看过呢,不过proc写起来简单些

论坛徽章:
0
10 [报告]
发表于 2013-02-25 16:05 |只看该作者
自定义的结构体,在.h文件中,将结构体前后加上EXEC SQL 的声明,EXEC SQL BEGIN DECLARE SECTION;  EXEC SQL END DECLARE SECTI
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP