【发布时间】:2016-11-12 13:56:43
【问题描述】:
我有一个包含 C1、C2、C3、C4、C5、C6 和 Count 列的表格。我必须使用按 C1、C2、C3、C4、C5 的顺序对记录进行排序。对于第一条记录,计数将为 0,如果下一行的 C1、C2、C3、C4、C5 的值与前一行相同,那么我必须通过添加 +1 来更新计数列。所以这就是我所期待的: 表:
C1 C2 C3 C4 C5 C6 Count
-------------------------------------------
1 A X X1 AA 123 0
1 A X X1 AA 121 1
1 A X X1 AA 118 2
1 A X X1 AA 117 3
2 B X X2 AA 234 0
8 A Y X3 AA 298 0
8 A Y X3 AA 800 1
我正在使用 Oracle 数据库。我用 Cursor with Order by 编写了一个 PL SQL 块,然后在 BULK COLLECT 中使用游标,并与前一条记录相比,遍历每条记录。但是,Count 列使用意外记录进行更新,并且花费的时间比预期的要多得多,表有大约 400k 条记录。我无法在此处输入我的代码,因为实际代码在客户端机器中。非常感谢任何帮助。可以使用 PL/SQL 或 Simple SQL。 DB 是 Oracle。
【问题讨论】:
-
为什么需要用 cursor 和 BULK COLLECT 编写一个 PL/SQL 块并遍历每一行等?学习用普通 SQL 执行此操作的正确方法要容易得多,效率要高得多 - 学习正确的 SQL 所需的时间远少于学习 PL/SQL 所需的时间。然后:为什么你需要在表中的排序“计数”?在视图或查询中生成报告是有意义的;将其存储在表中只会导致将来出现问题。如果将来删除一行,或者将 C3 从 Y 更正为 X,该怎么办?现在您必须重新计算整个列!坏主意。