有没有办法轻松/优雅地更新表中的多个列,其中包含Oracle 10g中查询的记录值?
我有一个表(称之为Source),它有简单的缘故,2列, ID
和 KEY
.
ID Key
---- ----
1 1000
2 1000
3 5000
4 1000
..
101 8000
102 9000
103 7000
104 9000
...
201 5
202 5
...
我有另一个表(称为 KeyMap
),它采用 trunc(ID/100)
并将其用作 batchID
,其中列是批处理中ID的键映射:
trunc(ID/100) key1 key2 key3 key4 ..... key99
------------- ---- ---- ---- ----
0 1000 1000 5000 1000
1 8000 9000 7000 9000
2 5 5
ID是分批创建和处理的,因此在批处理结束时,我想调用一个存储过程来使用子选择或集合提供新的 Key
值和1更新语句来更新 KeyMap
表中的记录 . 那些关键 Value 观 .
这是可能的,这是最好/最有效的方法吗?
2 回答
我会批评我的批评,说你的桌面设计没有正常化,并且不是很漂亮,但我会假设你有理由 . 我通常使用DECODE结合聚合列进行这些“轮换”查询,按我的键分组 - 在这种情况下,你的伪键,trunc(ID / 100) . 将它与使用元组的更新语法结合使用:
你得到:
您可以生成Oracle VARRAY并批量传入密钥 . 您的过程可以迭代VARRAY并更新表 .