简短说明: 在调用存储在不同iSeries中的SQL过程之后,我尝试使用关联的游标访问结果集但是fetch语句导致MCH3601"未设置位置参考的指针"错误。
详细说明: SQLRPGLE程序执行以下D和C规范来调用在不同iSeries上运行的SQL存储过程,并返回一行包含单个字段:
** Locator definition
D OUTPIK S SQLTYPE(RESULT_SET_LOCATOR)
** Resultset definition as the thirdy-part developer told us it is
D DSPIK DS OCCURS(1)
D FLPIK 1A
// Connecting to a second iSeries
EXEC SQL
CONNECT TO :wrkDBR USER :wrkUSER USING :wrkPWD;
// Calling stored procedure
EXEC SQL
CALL LOGF10OPIN/DEDALO_SIRE_POSTOPICKING (:CAZI_S, :CEDI_S, :CART_S);
// Associating SQL locator to SP resultset
EXEC SQL
ASSOCIATE RESULT SET LOCATORS (:OUTPIK)
WITH PROCEDURE LOGF10OPIN/DEDALO_SIRE_POSTOPICKING;
// Allocating result set to a cursor
EXEC SQL
ALLOCATE CPI CURSOR FOR RESULT SET :OUTPIK;
// Fetching resul set into a variable defined as CHAR(1)
EXEC SQL
fetch CPI into :DSPIK;
// Closing cursor
EXEC SQL
CLOSE CPI;
// Disconnecting
EXEC SQL
DISCONNECT :wrkDBR;
假设通过SQLCA变量检查每个SQL语句执行,会发生什么是fetch语句导致" MCH3601-POINTER NOT SET FOR LOCATION REFERENCED"好像它无法访问结果集的内存位置。
进一步调查: 以下语句从存储SP的同一系统上的SQL客户端(IBM或DBeaver)运行,返回正确的值(例如' N')
CALL LOGF10OPIN.DEDALO_SIRE_POSTOPICKING ('A01', '00M1', '0000123');
但是当我使用iSeries中的以下语句执行相同的调用时,我需要调用SP,结果是意外的
CONNECT TO B0050C2B USER RETAIL USING 'xxx';
CALL LOGF10OPIN.DEDALO_SIRE_POSTOPICKING ('A01', '00M1', '0000123');
DISCONNECT B0050C2B;
我在FTP客户端看到的答案是价值' D5'对于' N'!
,这是EBCDIC十六进制值最后的考虑因素:
- 发出调用的不同SQL客户端(包括与第二个iSeries的连接)返回不同的值:预期值的EBCDIC十六进制值(IBM SQL客户端)或甚至更低的' a' (DBeaver)
- 我无法访问保存和运行SP的iSeries,因此我无法检查两个系统是否处于相同的PTF级别或任何其他配置参数
这个问题对你们任何人来说都很熟悉吗?
非常感谢您的帮助。
答案 0 :(得分:0)
看来这个问题需要IBM的PTF才能在V7R1和V7R2上解决。