PB调用DB2存储过程,报错[IBM][CLI Dviver][DB2/NT]SQL0104N 在"WU.CXXTRQS(PI_AGR"后面找到异常标记"='。预期标记可能包括:","。
1、DB2存储过程在DB2数据库中已生成,且用DB2 CLP执行很正常
2、PB使用ODBC连接DB2数据库,检索数据正常,就是调用后台过程就不行了,出错信息见标题。
db2存储过程如下:
CREATE PROCEDURE "CXXTRQS"
(IN "PI_ARG" VARCHAR(100),
OUT "PO_ARG" VARCHAR(100),
OUT "PO_FHZ" VARCHAR(200),
OUT "PO_MSG" VARCHAR(200)
)
--EXTERNAL NAME 'CXXTRQS'
SPECIFIC CXXTRQS
--CONTAINS SQL
LANGUAGE SQL
BEGIN
DECLARE SQLCODE INTEGER default 0;
DECLARE SQLSTATE CHAR(5);
DECLARE v_errnum INTEGER default 0;
DECLARE V_CUR_TIME TIMESTAMP;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND
Set v_errnum = SQLCODE;
SELECT WU.TO_CHAR(CURRENT TIMESTAMP,'YYYYMMDDHH24MISS')
INTO PO_ARG
FROM DUAL;
IF V_ERRNUM <> 0 THEN
SET PO_FHZ = 'CXXTRQS'||digits(v_errnum);
SET PO_MSG = 'CXXTRQS查询系统日期字符串失败,错误信息'||SQLSTATE;
SET PO_ARG = NULL;
ELSE
SET PO_FHZ = '1';
SET PO_MSG = '' ;
--SET PO_ARG = coalesce(V_SBJGH,'')||CHR(2)||coalesce(V_JFDQDM,'');
END IF;
END!
PB中调用存储过程脚本如下:
DECLARE lprc_1 PROCEDURE FOR WU.CXXTRQS
PI_ARG = :ls_in_argu,
PO_ARG = :ls_out_argu OUT,
PO_FHZ = :ls_fhz OUT,
PO_MSG = :ls_msg OUT;
ls_in_argu="1"
execute lprc_1;
gf_msg(STRING(sqlca.sqlcode)+sqlca.sqlerrtext,111)
//fetch lprc_1 into :as_out_argu,:as_fhz,:as_msg;
DO WHILE SQLCA.SQLcode = 0
FETCH lprc_1 INTO :ls_out_argu,:ls_fhz,:ls_msg;
LOOP
gf_msg(STRING(sqlca.sqlcode)+sqlca.sqlerrtext,111)
close lprc_1;
gf_msg(STRING(sqlca.sqlcode)+sqlca.sqlerrtext,111)
gf_msg(ls_out_argu,111)