IBM大型机论坛索引
 
登录
 
IBM大型机论坛索引 大型机:搜索 IBM Mainframe论坛:常见问题解答 寄存器
 

如何将COBOL数组作为select语句的输入?


IBM大型机论坛 -> DB2
发表新话题   回复主题
查看上一个主题 :: 查看下一个主题  
作者 信息
vimalravi83

新的用户


已加入:2010年2月28日
帖子:21
地点:伊利诺伊州布卢明顿

 发布 发表:2010年4月2日,星期五10:25 pm
引用回复

您好,
我对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
位置:在我的咖啡桌上

 发布 发表:2010年4月2日,星期五10:53 pm
引用回复

这个问题在上周曾多次问过,即使在阅读了几本DB2手册之后,我仍未弄清楚。
请尝试这些指向其他线程的链接,看看是否可以理解。
大量插入Db2吗?
多行插入中的varchar col仍然面临问题
多行插入中的varchar col面临的问题
多行插入
顺便说一句,我想我知道您必须告诉DB2您要选择多少行.....
回到顶部
查看用户资料 发送私信
vimalravi83

新的用户


已加入:2010年2月28日
帖子:21
地点:伊利诺伊州布卢明顿

 发布 发表:2010年4月2日,星期五,11:05 pm
引用回复

是。我同意。多行INSERT是可能的。
但是在这里,我提供的数组是SELECT语句的IN子句的输入,而不是我想从表或INSERT中选择的值的数组。这是一个条件。
回到顶部
查看用户资料 发送私信
迪克·谢勒

主持人荣誉


已加入:2006年11月23日
帖子:19245
位置:矩阵内部

 发布 发表:2010年4月2日,星期五,晚上11:08
引用回复

您好,

一种获得所需内容的方法是将该数组加载到临时表中,然后将临时表连接到实际表中。

引用:
这是一个条件。
我不知道这是什么意思。 。 。
回到顶部
查看用户资料 发送私信
CICS 家伙

高级会员


已加入:2007年7月18日
帖子:2146
位置:在我的咖啡桌上

 发布 发表:2010年4月2日,星期五,11:19 pm
引用回复

vimalravi83写道:
是。我同意。多行INSERT是可能的。
但是在这里,我提供的数组是SELECT语句的IN子句的输入,而不是我想从表或INSERT中选择的值的数组。这是一个条件。
再看一本手册,也许对SELECT ...无效。
只能在FETCH语句中为多行提取,在具有多行插入的INSERT语句中或在多行MERGE语句中引用主机变量数组。
回到顶部
查看用户资料 发送私信
比尔·奥博伊尔

CICS 主持人


已加入:2008年1月14日
帖子:2504
地点:美国乔治亚州亚特兰大

 发布 发表:2010年4月2日,星期五,11:47 pm
引用回复

CICS 家伙,

不是您在办公桌前的位置吗 icon_question.gif

你重新布置家具了吗? icon_biggrin.gif

茶几似乎有点不舒服。 icon_wink.gif

法案
回到顶部
查看用户资料 发送私信
CICS 家伙

高级会员


已加入:2007年7月18日
帖子:2146
位置:在我的咖啡桌上

 发布 发表:星期六2010年4月3日上午12:08
引用回复

比尔·奥博伊尔写道:
CICS 家伙,
不是您在办公桌前的位置吗 icon_question.gif
是。
引用:
你重新布置家具了吗? icon_biggrin.gif
没有。
引用:
茶几似乎有点不舒服。 icon_wink.gif
不,不是我躺在沙发上懒洋洋地看着论坛条目之间的超自然故事。
回到顶部
查看用户资料 发送私信
dbzTHEdinosauer

全球主持人


已加入:2006年10月20日
帖子:6967
位置:瓷宝座

 发布 发表:星期六2010年4月3日上午1:15
引用回复

该数组不是选择的对象。
它是WHERE条款的一部分

这个词是IN- 清单

并且您可以拥有工作存储的IN-LIST

您的语法不正确,因为您需要引用组变量


在ROLL_NUM IN(:WS-ROLL)

还有其他事情,您是否有500个值可用于填充Array?

确保对值进行排序。

我将使用高值填充未使用的项,当然,希望高值不是该列的有效值。
回到顶部
查看用户资料 发送私信
vimalravi83

新的用户


已加入:2010年2月28日
帖子:21
地点:伊利诺伊州布卢明顿

 发布 发表:2010年4月3日,星期六10:20 am
引用回复

嗨DBzthedinosauer,

我也尝试过WS-ROLL,但是有同样的错误。
不可使用的主机变量。


我不担心数组中的值。可以是任何东西。问题是,如果我给出这样的数组,我的代码本身不会编译。我坚信我们不能在SELECT语句中将数组作为条件。我认为,正如Dick所说的那样,我最好在临时表的帮助下并通过加入来完成它。
回到顶部
查看用户资料 发送私信
dbzTHEdinosauer

全球主持人


已加入:2006年10月20日
帖子:6967
位置:瓷宝座

 发布 发表:2010年4月3日星期六6:38 pm
引用回复

可能您需要按以下方式定义工作存储:

码:

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语句中的条件

您在SELECT语句中没有条件,
您在WHERE子句中有一个条件.

如果我是您的DBA,我会告诉您通过以下任一方式选择ROLL_NUM:
  1. 光标
  2. 将多行SELECT转换为ARRAY(如果您的DB2版本支持此功能)

并通过您的二进制文件进行搜索 已排序 COBOL内部表。

为什么,因为即使DB2可以完成此任务,
(较大的IN 清单 应通过QMF处理)
DB2所需的资源量
扫描IN 清单 以查找表中包含的每个ROLL_NUM值
(顺便说一下,多少行)
因为COUNT是浪费DB2资源,应该由程序来完成。
回到顶部
查看用户资料 发送私信
dbzTHEdinosauer

全球主持人


已加入:2006年10月20日
帖子:6967
位置:瓷宝座

 发布 发表:2010年4月3日星期六6:41 pm
引用回复

您可以告诉班主任,在现实世界中,涉及大量IN 清单 的练习确实是愚蠢且无用的。
回到顶部
查看用户资料 发送私信
彼得·荷兰

全球主持人


已加入:2009年10月27日
帖子:2475
所在地:荷兰,阿姆斯特尔芬

 发布 发表:2010年4月3日星期六6:50 pm
引用回复

迪克

如果他能用你的话说出来,他将永远不会完成这堂课。

干杯。
回到顶部
查看用户资料 发送私信
vimalravi83

新的用户


已加入:2010年2月28日
帖子:21
地点:伊利诺伊州布卢明顿

 发布 发表:2010年4月3日星期六8:55 pm
引用回复

dbzTHEdinosauer,您好:

首先,如果我的说法不对,对此我感到抱歉。在所有方面,我都接受您的宝贵建议。这些不是课堂练习。为简单起见,我将所有要求都放在STUDENT或EMPLOYEE示例方面。
引用:
您开始表现出对计算机的无知,
我有PERFORM循环来首先初始化数组,然后开始将适当的值移入其中。
如您所说,我将尝试重新定义。

谢谢..
回到顶部
查看用户资料 发送私信
迪克·谢勒

主持人荣誉


已加入:2006年11月23日
帖子:19245
位置:矩阵内部

 发布 发表:2010年4月3日星期六9:38 pm
引用回复

您好,

引用:
为简单起见,我将所有要求都放在STUDENT或EMPLOYEE示例方面。
是的,使用大多数人可以轻松关联的示例通常会很有帮助。

祝好运 icon_smile.gif
回到顶部
查看用户资料 发送私信
查看上一个主题 :: :: 查看下一个主题  
发表新话题   回复主题 查看书签
所有时间均为格林尼治标准时间+ 6小时
论坛索引 -> DB2

 


类似主题
话题 论坛 回覆
没有新帖 在UPDATE语句中跳过锁定的数据 DB2 9
没有新帖 使用基于关闭的VB记录排序... DFSORT / ICETOOL 6
该主题已锁定:您无法编辑帖子或回复。 将字段名称传递给COBOL程序 COBOL程式设计 10
没有新帖 COBOL性能调整 COBOL程式设计 6
没有新帖 JOINKEYS匹配两个输入文件... DFSORT / ICETOOL 3
搜索我们的论坛:


回到顶部