【发布时间】:2013-02-07 07:39:32
【问题描述】:
我想用序列号填充一列,但单个序列是不够的。如果您愿意,此列的行为会有点像“子 ID”;表中记录组的递增 id。
计划是在使用触发器插入时获取“序列中的下一个数字”,就像可以使用普通的 sequence 一样。但是,不仅仅是“下一个数字”,它还需要是给定结果集中的“下一个数字”。
考虑以下示例数据,其中display_id 列是我需要帮助管理的序列,它取决于group_name 的记录值..
我正在考虑这样的查询来获取GroupA 的“下一个数字”:
select max(record_id) + 1
from my_records
where group_name = 'GroupA'
GroupA 返回 4,但 GroupB 返回 3。
当然,我们可以使用上述查询,但会失去sequence 的原子优势。有什么方法可以自信地管理这样的序列吗?
我们并不担心可能会跳过数字(因为序列可能)。
编辑:
由于回滚等(与序列一样),我们很乐意错过一两个数字。但是,我们的要求仍然是display_id 列保持多个序列。
【问题讨论】:
-
你最好解释一下原来的任务。您当前的解决方案尝试看起来不太好。 为什么不使用序列?
-
如果您不关心跳过数字,是否有理由不使用单个 Oracle 序列,而只是在查询时使用分析函数,如果您想弄清楚哪个row 是第 N 行,
my_other_column值为“某个值”? -
@zerkms 好的,我会在一秒钟内加强它
-
@JustinCave 我认为我没有很好地解释自己,让我稍微改进一下这个问题。关于查询时间函数,这里不是一个选项,因为我们希望将此值永久分配给记录。关于使用普通的Oracle序列,它会跳过太多heh,我们不介意每隔一段时间跳过一个。
-
@Sean Connolly:新问题版本仍然没有解释为什么不使用序列