oracle报1036,ora 1036 - Oracle开发 - ITPUB论坛-中国专业的IT技术社区

按照armyjiang的建议,我将所有主变量全部在declare section中定义,但是问题依然存在。而且发现在测试代码中按不同顺序调用这些函数,结果不同,原本执行正确的sql会出现1403,1458,24373等错误。以下代码是其中的一个函数,请帮我分析一下问题原因。我甚至怀疑是不是这个版本的proc有bug。曾经在AIX的oracle7.3上写过不少proc代码,从来也没遇到过这么奇怪的问题。

——————————————————————————————————————————————

#include

#include

#include "error.h"

#include "dbdata.h"

#include "dbdef.h"

extern void fatal_error (int);

extern void Format (char *);

EXEC SQL BEGIN DECLARE SECTION;

/* define the host variable and indicator */

VARCHAR v_symbol[10];

VARCHAR v_username[10];

/* define end */

EXEC SQL END DECLARE SECTION;

EXEC SQL INCLUDE sqlca.h;

/******************************************************************************

**** 函数名:  db_user_indi_param

**** 功能:    从数据表RACS_TB_INDI_PARAS取出(username,time_period)相应的para

**** 输入参数:

****           username:       char

****           time_period:    int

****

**** 输出结果:

****           0:正常

****           1:错误

****           2:没有symbol

****           para:当为正常时、返回相应值,否则返回空

*******************************************************************************/

int db_user_indi_param(char *symbol, int time_period,char *para)

{

EXEC SQL BEGIN DECLARE SECTION;

int v_time_period;

VARCHAR v_param[4001];

EXEC SQL END DECLARE SECTION;

EXEC SQL WHENEVER SQLERROR DO ret = sqlerr_ctl ("db_user_indi_param", 0);

EXEC SQL WHENEVER NOT FOUND DO ret = sqlnotfound_ctl ("db_user_indi_param&quot

9f7588d3b12cd5d674b5f81c0b8fc6cb.gif;

int ret = 0;

Format(symbol);

if (!(strcasecmp (symbol, "&quot

9f7588d3b12cd5d674b5f81c0b8fc6cb.gif ))

return ret = 1;

safeStrncpy(v_symbol.arr, symbol, 10);

v_symbol.len = strlen(v_symbol.arr);

v_time_period = time_period;

/* first connect the database */

#ifdef _ORACLE_EACH_

if (db_open ())

fatal_error (DATABASE_ERR);

#endif //_ORACLE_EACH_

if (!db_symbol_exist(symbol)) return 2;

EXEC SQL SELECT param INTO :v_param

FROM racs_tb_indi_paras

WHERE symbol = UPPER(:v_symbol)

AND datatype =:v_time_period;

if (ret) {

if (ret == NOT_FOUND) ret = 0;

para[0] = '\0';

}

else {

Format (v_param.arr);

safeStrncpy (para, v_param.arr, 4000);

}

#ifdef _ORACLE_EACH_

db_close ();

#endif //_ORACLE_EACH_

return ret;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值