Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/01/2008, 17h12   #1
Invité de passage
 
Inscription : août 2007
Messages : 17
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 17
Points : 1
Points : 1
Par défaut Update et Case

Bonjour,

Je cherche a mettre à jour une table complete en une seule fois.
Voici mon problème.
Si une colonne A est remplie alors je mets a jour cette colonne A plus une colonne B
Si une colonne C est remplie alors je mets à jour cette colonne B plus une colonne D
Si une colonne E est remplie alors je mets à jour cette colonne B plus une colonne F

Je me suis lancé dans l'écriture de cette requete et voici ou j'en suis rendu (ce n'est qu'une ebauche):
UPDATE TOTO SET
(case
when Col_1 is not null then Col_3
else
Col_2) = 'toto007' where toto_id = 6663;

Je me doute que cela ne marche pas comme ça mais vous saisissez l'idée.
Est ce que je peux m'en sortir avec mon update et mon case?
guyrnaf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2008, 18h55   #2
Membre éprouvé
 
Inscription : décembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 354
Points : 408
Points : 408
Je ne suis pas sûr d'avoir compris notamment quelles sont les valeurs à utiliser pour mettre à jour!

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
UPDATE t
SET A = case
           when A IS NOT NULL then ?
           else A
         end,
    B = case
          when A IS NOT NULL then ?
          when C IS NOT NULL then ?
          when F IS NOT NULL then ?
          else B
        end,
     ...
En attendant plus de précisions ...
Michel SALAIS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2008, 09h43   #3
Invité de passage
 
Inscription : août 2007
Messages : 17
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 17
Points : 1
Points : 1
j'essaie de clarifier mon probleme

imaginons que j'ai 6 colonnes dans ma table

col_A | col_B | col_c | col_d | col_e | col_f

Les colonnes A,B et C sont les colonnes sur lesquelles je veux effectuer mon test de nulité.

Les colonnes D,E,F sont les colonnes que je veux remplir selon le test précédent avec une valeur prédéfini

Donc par ex si la valeur que je veux insérer est 'TEST007' :

hypotheses:
Si A est non nul par conséquent B & C sont nuls
D E F sont nuls

Si A est non nul alors je veux mettre 'TEST007' dans la colonne D et vider la colonne A

J'espère que mes explications sont un peu plus claire
guyrnaf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2008, 10h28   #4
Membre éprouvé
 
Inscription : décembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 354
Points : 408
Points : 408
Cette explication est partielle et même contradictoire avec la première demande mais je vais me limiter à ce qui est dedans
Code :
1
2
3
4
5
6
7
8
9
 
UPDATE t
SET
  A = NULL,
  D = CASE
          WHEN A IS NULL THEN 'TEST007'
          ELSE NULL
        END
WHERE ...
Michel SALAIS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2008, 23h48   #5
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
Citation:
Envoyé par Michel SALAIS Voir le message
Code :
1
2
3
4
...CASE
          WHEN A IS NULL THEN 'TEST007'
          ELSE NULL
        END
heuuuh ce ne serait plus simple de faire un nvl ?
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2008, 09h21   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
le NVL ne permet pas de mettre NULL si c'est non NULL... eventuellement on peut faire un DECODE :
Code :
DECODE(A, NULL, 'TEST007', NULL)
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2008, 15h08   #7
Membre du Club
 
Inscription : janvier 2008
Messages : 50
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 50
Points : 47
Points : 47
Il existe également la fonction NVL2 :

Code :
SELECT NVL2(expression, valeur si non NULL, valeur si NULL) FROM dual;
wondersonic est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h45.


 
 
 
 
Partenaires

Hébergement Web