主机:Aix5.3
编译:gcc代码很简单:
int i;
char cftp_usr[21];
sprintf(username,"test");
sprintf(password,"test");
sprintf(dbhost,"cur.test.com");
memset(cftp_usr,0,sizeof(cftp_usr));
EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE error--\n");
EXEC SQL WHENEVER NOTFOUND DO nothing();
EXEC SQL CONNECT :username IDENTIFIED BY :password USING :dbhost;
/*下一句执行错误 */
EXEC SQL SELECT ftp_user into :cftp_usr FROM KPI_FTP_INFO where busi_type=1;
/* 正常 */
EXEC SQL select kpi_op_accept.nextval into :op_accept from dual; EXEC SQL COMMIT WORK;
用dbx跟踪后:
"sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);" is executed.Illegal instruction (reserved addressing fault) in . at 0x0 ($t1)
0x00000000 00000000 Invalid opcode.
编译:gcc代码很简单:
int i;
char cftp_usr[21];
sprintf(username,"test");
sprintf(password,"test");
sprintf(dbhost,"cur.test.com");
memset(cftp_usr,0,sizeof(cftp_usr));
EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE error--\n");
EXEC SQL WHENEVER NOTFOUND DO nothing();
EXEC SQL CONNECT :username IDENTIFIED BY :password USING :dbhost;
/*下一句执行错误 */
EXEC SQL SELECT ftp_user into :cftp_usr FROM KPI_FTP_INFO where busi_type=1;
/* 正常 */
EXEC SQL select kpi_op_accept.nextval into :op_accept from dual; EXEC SQL COMMIT WORK;
用dbx跟踪后:
"sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);" is executed.Illegal instruction (reserved addressing fault) in . at 0x0 ($t1)
0x00000000 00000000 Invalid opcode.
EXEC SQL SELECT ftp_user into cftp_usr FROM KPI_FTP_INFO where busi_type=1;
sql变量我是单独贴过来的,在通讯区定义的。
后面那一句是出错后将cftp_usr注释能通过,所以对char很疑惑,因为在通讯区分别尝试过varchar和char,都是出错。
cftp_usr不加冒号我还真没尝试过,因为这个是移植过来的程序,在另外的主机上能正常运行,同样是aix5.3。
唯一的区别是原数据库客户端是9i后来的是10g。
EXEC SQL INCLUDE sqlca;
#define SQLCODE sqlca.sqlcode在出错的那句加
if(SQLCODE)
printf("[ERR=%d]\r\n",SQLCODE);然后用 oerr
看下具体是什么错.
而且这个错误没有被sqlcode截获。直接就是coredump了。
现在郁闷的很,这个错误如果不能解决,就考虑是否需要用proc了。
而且CORE在了oracle的库函数里面。
你的客户端装的有没有问题啊?
你把你的客户端版本写出来看看。
[code]
int i;
char cftp_usr[21]; [/code]明显没有放在通讯区里面