2010-07-05 4 views
1

Je veux mettre à jour une ligne dans une table par incrémenter d'une valeur entière de l'un des champs ..instruction Update en utilisant la valeur actuelle de la table

Le courant ne fonctionne pas, pourquoi?

Update htmIndex SET numObs = numObs+1 where ... 
+0

qui devrait faire l'affaire. – krock

+0

Vous ne pouvez pas voir pourquoi ce que vous avez ne devrait pas fonctionner - peut-être qu'il y a quelque chose dans la clause WHERE que nous devons voir? – Ragster

+0

Cela devrait certainement fonctionner ... impair – xil3

Répondre

10

cas simple, mettre à jour une ligne:

SQL> select name 
    2   , age 
    3 from t23 
    4 where id = 2 
    5/

NAME    AGE 
------------ ---------- 
MR KNOX    47 

SQL> update t23 
    2 set age = age + 6 
    3 where id = 2 
    4/

1 row updated. 

SQL> select name 
    2   , age 
    3 from t23 
    4 where id = 2 
    5/

NAME    AGE 
------------ ---------- 
MR KNOX    53 

SQL> 

mise à jour d'une ligne lorsque la colonne a une valeur nulle:

SQL> select name 
    2   , age 
    3 from t23 
    4 where id = 6 
    5/

NAME    AGE 
------------ ---------- 
SALLY 

SQL> update t23 
    2 set age=age+5 
    3 where id = 6 
    4/

1 row updated. 

SQL> select name 
    2   , age 
    3 from t23 
    4 where id = 6 
    5/

NAME    AGE 
------------ ---------- 
SALLY 

SQL> update t23 
    2 set age = nvl(age,0) +5 
    3 where id = 6 
    4/

1 row updated. 

SQL> select name 
    2   , age 
    3 from t23 
    4 where id = 6 
    5/

NAME    AGE 
------------ ---------- 
SALLY     5 

SQL> 

tout aussi simple lors de la mise à jour de plusieurs lignes:

SQL> select name 
    2   , age 
    3 from t23 
    4 where age > 20 
    5/

NAME    AGE 
------------ ---------- 
MR KNOX    53 
FOX IN SOCKS   37 
CAT     23 
LORAX    443 

SQL> update t23 
    2 set age = age + 1 
    3 where age > 20 
    4/

4 rows updated. 

SQL> select name 
    2   , age 
    3 from t23 
    4 where age > 20 
    5/

NAME    AGE 
------------ ---------- 
MR KNOX    54 
FOX IN SOCKS   38 
CAT     24 
LORAX    444 

SQL> 
+0

-1 pour copier la réponse – Rene

+0

@Rene - Désolé, vous vous sentez comme ça. En fait, il n'y avait pas de réponses postées quand j'ai commencé ma réponse. Vous avez posté le vôtre pendant que je travaillais encore sur ma, heu, réponse verbeuse. – APC

+0

Encore utile et une belle réponse non copiée et verbeuse. –

5

Cela devrait fonctionner. Cependant, si la valeur de la colonne actuelle est nulle, + 1 retournera null.

essayer: Update htmIndex SET numObs = nvl(numObs,0)+1 where ...

Questions connexes