【发布时间】:2020-06-19 04:21:11
【问题描述】:
是否有一种方法可以对未硬编码的参数进行编程?
在这个问题/sn-p 中代替 :SomeValue 主变量:
EXEC SQL
FETCH NEXT ROWSET FROM C_NJSRD2_cursor_declared_and_opened
FOR :SomeValue ROWS
INTO
:NJCT0022.SL_ISO2 :NJMT0022.iSL_ISO2
etc....
这里有一些说明:
如果我将主机变量 :SomeValue 设置为 1 并定义主机变量数组以从数据库填充到大小为 1 的情况下,像在开放问题中发布的请求的参数化实际上是有效的
struct
??<
char SL_ISO2 ??(1??) ??(3??); // sorry for Z/os trigraphs
etc..
如果我将主变量数组设置为更大的已定义整数值(即 20)并将值 (:SomeValue) 硬编码为游标行集提取中的该值,它也可以工作。
EXEC SQL
FETCH NEXT ROWSET FROM C_NJSRD2
FOR 20 ROWS
INTO
:NJCT0022.SL_ISO2 :NJMT0022.iSL_ISO2
,:NJCT0022.BZ_COUNTRY :NJMT0022.iBZ_COUNTRY
,:NJCT0022.KZ_RISK :NJMT0022.iKZ_RISK
我希望从调用程序 (COBOL) 中接收行数,并在理想情况下相应地设置主变量数组的大小。为避免变量数组大小问题,将宿主变量数组过大到更大的值也是不错的。
这些组合返回编译错误: 主机变量数组“NJCT0022”未定义或不可用
【问题讨论】:
-
问题不清楚,因为
:SomeValue是一个主机变量,因此不一定是硬编码的。 Db2-for-Z/OS v10 及更高版本支持该语法。 -
不能使用主变量,只能使用硬编码的数字。这就是我要问的原因,问题应该足够清楚。我认为从 DB2 v8 开始启用行集游标
-
请编辑您的问题以在您的站点上添加 Db2-for-z/os 的版本,并添加您在尝试主机变量时收到的确切错误消息。