Ibm midrange 在程序中定义了OPNQRYF中的QRYSLT选项后,该选项在执行期间为何为空?

Ibm midrange 在程序中定义了OPNQRYF中的QRYSLT选项后,该选项在执行期间为何为空?,ibm-midrange,control-language,Ibm Midrange,Control Language,我试图在CL程序中使用OPNQRYF从给定文件中选择一些记录。查询选择字符串在OPNQRYF语句中定义。但在执行过程中,抛出消息CPF9899,原因是QRYSLT为空。我已经重新编译了好几次程序,但问题仍然存在。然后,我尝试首先在字符变量中定义查询选择,然后将其分配给QRYSLT。这次成功了。这是怎么发生的?在同一个程序中,我有一些其他的OPNQRYF语句,其中定义了QRYSLT,它们工作得很好。是否还有其他可能干扰OPNQRYF的因素 这个不起作用: OPNQRYF FILE(&SLI

我试图在CL程序中使用OPNQRYF从给定文件中选择一些记录。查询选择字符串在OPNQRYF语句中定义。但在执行过程中,抛出消息CPF9899,原因是QRYSLT为空。我已经重新编译了好几次程序,但问题仍然存在。然后,我尝试首先在字符变量中定义查询选择,然后将其分配给QRYSLT。这次成功了。这是怎么发生的?在同一个程序中,我有一些其他的OPNQRYF语句,其中定义了QRYSLT,它们工作得很好。是否还有其他可能干扰OPNQRYF的因素

这个不起作用:

OPNQRYF FILE(&SLIB/CKFESCP) QRYSLT('DWSYST *EQ "' *CAT &KVAL *TCAT '"')
这一个是:

DCL VAR(&QRYSLT) TYPE(*CHAR) LEN(200)
.
.
.
CHGVAR VAR(&QRYSLT) VALUE('DWSYST *EQ "' *CAT &KVAL *TCAT '"')
OPNQRYF FILE(&SLIB/CKFESCP) QRYSLT(&QRYSLT)

OPNQRYF在我公司的CL中大量用于过滤记录。如果您正在谈论使用QMQRY,我会说这是一个选项,但没有我需要的那么灵活(RUNSQLSTM是不可能的)。我不确定这是一种系统性的行为还是由于其他不适当的设置。这个问题没有任何意义。如上所述,症状表明程序员出错。可能是不匹配的报价或修剪问题。。。很难说没有看到代码。OPNQRYF不受欢迎的几个原因之一是,正如您现在所发现的,经常存在直到运行时才被检测到的错误。但初学者一般都会被建议遵循现有代码中的约定,就像你所做的那样。正如建议的那样,尝试调试。使用OPNQRYF没有什么错