IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

champ null dans une requête update


Sujet :

SQL Oracle

  1. #1
    Membre habitué Avatar de hammag
    Profil pro
    Inscrit en
    Février 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 511
    Points : 145
    Points
    145
    Par défaut champ null dans une requête update
    bonjour,

    je cherche à updater une table (tab1) en prenant des valeurs dans la table tab2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    UPDATE tab1 A 
      SET (A.COUNTRY, A.ADDRESS1) = ( 
     SELECT COUNTRY 
     , ADDRESS1 
       FROM tab2 B 
     WHERE AND B.ORDER_NO =A.ORDER_NO
       AND B.SRC='xx' 
       )
    le problème c'est quand l'un des champs (ou tout les deux) COUNTRY et ADDRESS1 sont null dans la table tab2 je ne peux pas updater la table 1 (champs non nullable dans tab1).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    01407. 00000 -  "cannot update (%s) to NULL"
    comment modifier cette requête pour enpêcher l'update en cas de champs nulls.

    merci d'avance

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    en ajoutant une clause where

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    UPDATE tab1 A 
      SET (A.COUNTRY, A.ADDRESS1) = ( 
     SELECT COUNTRY  , ADDRESS1    FROM tab2 B  WHERE B.ORDER_NO=A.ORDER_NO  AND B.SRC='xx') 
    WHERE EXISTS (
     SELECT *  FROM tab2 C
     WHERE C.ORDER_NO =A.ORDER_NO  AND C.SRC='xx' 
      AND C.COUNTRY IS NOT NULL  AND C.ADDRESS1 IS NOT NULL 
       )

  3. #3
    Membre habitué Avatar de hammag
    Profil pro
    Inscrit en
    Février 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 511
    Points : 145
    Points
    145
    Par défaut
    malheureusement j'ai toujours le même problème.

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    donne nous un test-case, chez moi ça marche...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    CREATE TABLE tab1(
       order_no   NUMBER PRIMARY KEY,
       country    VARCHAR2 (2) NOT NULL,
       address1    VARCHAR2 (20) NOT NULL
    );
    INSERT INTO tab1  VALUES (1, 'CH', 'rue de la Blonde');
    INSERT INTO tab1 VALUES (2, 'CM', 'rue de la Joie');
    CREATE TABLE tab2(
       order_no   NUMBER PRIMARY KEY,
       country    VARCHAR2 (2),
       address1    VARCHAR2 (20),
       src        VARCHAR2 (2)
    );
    INSERT INTO tab2  VALUES (1, 'CH', 'rue de la Brunette', 'xx');
    INSERT INTO tab2 VALUES (2, 'CM', NULL, 'xx');
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SQL> UPDATE tab1 A
      2     SET (A.COUNTRY, A.ADDRESS1) =
      3            (SELECT COUNTRY, ADDRESS1
      4               FROM tab2 B
      5              WHERE B.ORDER_NO = A.ORDER_NO AND B.SRC = 'xx');
       SET (A.COUNTRY, A.ADDRESS1) =
                       *
    ERROR at line 2:
    ORA-01407: cannot update ("SCOTT"."TAB1"."ADDRESS1") to NULL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SQL> UPDATE tab1 A
      2     SET (A.COUNTRY, A.ADDRESS1) =
      3            (SELECT COUNTRY, ADDRESS1
      4               FROM tab2 B
      5              WHERE B.ORDER_NO = A.ORDER_NO AND B.SRC = 'xx')
      6   WHERE EXISTS
      7            (SELECT *
      8               FROM tab2 C
      9              WHERE     C.ORDER_NO = A.ORDER_NO
     10                    AND C.SRC = 'xx'
     11                    AND C.COUNTRY IS NOT NULL
     12                    AND C.ADDRESS1 IS NOT NULL);
     
    1 row updated.

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 391
    Points
    18 391
    Par défaut
    Un peu plus court à partir de la 10g :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    MERGE INTO tab1 A 
    USING tab2 B
       ON (B.ORDER_NO = A.ORDER_NO
      AND  B.SRC      = 'xx'
      AND  B.COUNTRY  IS NOT NULL
      AND  B.ADDRESS1 IS NOT NULL)
     WHEN MATCHED THEN UPDATE
      SET A.COUNTRY  = B.COUNTRY
        , A.ADDRESS1 = B.ADDRESS1;

Discussions similaires

  1. probleme avec un champ null dans une requête sql
    Par kroma23 dans le forum Bases de données
    Réponses: 6
    Dernier message: 20/03/2014, 15h09
  2. [AC-2003] Concatener des champs dans une requête UPDATE
    Par ted the Ors dans le forum Requêtes et SQL.
    Réponses: 16
    Dernier message: 19/04/2010, 17h23
  3. Valeur <Null> d'un champ date dans une requête
    Par GodGives dans le forum Développement
    Réponses: 2
    Dernier message: 02/10/2007, 13h56
  4. Valeur <Null> d'un champ date dans une requête
    Par GodGives dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/10/2007, 13h56
  5. Nom de champ variable dans une requête SQL
    Par stip dans le forum ASP
    Réponses: 2
    Dernier message: 30/09/2004, 18h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo