1

嗨,我想问一个简单的问题 - DB2 中有没有办法从表中选择一行(无论是基于连接还是选择随机行),然后再次从同一个表中选择不能选择最后一行或任何前一行。

我在想我必须在表中的每一行循环我的代码并删除我选择的每一行,但如果有人有替代解决方案会感兴趣。不需要代码,而是描述另一种方法。

谢谢,

阿伦

4

2 回答 2

2

您可以使用光标,并使用称为定位删除的“删除当前位置”功能。了解更多信息:

于 2013-11-12T16:49:04.513 回答
2

执行此操作的最简单方法是声明一个游标以从表中选择所有行,然后一次处理游标一行。每行将被准确选择 1 次(这几乎就是游标的全部内容)。

我怀疑这不是你要找的答案。您很可能在此选择问题上至少有两个其他约束:

  • 在处理完整个表之前,您不希望或不能打开单个游标
  • 您希望在选择行的顺序方面具有某种“随机性”

无法在单个游标下打开和处理整个表的问题可以通过在选择之间维护某种“状态”信息来解决。“状态”可用于确定行是否仍然有资格在后续查询中进行选择。您可以在表中添加另一列以保持该行的“选定”状态。当插入一行时,其“选定”状态设置为“否”。在每次选择操作中,所选行的状态都会更新为“是”。选择新行的谓词需要有一个WHEN SELECT_STATE = 'no' 添加到它以取消先前选择的行的资格。如果您无法更改要从中选择的表的结构,则添加第二个表,该表具有与选择表相同的主键加上“选定”指示符,然后连接这些表以获得所需的状态信息。

另一种方法是在选中一行后删除它。

这些或一些类似类型的状态管理可用于解决选择资格问题。

如果您需要在选择过程中引入随机性(即难以猜测下一行要选择的行),那么您需要解决一个非常不同的问题。如果是这种情况,请提出一个新问题,概述表的大致大小(多少行)以及关键结构是什么(例如,1 到 100000 之间的数字、30 个字符的名称等)

于 2013-11-12T17:01:28.927 回答