预编译到底是怎么工作的啊,
我用的是Oracle提供的预编译工具proc
预编译的时候检查SQL语句的语法错误吗,访问数据库来检查吗。
我的程序中有代码是这样的
EXEC SQL DECLARE cur_1 CURSOR FOR
select yslsh,yslb,ysdf,nvl(yjdf,0),to_char(wyjqzrq,'yyyyMMdd'),to_char(dl,'000000000000'),ny,
(select khlb from kh_jbxx where khbh = :khbh and nvl(zzny,'999901') >= to_char(sysdate,'yyyymm')) sfjmh,to_char(xcsj,'yyyy-mm-dd')
FROM zw_dfyssekf
where nvl(wyjjmbz,'0') = '0'
and khbh = :khbh
and nvl(hbbz,'0') <> '1'
order by yslsh;
EXEC SQL OPEN cur_1;
if (sqlca.sqlcode == 0 ) //数据库繁忙引发的错误
{
''''''//错误
}
预编译的时候报告下面的错误
语法错误出现在208行,17列, 文件bankquerydf.pc:
错误发生在行208, 列17, 文件bankquerydf.pc
(select khlb from kh_jbxx where khbh = :khbh and nvl(zzny,'999901') >= to_char(sysdate,'yyyymm')) sfjmh,to_char(xcsj,'yyyy-mm-dd')
................1
PCC-S-02201, 出现符号 "khlb"在需要下列之一时:
( ) * + - / . @ | at, day,
hour, minute, month, second, year,
符号 ")" 被替换为 "khlb" 后继续。语法错误出现在208行,105列, 文件bankquerydf.pc:
错误发生在行208, 列105, 文件bankquerydf.pc
(select khlb from kh_jbxx where khbh = :khbh and nvl(zzny,'999901') >= to_char(sysdate,'yyyymm')) sfjmh,to_char(xcsj,'yyyy-mm-dd')
........................................................................................................1
PCC-S-02201, 出现符号 ")"在需要下列之一时:
; * + - / | for, union, at,
connect, and, group, having, intersect, minus, or, order,
start, with, day, hour, minute, month, second, year,
sql语句保证没有错误,可是报告的全是SQL语句的错误,到底是怎么回事,
请哪位大侠不吝赐教 [email protected]
不生感激。
我用的是Oracle提供的预编译工具proc
预编译的时候检查SQL语句的语法错误吗,访问数据库来检查吗。
我的程序中有代码是这样的
EXEC SQL DECLARE cur_1 CURSOR FOR
select yslsh,yslb,ysdf,nvl(yjdf,0),to_char(wyjqzrq,'yyyyMMdd'),to_char(dl,'000000000000'),ny,
(select khlb from kh_jbxx where khbh = :khbh and nvl(zzny,'999901') >= to_char(sysdate,'yyyymm')) sfjmh,to_char(xcsj,'yyyy-mm-dd')
FROM zw_dfyssekf
where nvl(wyjjmbz,'0') = '0'
and khbh = :khbh
and nvl(hbbz,'0') <> '1'
order by yslsh;
EXEC SQL OPEN cur_1;
if (sqlca.sqlcode == 0 ) //数据库繁忙引发的错误
{
''''''//错误
}
预编译的时候报告下面的错误
语法错误出现在208行,17列, 文件bankquerydf.pc:
错误发生在行208, 列17, 文件bankquerydf.pc
(select khlb from kh_jbxx where khbh = :khbh and nvl(zzny,'999901') >= to_char(sysdate,'yyyymm')) sfjmh,to_char(xcsj,'yyyy-mm-dd')
................1
PCC-S-02201, 出现符号 "khlb"在需要下列之一时:
( ) * + - / . @ | at, day,
hour, minute, month, second, year,
符号 ")" 被替换为 "khlb" 后继续。语法错误出现在208行,105列, 文件bankquerydf.pc:
错误发生在行208, 列105, 文件bankquerydf.pc
(select khlb from kh_jbxx where khbh = :khbh and nvl(zzny,'999901') >= to_char(sysdate,'yyyymm')) sfjmh,to_char(xcsj,'yyyy-mm-dd')
........................................................................................................1
PCC-S-02201, 出现符号 ")"在需要下列之一时:
; * + - / | for, union, at,
connect, and, group, having, intersect, minus, or, order,
start, with, day, hour, minute, month, second, year,
sql语句保证没有错误,可是报告的全是SQL语句的错误,到底是怎么回事,
请哪位大侠不吝赐教 [email protected]
不生感激。
代码帖出来不完整,什么帮你看
该部分的代码为: //处理欠费
EXEC SQL DECLARE cur_1 CURSOR FOR
select yslsh,yslb,ysdf,nvl(yjdf,0),to_char(wyjqzrq,'yyyyMMdd'),to_char(dl,'000000000000'),ny,
(select khlb from kh_jbxx where khbh = :khbh and nvl(zzny,'999901') >= to_char(sysdate,'yyyymm')) sfjmh,to_char(xcsj,'yyyy-mm-dd')
from zw_dfyssekf
where nvl(wyjjmbz,'0') = '0'
and khbh = :khbh
and nvl(hbbz,'0') <> '1'
order by yslsh;
EXEC SQL OPEN cur_1;
if (sqlca.sqlcode == 0 ) //数据库繁忙引发的错误
{
strcat(returnchr,"22"); //返回标志
strcat(returnchr,yhdm); //银行代码
strcat(returnchr," 14"); //返回标志前有8个空格
tpreturn(TPSUCCESS,0,returnchr,0,0);
}由于设计到银行的东西,不便将代码全部贴出,不过错误只涉及到该部分代码,象您这样的大侠应该看出什么问题了吧。
yslb,
ysdf,
nvl(yjdf, 0),
to_char(wyjqzrq, 'yyyyMMdd'),
to_char(dl, '000000000000'),
ny,
(select khlb
from kh_jbxx
where khbh = :khbh
and nvl(zzny, '999901') >= to_char(sysdate, 'yyyymm')) sfjmh,
to_char(xcsj, 'yyyy-mm-dd')
from zw_dfyssekf