在线等待!一个PROC的配置问题,如何才能使用host variable

along_2000 2004-11-29 10:24:15
平台:windows2000
ORACLE版本 9.0.1.1.1

当我使用PROC预编译的时候,如果代码写成这个样子就能顺利通过预编译

#include <sqlca.h>
#include <stdio.h>

int main()
{
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR username[20];
VARCHAR passwd[20];
VARCHAR buffer[1024];
EXEC SQL END DECLARE SECTION;

strcpy(username.arr,"XXXXX");
username.len=strlen(username.arr);
strcpy(passwd.arr,"XXXXX");
passwd.len=strlen(passwd.arr);
EXEC SQL CONNECT :username IDENTIFIED BY :passwd;

printf("haha log success\n");

EXEC SQL SELECT TO_CHAR(sysdate,'YYYY-MM-DD HH24:MI:SS') INTO :buffer FROM DUAL;

buffer.arr[buffer.len]='\0';

printf("the oracle date is %s\n",buffer.arr);

EXEC SQL COMMIT WORK RELEASE;
printf("haha exit success\n");

}

但是如果是这样子
#include <sqlca.h>
#include <stdio.h>

int main()
{

char username[]="caldata";
char passwd[]="caldata";
char buffer[1024];

EXEC SQL CONNECT :username IDENTIFIED BY :passwd;

printf("haha log success\n");

EXEC SQL SELECT TO_CHAR(sysdate,'YYYY-MM-DD HH24:MI:SS') INTO :buffer FROM DUAL;

printf("the oracle time is %s\n",buffer);
EXEC SQL COMMIT WORK RELEASE;
printf("haha exit success\n");

}

就报了如下的错误
Semantic error at line 23, column 27, file C:\temp\pctest\src\test2.pc:
EXEC SQL CONNECT :username IDENTIFIED BY :passwd;
..........................1
PCC-S-02322, found undefined identifier
每一个变量都会报一个这样的错。

我知道第二种方法是可以的,目前我们的程序就是这么写的,但是我要做些什么才能让第二种方式的程序顺利通过预编译呢
...全文
333 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hqskoala 2004-11-30
  • 打赏
  • 举报
回复
再说,搂主为什么不愿意加EXEC SQL BEGIN DECLARE SECTION呢,要是遇到varchar变量怎么办?
hqskoala 2004-11-30
  • 打赏
  • 举报
回复
“目前我们的程序就是这么写的”是什么意思,你们现有的.pc就是这么写的?能同预编译?那就看看预编译的选项吧!总觉得不大可能!那样的话要EXEC SQL BEGIN DECLARE SECTION干吗!
hqskoala 2004-11-30
  • 打赏
  • 举报
回复
不放到EXEC SQL BEGIN DECLARE SECTION;
里proc预编译器能认吗?没用过,好像不行吧!
along_2000 2004-11-30
  • 打赏
  • 举报
回复
还是感谢 hqskoala(大晟) 对我的支持
along_2000 2004-11-30
  • 打赏
  • 举报
回复
多谢各位的回复,我已经找到了答案了

Pro*C/C++ Precompiler Programmer's Guide
Precompiler Options
PARSE

To generate C++ compatible code, the PARSE option must be either NONE or PARTIAL.

If PARSE=NONE or PARSE=PARTIAL, all host variables must be declared inside a Declare Section. See "Declare Section".

也就是说当 PARSE=FULL 的时候,所以的本地变量可以不放在 Declare Section中。

至于 : hqskoala(大晟) 的疑问,我们可以通过 CHAR_MAP=VARCHAR2 来解决,自己在代码中注意
padding的black和末尾的'\0' 就可以了。

因为我以前一直是在UNIX下开发,这些ORACLE的设置和MAKEFILE都是前辈写好的。现在自己想在Win平台建一个测试环境。所以有此一问。






along_2000 2004-11-29
  • 打赏
  • 举报
回复
自己UP一下

17,140

社区成员

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

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