查看上一个主题 :: 查看下一个主题
|
作者 |
信息 |
vimalravi83
新的用户

已加入:2010年2月28日 帖子:21 地点:伊利诺伊州布卢明顿
|
|
|
|
您好,
我对COBOL有如下要求:
码: |
01 WS-ROLL。
05 WS-ROLL-ID-ARR发生500次PIC X(10).
.
.
.
选择数量(*) from STUDENT
进入:WS-COUNT
在ROLL_NUM IN(:WS-ROLL-ID-ARR) |
我将在SELECT语句之前使用PERFORM循环填充数组值。表中的ROLL_NUM为CHAR(10)。我在上面尝试过,但没有成功,说宿主变量不可用。有人知道该怎么做吗? |
|
回到顶部 |
|
 |
CICS 家伙
高级会员

已加入:2007年7月18日 帖子:2146 位置:在我的咖啡桌上
|
|
回到顶部 |
|
 |
vimalravi83
新的用户

已加入:2010年2月28日 帖子:21 地点:伊利诺伊州布卢明顿
|
|
|
|
是。我同意。多行INSERT是可能的。
但是在这里,我提供的数组是SELECT语句的IN子句的输入,而不是我想从表或INSERT中选择的值的数组。这是一个条件。 |
|
回到顶部 |
|
 |
迪克·谢勒
主持人荣誉

已加入:2006年11月23日 帖子:19245 位置:矩阵内部
|
|
|
|
您好,
一种获得所需内容的方法是将该数组加载到临时表中,然后将临时表连接到实际表中。
我不知道这是什么意思。 。 。 |
|
回到顶部 |
|
 |
CICS 家伙
高级会员

已加入:2007年7月18日 帖子:2146 位置:在我的咖啡桌上
|
|
回到顶部 |
|
 |
比尔·奥博伊尔
CICS 主持人

已加入:2008年1月14日 帖子:2504 地点:美国乔治亚州亚特兰大
|
|
|
|
CICS 家伙,
不是您在办公桌前的位置吗
你重新布置家具了吗?
茶几似乎有点不舒服。
法案 |
|
回到顶部 |
|
 |
CICS 家伙
高级会员

已加入:2007年7月18日 帖子:2146 位置:在我的咖啡桌上
|
|
|
|
比尔·奥博伊尔写道: |
CICS 家伙,
不是您在办公桌前的位置吗 |
是。
引用: |
你重新布置家具了吗? |
没有。
引用: |
茶几似乎有点不舒服。  |
不,不是我躺在沙发上懒洋洋地看着论坛条目之间的超自然故事。 |
|
回到顶部 |
|
 |
dbzTHEdinosauer
全球主持人

已加入:2006年10月20日 帖子:6967 位置:瓷宝座
|
|
|
|
该数组不是选择的对象。
它是WHERE条款的一部分
这个词是IN- 清单
并且您可以拥有工作存储的IN-LIST
您的语法不正确,因为您需要引用组变量
如
在ROLL_NUM IN(:WS-ROLL)
还有其他事情,您是否有500个值可用于填充Array?
确保对值进行排序。
我将使用高值填充未使用的项,当然,希望高值不是该列的有效值。 |
|
回到顶部 |
|
 |
vimalravi83
新的用户

已加入:2010年2月28日 帖子:21 地点:伊利诺伊州布卢明顿
|
|
|
|
嗨DBzthedinosauer,
我也尝试过WS-ROLL,但是有同样的错误。
不可使用的主机变量。
我不担心数组中的值。可以是任何东西。问题是,如果我给出这样的数组,我的代码本身不会编译。我坚信我们不能在SELECT语句中将数组作为条件。我认为,正如Dick所说的那样,我最好在临时表的帮助下并通过加入来完成它。 |
|
回到顶部 |
|
 |
dbzTHEdinosauer
全球主持人

已加入:2006年10月20日 帖子:6967 位置:瓷宝座
|
|
|
|
可能您需要按以下方式定义工作存储:
码: |
01 W-S-IN-LIST.
05 ITEM-001 PIC X(10).
...
05 ITEM-500 PIC X(10).
01 W-S-ARRAY
REDEFINES
W-S-IN-LIST.
05 WS-ROLL-ID-ARR发生500次PIC X(10).
|
并在其中使用W-S-IN-LIST
在ROLL_NUM IN(:W-S-IN-LIST)
为什么发生,可能是因为发生了DB2 Working-Storage IN 清单 SQL构建例程不基于计算的原因,
但是我确实知道W-S-IN-LIST定义将被DB2召集,
除非您正在运行DB2版本6或更低版本。
您开始表现出对计算机的无知,
并且缺乏对建议的尊重。
您应该始终考虑数据值的完整性,
否则,您将收到“意外结果”。
再一次,我怀疑这是一个课堂练习-请参阅 TS的另一堂课
因此,
我建议您将您的帖子限制在
而不是猜测。
我已经说过您不能使用项目REFERENCE引用主机变量,
因为DB2无法解析这些索引。
您总是必须参考小组结构。
多行处理可以处理发生定义,
但正如我之前所说,我认为IN 清单 不会接受。
但是,通过将您的IN 清单 组项目细分为独立的基本项目,
DB2可以计算组项目的大小
您在SELECT语句中没有条件,
您在WHERE子句中有一个条件.
如果我是您的DBA,我会告诉您通过以下任一方式选择ROLL_NUM:- 光标
- 将多行SELECT转换为ARRAY(如果您的DB2版本支持此功能)
并通过您的二进制文件进行搜索 已排序 COBOL内部表。
为什么,因为即使DB2可以完成此任务,
(较大的IN 清单 应通过QMF处理)
DB2所需的资源量
扫描IN 清单 以查找表中包含的每个ROLL_NUM值
(顺便说一下,多少行)
因为COUNT是浪费DB2资源,应该由程序来完成。 |
|
回到顶部 |
|
 |
dbzTHEdinosauer
全球主持人

已加入:2006年10月20日 帖子:6967 位置:瓷宝座
|
|
|
|
您可以告诉班主任,在现实世界中,涉及大量IN 清单 的练习确实是愚蠢且无用的。 |
|
回到顶部 |
|
 |
彼得·荷兰
全球主持人

已加入:2009年10月27日 帖子:2475 所在地:荷兰,阿姆斯特尔芬
|
|
|
|
迪克
如果他能用你的话说出来,他将永远不会完成这堂课。
干杯。 |
|
回到顶部 |
|
 |
vimalravi83
新的用户

已加入:2010年2月28日 帖子:21 地点:伊利诺伊州布卢明顿
|
|
|
|
dbzTHEdinosauer,您好:
首先,如果我的说法不对,对此我感到抱歉。在所有方面,我都接受您的宝贵建议。这些不是课堂练习。为简单起见,我将所有要求都放在STUDENT或EMPLOYEE示例方面。
我有PERFORM循环来首先初始化数组,然后开始将适当的值移入其中。
如您所说,我将尝试重新定义。
谢谢.. |
|
回到顶部 |
|
 |
迪克·谢勒
主持人荣誉

已加入:2006年11月23日 帖子:19245 位置:矩阵内部
|
|
|
|
您好,
引用: |
为简单起见,我将所有要求都放在STUDENT或EMPLOYEE示例方面。 |
是的,使用大多数人可以轻松关联的示例通常会很有帮助。
祝好运  |
|
回到顶部 |
|
 |
|