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 :

Update avec sous requête [12c]


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 169
    Points : 76
    Points
    76
    Par défaut Update avec sous requête
    Bonjour

    j'éxecute un update , qui syntaxiquement est correcte , mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            UPDATE	etp_contrat ec
    	SET	  num_dde                                                  
    		=  (SELECT 
           ta.extrnl_idntfr                                                                
    		FROMcp_contract cc,tc_CP_ACTVTY ta ,tc_cd_actvty_type ty   
    		WHERE   cc.o__num = ec.o__num                        
        and ta.l_type= ty.o__num                          
        and ta.l_result=ec.o__num                     
    		AND 	cc.o__st > 2000
        		AND	cc.o__edn  <=  79162
        		AND	cc.o__kdn  <=  79162
    		AND	GREATEST(cc.o__edx,cc.o__kdx) > 79162
        		AND	cc.o__kdxa  > 79162 );
    Rapport d'erreur :
    Erreur SQL : ORA-01427: sous-requête ramenant un enregistrement de plus d'une ligne
    01427. 00000 - "single-row subquery returns more than one row"

    Qqun peut m'aider à corriger svp ?
    Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Le message d'erreur est clair : la sous-requête ramène plus d'une ligne.
    Et Oracle ne sait pas choisir parmi les multiples valeurs retournées celle qui convient.

    Il faut donc identifier dans quel cas cette sous requête retourne plus d'une ligne pour une seule valeur de ec.o__num.

    Par ailleurs, telle qu'elle est écrite cette requête mettra à NULL toutes les valeurs de num_dde pour lesquelles une correspondance n'aura pas été trouvée dans la sous-requête. Est-ce bien ce qui est prévu ?

    Voici une version mise en forme d'une part avec des jointures normalisées, ce qui permet de séparer les conditions de jointure des conditions de restriction, d'autre part avec une restriction pour éviter le risque évoqué précédemment.
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    UPDATE  etp_contrat ec
        SET num_dde                                                  
            = ( SELECT  ta.extrnl_idntfr                                                                
                    FROM    cp_contract cc
                    INNER JOIN
                        tc_CP_ACTVTY ta 
                        ON  ta.l_result = cc.o__num                     
                    INNER JOIN
                        tc_cd_actvty_type ty   
                        ON  ta.l_type   = ty.o__num                          
                    WHERE   cc.o__st  > 2000
                        AND cc.o__edn <=  79162
                        AND cc.o__kdn <=  79162
                        AND GREATEST(cc.o__edx,cc.o__kdx) > 79162
                        AND cc.o__kdxa  > 79162 
                        AND cc.o__num = ec.o__num                        
              )
    WHERE   EXISTS
            (   SELECT  NULL                                                                
                FROM    cp_contract cc
                    INNER JOIN
                        tc_CP_ACTVTY ta 
                        ON  ta.l_result = cc.o__num                     
                    INNER JOIN
                        tc_cd_actvty_type ty   
                        ON  ta.l_type   = ty.o__num                          
                WHERE   cc.o__st  > 2000
                    AND cc.o__edn <=  79162
                        AND cc.o__kdn <=  79162
                    AND GREATEST(cc.o__edx,cc.o__kdx) > 79162
                        AND cc.o__kdxa  > 79162 
                        AND cc.o__num = ec.o__num                        
            )
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requète UPDATE avec sous-requète dans la même table.
    Par Selenite dans le forum Langage SQL
    Réponses: 6
    Dernier message: 16/03/2009, 15h04
  2. Requete UPDATE avec sous-requète
    Par alaingui dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 27/06/2008, 21h16
  3. UPDATE avec sous requête de sélection avec regroupement
    Par Maxsen dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 09/03/2008, 11h20
  4. [FB2]Update avec sous requête resultat ?
    Par AuBozon dans le forum SQL
    Réponses: 1
    Dernier message: 29/02/2008, 21h04
  5. Requête Update avec Sous-requête
    Par Yohann_x dans le forum Requêtes
    Réponses: 8
    Dernier message: 16/02/2008, 13h19

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