7 votes

Déclaration de mise à jour utilisant la valeur actuelle de la table

Je veux mettre à jour une ligne dans un tableau en incrémentant de un la valeur entière d'un des champs

Le courant ne fonctionne pas, pourquoi ?

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

20voto

APC Points 69630

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>

Mettre à jour 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>

Il est tout aussi simple de mettre à jour 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>

6voto

Rene Points 4041

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X