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

Langage SQL Discussion :

Erreur ORA-01427 dans une requête de Mise à jour, pourquoi?


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Erreur ORA-01427 dans une requête de Mise à jour, pourquoi?
    Bonjour,

    Je travaille sur une base de données Oracle 7.3 avec SQLPLUS33, je veux récupérer les données d'une colonne B de la table T2 pour mettre à jour la colonne B de la table T1. J'ai une relation (1,n) .
    1 code_affect peut avoir 1 ou plusieurs code_dep et 1 code_dep peut être affecté à 1 ou plusieurs code_affect

    Voici les champs des 2 tables :
    T1 (code_affect primary key varchar2 (6) not null,
    code_dep varchar2 (10) )

    T2 (code_affect foreign key varchar2 (6) not null,
    code_dep varchar2 (10) not null)

    Je veux renseigner, mettre à jour la colonne code_dep de T1 à partir des données de T2 à chaque fois que je rencontre le code_affect de T2 = au code_affect de T1 et que le code_dep de T1 n'est pas renseigné, je récupére le code_dep de T2 pour mettre à jour la colonne code_dep de T1.
    J'ai fait cette reqête suivante :

    UPDATE T1
    SET T1.Code_dep =(select T2.code_dep from T2
    WHERE T1.code_affect=T2.code_affect
    and T1.code_dep is NULL);



    Lorsque j'exécute la requête, j'ai une erreur ORA at line 2 :
    Error at line 2:
    ORA-01427 : single-row subquery returns more than one row.

    Je ne comprends pas cette erreur pourquoi SQL dit que un single -row de la sous-requête ramène plusieurs enregistrements.

    Quelqu'un peut me corriger cette requête et m'expliquer pourquoi ?
    Merci de votre aide.

  2. #2
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut
    Probablement en faisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE T1 
    SET T1.Code_dep =(select distinct T2.code_dep from T2 
    WHERE T1.code_affect=T2.code_affect 
    and T1.code_dep is NULL);

  3. #3
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut Re: Erreur ORA-01427 dans une requête de Mise à jour, pourqu
    Citation Envoyé par zalexi
    Lorsque j'exécute la requête, j'ai une erreur ORA at line 2 :
    Error at line 2:
    ORA-01427 : single-row subquery returns more than one row.

    Je ne comprends pas cette erreur pourquoi SQL dit que un single -row de la sous-requête ramène plusieurs enregistrements.
    Cela signifie que ta sous-requête ramène plus d'une ligne, or ton UPDATE ne peut se faire que si ta sous-requête ne ramène qu'une seule et unique ligne (le pauvre SQL ne sait pas laquelle choisir sinon)
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Erreur ORA-01427 dans une requête de Mise à jour, pourquoi?
    Merci pour vos réponses (explication et correction de la requête). En ajoutant DISTINCT la requête est passée sans erreur sauf qu'elle afffiche que la totalité des enregistrement sont mis à jour dans la table T1 (203 rows update) alors que lorsque je vérifie il n'y a que 103 code_affect qui ont vu leurs code_dep renseignés et les 100 sont toujours NULL. Je ne comprends pas pourquoi SQL n'affiche pas 103 Rows update au lieu de 203 rows update. Je trouve qu'il m'induit à l'erreur. Je ne sais pas si quelqu'un a une explication de cette anomalie. A savoir que la table T2 contient plus de 1000 enregistrements et la table T1 n'a que 203 enregistrements.
    Merci de vos explications.

  5. #5
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut
    Habituellement on entend parler de ce genre d'erreur lorsqu'il y a des valeurs NULL dans une table ou l'autre probablement dans la clause WHERE.

    Sinon donnes nous plus de détail sur le contenu de tes tables.
    Bonne fin de semaine!

  6. #6
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE T1 
    SET T1.Code_dep =(SELECT DISTINCT T2.code_dep 
                      FROM T2 
                      WHERE T1.code_affect=T2.code_affect) 
    WHERE T1.code_dep is NULL;
    ou, si nécessaire, mais cela de ton fonctionnel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE T1 
    SET T1.Code_dep =(SELECT DISTINCT T2.code_dep 
                      FROM T2 
                      WHERE T1.code_affect=T2.code_affect
                        AND T1.code_dep is NULL) 
    WHERE T1.code_dep is NULL;
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Erreur ORA-01427 dans une requête de Mise à jour, pourquoi?
    Médiat, j'ai testé également votre requête avec avec le where, elle donne le même résultat que celle m'a proposé Souellet. Il m'affiche toujours 203 rows update au lieu de 103.
    Souellet, pour vous donnez plus de détails, j'ai bien des valeurs nulles dans T1.code_dep. Au début sur les 203 code_affect, il n'y a que 4 code_affect qui ont des code_dep renseignés et les 199 étaient à NULL.
    T1.code_dep était en NUMBER(10), pour le modifier et le mettre en VARCHAR2(10) j'ai fait un update de la table T1 en mettant toutes les valeurs de T1.Code_dep à NULL et j'ai modifié le type pour passer de NUMBER(10) à VARCHAR2(10). Donc grâce à votre explication,j'ai compris maintenant pourquoi il m'affiche 203 rows update alors qu'il n'y a que 103 qui sont renseignés.

    Voilà Je remercie vous tous de vos différentes interventions et de votre aide.

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

Discussions similaires

  1. [SQL] Synthaxe dans une requête de mise à jour
    Par JEFKE dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 23/02/2008, 00h19
  2. Erreur de calcul dans une requête
    Par cofi30 dans le forum IHM
    Réponses: 2
    Dernier message: 24/01/2008, 14h44
  3. Erreur de syntaxe dans une requête SQL
    Par Gabout dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 08/01/2008, 17h19
  4. Erreur de syntaxe dans une requête SQL
    Par amnesias dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/01/2007, 12h50
  5. Erreur d'agrégation dans une requête UNION
    Par soso78 dans le forum Access
    Réponses: 2
    Dernier message: 05/10/2005, 00h11

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