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

当Count(*)时,游标内有多行> 1


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

新的用户


加入:2020年6月7日
帖子:3
地点:美国

发布发表:2020年6月8日星期一12:53上午
引用回复

你好

我正在尝试在以下情况下对此进行编码,并且无法有效地获得结果。

1)对于某些ws-key1,查询正在检索多个记录,需要将所有这些记录“全部”写入异常文件并读取输入文件中的下一条记录
2)对于大多数记录,查询会检索一条记录,然后需要通过程序的其余部分进行处理

码:

选择col1,col2,col3,col4,col5
从   tableA
其中col1 = ws-key1和
          col2 = ws-key2 and
          col3 = ws-key3


该查询检索第一种情况的2条记录。我需要将这两条记录都写入异常文件。在这种情况下,col4和col5将具有不同的数据。
当它检索到1条记录时,处理该记录并继续执行程序。

我在下面尝试过,但是count(*)返回1,因此即使获取了2条记录也不会进入异常para。

码:
选择col1,col2,col3,col4,col5,count(*)
从   tableA
其中col1 = ws-key1和
          col2 = ws-key2 and
          col3 = ws-key3
按col1,col2,col3,col4,col5分组

如果主机变量计数(*) > 1
         write exception file
其他
     continue
万一


我可以为cont(*)然后如果count(*)编写单例选择查询>1执行Cursor-para写入异常,直到记录结束标志。
否则,继续进行Select-para检索所需的列以继续进行程序处理。

另外,如果我在单例选择和句柄-811中对此进行编码,则它只会将第一条记录写入异常,而不会同时写入两条记录(您可能已经猜到)

但这并不像大多数人所知道的那样有效。

如果可以,请指导。

谢谢。
回到顶部
查看用户资料 发送私信
谢尔盖肯

活跃的成员


已加入:2008年4月29日
帖子:939
所在地:马里兰

发布发表于:2020年6月8日,星期一1:20
引用回复

码:
选择 *
从 (
   选择col1,col2,col3,col4,col5,count(*) total
   from   tableA
   其中col1 = ws-key1和
          col2 = ws-key2 and
          col3 = ws-key3
   按col1,col2,col3,col4,col5分组
)
总共> 1 ;
回到顶部
查看用户资料 发送私信
iamdijkstra007

新的用户


加入:2020年6月7日
帖子:3
地点:美国

发布发表:2020年6月8日星期一3:52 am
引用回复

塞尔吉肯写道:
码:
选择 *
从 (
   选择col1,col2,col3,col4,col5,count(*) total
   from   tableA
   其中col1 = ws-key1和
          col2 = ws-key2 and
          col3 = ws-key3
   按col1,col2,col3,col4,col5分组
)
总共> 1 ;

谢谢sergyken花时间回答。欣赏它。

我在使用表和对应列/键的sql客户端中尝试了此操作,但是很遗憾返回SQLCODE = -4743

-4743在为先前级别设置了应用程序兼容性设置时尝试使用新功能
说明
应用程序尝试使用当前应用程序兼容性设置不支持的Db2功能。转换模式下的Db2环境可以将应用程序兼容性值设置为以前的版本。处于新功能模式的db2子系统可以将应用程序兼容性级别设置为当前版本或以前的版本。


码:
选择col1,col2,col3,col4,col5,count(*) total
   from   tableA
   其中col1 = ws-key1和
          col2 = ws-key2 and
          col3 = ws-key3
   按col1,col2,col3,col4,col5分组


上面的查询给出了结果,但是如果我如上所述添加select *,则会抛出错误。

col1 col2 col3col4col5总计
ws-key1ws-key2ws-key3abcxyz 1
ws-key1ws-key2ws-key3abcuvw 1
回到顶部
查看用户资料 发送私信
尼克·克劳斯顿

全球主持人


加入时间:2007年5月10日
帖子:2455
地点:英国汉普郡

发布发表:2020年6月8日星期一1:08 pm
引用回复

我怀疑是 投掷 错误不是错误 抛出 在大型机上。
回到顶部
查看用户资料 发送私信
罗希特·乌马尔吉卡(Rohit Umarjikar)

全球主持人


已加入:2010年9月21日
帖子:2581
地点:美国纽约

发布发表:2020年6月8日星期一
引用回复

您为什么不在第一次选择时声明光标(使用简单的where条件),然后将数据加载到数组中,直到sqlcode = + 100,并针对其中的每次提取保持计数器更新。

码:
如果计数器= 0-处理下一条记录
如果计数器= 1-处理当前记录
如果柜台>1-写入异常
回到顶部
查看用户资料 发送私信
谢尔盖肯

活跃的成员


已加入:2008年4月29日
帖子:939
所在地:马里兰

发布发表:2020年6月8日星期一
引用回复

iamdijkstra007写道:
-4743在为先前级别设置了应用程序兼容性设置时尝试使用新功能

您需要使用DBA提出此问题。您的支持人员将需要更新安装设置/选项,和/或建议您添加这样的语句
码:
设置当前应用程序兼容性=“ V11R1”;

这是您的支持团队要解决的本地问题。该论坛可能无济于事。
回到顶部
查看用户资料 发送私信
罗希特·乌马尔吉卡(Rohit Umarjikar)

全球主持人


已加入:2010年9月21日
帖子:2581
地点:美国纽约

发布发表:2020年6月8日星期一6:28 pm
引用回复

塞尔吉肯写道:
码:
选择 *
从 (
   选择col1,col2,col3,col4,col5,count(*) total
   from   tableA
   其中col1 = ws-key1和
          col2 = ws-key2 and
          col3 = ws-key3
   按col1,col2,col3,col4,col5分组
)
总共> 1 ;

共有= 1个人口缺失,仍然需要处理?
回到顶部
查看用户资料 发送私信
谢尔盖肯

活跃的成员


已加入:2008年4月29日
帖子:939
所在地:马里兰

发布发表:2020年6月8日星期一7:13 pm
引用回复

罗希特·乌马尔吉卡(Rohit Umarjikar)写道:
共有= 1个人口缺失,仍然需要处理?


这取决于TS的决定。
我希望他应该能够做出相应的调整。
回到顶部
查看用户资料 发送私信
iamdijkstra007

新的用户


加入:2020年6月7日
帖子:3
地点:美国

发布发表:2020年6月8日星期一7:23 pm
引用回复

罗希特·乌马尔吉卡(Rohit Umarjikar)写道:
您为什么不在第一次选择时声明光标(使用简单的where条件),然后将数据加载到数组中,直到sqlcode = + 100,并针对其中的每次提取保持计数器更新。

码:
如果计数器= 0-处理下一条记录
如果计数器= 1-处理当前记录
如果柜台>1-写入异常

谢谢Rohit,是的,这是我考虑过的选项之一,可以像您提到的那样工作。但是想避免使用内部数组并在一个查询中处理所有这些问题。
回到顶部
查看用户资料 发送私信
罗希特·乌马尔吉卡(Rohit Umarjikar)

全球主持人


已加入:2010年9月21日
帖子:2581
地点:美国纽约

发布发表于:2020年6月9日星期二4:51上午
引用回复

塞尔吉肯写道:
罗希特·乌马尔吉卡(Rohit Umarjikar)写道:
共有= 1个人口缺失,仍然需要处理?


这取决于TS的决定。
我希望他应该能够做出相应的调整。

实际上,TS既需要条件,又需要UNION,但事实如此。 icon_smile.gif
回到顶部
查看用户资料 发送私信
罗希特·乌马尔吉卡(Rohit Umarjikar)

全球主持人


已加入:2010年9月21日
帖子:2581
地点:美国纽约

发布发表:2020年6月9日星期二4:52上午
引用回复

iamdijkstra007写道:
罗希特·乌马尔吉卡(Rohit Umarjikar)写道:
您为什么不在第一次选择时声明光标(使用简单的where条件),然后将数据加载到数组中,直到sqlcode = + 100,并针对其中的每次提取保持计数器更新。

码:
如果计数器= 0-处理下一条记录
如果计数器= 1-处理当前记录
如果柜台>1-写入异常

谢谢Rohit,是的,这是我考虑过的选项之一,可以像您提到的那样工作。但是想避免使用内部数组并在一个查询中处理所有这些问题。

您不能在一个查询中执行此操作,因为您希望重复。这似乎是一种优化的方式,并且单个查询没有缺点。
回到顶部
查看用户资料 发送私信
谢尔盖肯

活跃的成员


已加入:2008年4月29日
帖子:939
所在地:马里兰

发布发表:2020年6月9日星期二5:41 pm
引用回复

罗希特·乌马尔吉卡(Rohit Umarjikar)写道:
实际上,TS既需要条件,又需要UNION,但事实如此。 icon_smile.gif


这不应该是UNION ...
码:
选择A.col1,A.col2,A.col3,A.col4,A.col5,I.total
从 (
   选择col1,col2,col3,col4,col5,计数(*) total
    从   tableA
   其中col1 = ws-key1 
      and col2 = ws-key2 
      and col3 = ws-key3
   按col1,col2,col3,col4,col5分组
    )                  I,
    表A             A   
我总共> 1
  and I.col1 = A.col1
  and I.col2 = A.col2
  and I.col3 = A.col3
  and I.col4 = A.col4
  and I.col5 = A.col5
;
回到顶部
查看用户资料 发送私信
罗希特·乌马尔吉卡(Rohit Umarjikar)

全球主持人


已加入:2010年9月21日
帖子:2581
地点:美国纽约

发布发表:2020年6月9日(星期二)8:32 pm
引用回复

这会造成性能问题 如果基础数据库很大 ,其次,您使用同一张表两次,这意味着一对多的连接将退出,第三联盟可以执行相同的操作,但方式更好。

但是,与其进行复杂的查询而不是遇到性能问题或更长时间,还不如不简单地使用上述建议的方法(简单而干净)。

这是由UNION提供的(除非针对小型数据库,否则我不建议使用它)

码:
选择col1,col2,col3,col4,col5,count(*) total, 'S' as recs
   from   tableA
   其中col1 = ws-key1和
          col2 = ws-key2 and
          col3 = ws-key3
   按col1,col2,col3,col4,col5,recs分组
   having count(*) = 1
联盟
选择col1,col2,col3,col4,col5,count(*) total, 'M'  as recs
   from   tableA
   其中col1 = ws-key1和
          col2 = ws-key2 and
          col3 = ws-key3
   按col1,col2,col3,col4,col5,recs分组
   having count(*) > 1


码:
 IF RECS = 'S'  THEN
     Process the row..
 ELSE
    Do the exception...
 END-IF
回到顶部
查看用户资料 发送私信
谢尔盖肯

活跃的成员


已加入:2008年4月29日
帖子:939
所在地:马里兰

发布发表于:2020年6月9日,星期二10:29 pm
引用回复

罗希特·乌马尔吉卡(Rohit Umarjikar)写道:
这会造成性能问题 如果基础数据库很大,

这取决于实际的数据库设计。经过适当设计后,问题不会超过UNION,甚至更少

罗希特·乌马尔吉卡(Rohit Umarjikar)写道:
其次,您两次使用同一个表,这意味着在出局中有多个联接,

联盟也需要两个表搜索,完全一样
罗希特·乌马尔吉卡(Rohit Umarjikar)写道:
第三联盟可以做同样的事情,但是更好。

看不到该声明的任何确认
罗希特·乌马尔吉卡(Rohit Umarjikar)写道:
但是,与其进行复杂的查询而不是遇到性能问题或更长时间,还不如不简单地使用上述建议的方法(简单而干净)。

在这种情况下,“简单,干净”一词令人怀疑。
这完全取决于:TS究竟在哪里同意放置其选择逻辑?许多TS坚持原始的“要求”(无处获取),并像口头禅一样重复它们,而不是复习和考虑其他方法。
回到顶部
查看用户资料 发送私信
罗希特·乌马尔吉卡(Rohit Umarjikar)

全球主持人


已加入:2010年9月21日
帖子:2581
地点:美国纽约

发布发表于:2020年6月9日,星期二10:49 pm
引用回复

同意并让TS从上述解决方案中选择。
回到顶部
查看用户资料 发送私信
查看上一个主题 :: :: 查看下一个主题  
发表新话题   回复主题 查看书签
所有时间均为格林尼治标准时间+ 6小时
论坛索引 -> DB2

 


类似主题
话题 论坛 回覆
没有新帖 选择多个常量记录 DB2 3
没有新帖 比较文件记录计数百分比... DFSORT / ICETOOL 4
没有新帖 RECFM = U磁带文件的记录数 DFSORT / ICETOOL 17
没有新帖 无法找到DB2 ROWS DB2 2
没有新帖 如何从数字d获取总计数... 同步排序 9
搜索我们的论坛:


回到顶部