2013-12-23 50 views
0

我想更新ORACLE/DB中表的列。我有一列包含code = 0,我希望它被此列的最大值替换。每行有一个0需要改变,并有从表中列的新的最大值。 我只会这样做,这就是为什么我不需要PL/SQL。在没有PL/SQL的情况下,oracle中每行的UPDATE列最大值

例如,如果我有

CLIENT CODE 

JOJO 99 
JUJU 0 
JAJA 0 

我希望它成为

CLIENT CODE 
    JOJO 99 
    JUJU 100 
    JAJA 101 

,如果我做

update CLIENT set CODE = (select MAX(CODE) from CLIENT)+1 WHERE CODE = 0; 

不幸的是,命令放(比方说,我最大的为99)在我所有的行100的价值100与code = 0 我希望每行与code = 0为增加

的独特价值能否请你帮我与

+1

CODE从0开始?你能用序列吗? '更新客户端设置代码= MYSEQ.NEXTVAL WHERE代码= 0' –

+0

我想这是一个很好的临时解决方案。问题在于代码是3 char上的varchar。我可以创建一个以100开头的序列,并用它更新我的行。“序列”是在tcl代码中处理的(这完全是一个脏东西)。我想我只是纠正这种方式,然后要求代码 – joris

回答

3

使用的rownum,而不是1:

update CLIENT set CODE = (select MAX(CODE) from CLIENT)+ROWNUM WHERE CODE = 0; 
+0

这一个完美的演变的演变,我不知道rownum可以这样使用,非常感谢 – joris

0

试试这个,这可能会为你工作:

UPDATE table_name 
set t.CODE=(SELECT max(Code)+1 from table_name t) 
WHERE CODE=0; 

我不确定。

相关问题