0

我们在 AS400 系统上使用 DB2 Iseries V7R3。在其中一个存储过程中,我们正在准备动态 SQL 查询。每个 SQL 查询都分配给不同的变量。当我们执行存储过程时,有时它会失败,但当使用相同的参数重试时它会起作用。将日志放入存储过程后,我们观察到在失败的情况下,用于变量 2 的值来自变量 1。

附上日志的存储过程和截图。

感谢您对此的任何帮助,为此没有任何思考选项。

但是,有时它也将 select * 用于 variable1。重试后就正常了。

 create stored procedure (
)DYNAMIC RESULT SETS 1 
LANGUAGE SQL 
SPECIFIC SYMDTA.PRC_RETRIEVE_CLAIM_LIST 
NOT DETERMINISTIC 
MODIFIES SQL DATA 
CALLED ON NULL INPUT 
COMMIT ON RETURN YES 
CONCURRENT ACCESS RESOLUTION USE CURRENTLY COMMITTED 
SET OPTION  ALWBLK = *ALLREAD , 
ALWCPYDTA = *OPTIMIZE , 
COMMIT = *NONE , 
DECRESULT = (31, 31, 00) , 
DYNDFTCOL = *NO , 
DYNUSRPRF = *USER , 
SRTSEQ = *HEX   
BEGIN 

DECLARE DATACLAIM CLOB ( 1048576 ) DEFAULT ' ' ; 
DECLARE GCLAIMCOUNT CLOB ( 1048576 ) DEFAULT ' ' ; 

DECLARE CR_CLAIM_LIST_STMT CURSOR WITH HOLD FOR CLM_DATA_STMT ; 
DECLARE CR_CLAIM_COUNT_STMT CURSOR WITH HOLD FOR CLM_COUNT_STMT ; 

SET DATACLAIM = 'SELECT * FROM  table ';
SET GCLAIMCOUNT = 'select count(*) from table';

INSERT INTO  DEBUGGING_DYNAMIC_QUERIES VALUES ( POLICY_NO , DATACLAIM , CURRENT TIMESTAMP , 'DATACLAIM' ) ; 
INSERT INTO  DEBUGGING_DYNAMIC_QUERIES VALUES ( GCLAIMCOUNT , CURRENT TIMESTAMP , 'GCLAIMCOUNT' ) ; 
PREPARE CLM_DATA_STMT FROM DATACLAIM ; 
OPEN CR_CLAIM_LIST_STMT ; 
  


PREPARE CLM_COUNT_STMT FROM GCLAIMCOUNT ; 
OPEN CR_CLAIM_COUNT_STMT ; 
FETCH CR_CLAIM_COUNT_STMT INTO TOTAL_RECORDS_G4 ; 
CLOSE CR_CLAIM_COUNT_STMT ;

输出调试表:-

错误:- DATACLAIM = "select *" - 2020-01-01 11:00 AM GCLAIMCOUNT = "Select *" - 2020-01-01 11:01 AM

重试后:- DATACLAIM = "select *" - 2020-01-01 12:00 pm GCLAIMCOUNT = "Select count(*)" - 2020-01-01 12:01 Pm

4

0 回答 0