【发布时间】:2015-11-18 18:48:37
【问题描述】:
我有一个 select 语句,此后生成设置值我想将该组值插入到另一个表中,我担心我在 select 中使用 select 语句我正在使用另一个 select 子句((select max(org_id )+1 from org)) 我试图获得最大值并增加一,但我无法获得增加的值,而是获得相同的值,你可以看到列名 id_limit
select abc,abc1,abc3,abc4,(select max(org_id)+1 from org) as id_limit from xyz
current output
-----------------------------------------------------------------
| abc | abc1 | abc3 | abc4 | id_limit |
----------------------------------------------------------------|
| BUSINESS_UNIT | 0 | 100 | London | 6 |
| BUSINESS_UNIT | 0 | 200 | Sydney | 6 |
| BUSINESS_UNIT | 0 | 300 | Kiev | 6 |
-----------------------------------------------------------------
我正在尝试获得预期的输出
-----------------------------------------------------------------
| abc | abc1 | abc3 | abc4 | id_limit |
----------------------------------------------------------------|
| BUSINESS_UNIT | 0 | 100 | London | 6 |
| BUSINESS_UNIT | 0 | 200 | Sydney | 7 |
| BUSINESS_UNIT | 0 | 300 | Kiev | 8 |
-----------------------------------------------------------------
【问题讨论】:
-
使用序列。
org和xyz应该是同一张桌子吗?你怎么知道哪一行得到哪个值?您打算对abc3进行排序吗? -
这正是序列被发明的原因。他们是这个问题的解决方案。为什么不想使用序列?
-
不管你怎么称呼它,你的任务是生成一个全局唯一标识符。此操作要求互斥,否则竞争计算最终得到相同结果的机会总是有(可能很小但总是非零)。有很多方法可以确定哪些序列可能是最简单的互斥。
-
使用
max()方法实现唯一编号生成有两种可能的方法:一种是缓慢的,在给定时间只有一个事务可以插入或访问表,或者错误的一种是允许多个事务,但唯一性是不可能的(这就是您已经实现的)。 唯一可扩展且稳健的方法是使用序列。为什么不想使用序列?
标签: oracle