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 :

XMLTABLE ORA-01427: sous-requête ramenant un enregistrement de plus d'une ligne


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2011
    Messages : 40
    Par défaut XMLTABLE ORA-01427: sous-requête ramenant un enregistrement de plus d'une ligne
    Bonjour,
    j'ai une table TABLE_1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE TABLE_1 (COL1 NUMBER,COL2 NUMBER,COL3 NUMBER,COL4 NUMBER,COL5 NUMBER,COL6 NUMBER, COL7 NUMBER) 
    SELECT COUNT(*) FROM TABLE_1 WHERE COL1 = 1111111 AND COL2 = 22222 AND COL3 = 3333333 AND COL4=44444444
     
    COUNT(*)
    --------
           1
    et je déverse 50000 lignes dans la colonne COL4 de type XMLTYPE de la table TABLE_2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE TABLE TABLE_2(COL1 VARCHAR2(10),COL2 VARCHAR2(10),COL3 VARCHAR2(10),COL4 XMLTYPE,PRIMARY KEY (COL1,COL2,COL3)) ;
    INSERT INTO TABLE_2 VALUES ('AAAAA','BBBBB','CCCCC',XMLTYPE(CURSOR(SELECT * FROM TABLE_1 WHERE ROWNUM < 50000)));
    Lorsque j'exécute la requête suivante, je récupère bien une ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT TABLE_3.*
    FROM TABLE_2, XMLTABLE(
    'for $i in /ROWSET/ROW where $i/COL1 = 1111111 and $i/COL2 = 22222 and $i/COL3 = 3333333 and $i/COL4=44444444 return $i' PASSING TABLE_2.COL4
    COLUMNS COL1,COL2,COL3,COL4,COL5,COL6,COL7
    ) TABLE_3
    WHERE COL1 = 'AAAAA' AND COL2 = 'BBBBB' AND COL3 = 'CCCCC' ;
    Maintenant je déverse 100000 lignes dans un autre enregistrement de la table TABLE_2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO TABLE_2 VALUES ('DDDDD','EEEEE','FFFFF',XMLTYPE(CURSOR(SELECT * FROM TABLE_1 WHERE ROWNUM < 100000)));
    Lorsque j'exécute la requête suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT TABLE_3.*
    FROM TABLE_2, XMLTABLE(
    'for $i in /ROWSET/ROW where $i/COL1 = 1111111 and $i/COL2 = 22222 and $i/COL3 = 3333333 and $i/COL4=44444444 return $i' PASSING TABLE_2.COL4
    COLUMNS COL1,COL2,COL3,COL4,COL5,COL6,COL7
    ) TABLE_3
    WHERE COL1 = 'DDDDD' AND COL2 = 'EEEEE' AND COL3 = 'FFFFF' ;
    je récupère l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    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"
    Pourquoi?Je devrais récupérer au maximum une ligne.

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Je n'arrive pas à réproduire votre problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SQL> SELECT TABLE_3.*
      2  FROM TABLE_2, XMLTABLE(
      3  'for $i in /ROWSET/ROW where $i/COL1 = 1111111 and $i/COL2 = 22222 and $i/COL3 = 3333333 and $i/COL4=44444444 return $i' PASSING TABLE_2.COL4
      4  COLUMNS COL1,COL2,COL3,COL4,COL5,COL6,COL7
      5  ) TABLE_3
      6  WHERE TABLE_2.COL1 = 'DDDDD' AND TABLE_2.COL2 = 'EEEEE' AND TABLE_2.COL3 = 'FFFFF' ;
     
    COL1                                                                             COL2                                                                             COL3                                                                             COL4                                                                             COL5                                                                             COL6                                                                             COL7
    -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
    1111111                                                                          22222                                                                            3333333                                                                          44444444                                                                                                                                                                                                                                           
     
    SQL>
    probablement parce que vous n'avez pas posté les ordres d'insertion des données dans la table TABLE_1. Reprennez votre jeu d'essaie et ajouter tous qu'il faut pour réproduire le problème.

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/03/2015, 16h01
  2. Réponses: 1
    Dernier message: 13/02/2015, 12h19
  3. Réponses: 6
    Dernier message: 09/12/2014, 09h39
  4. Réponses: 1
    Dernier message: 20/04/2011, 13h07
  5. Réponses: 6
    Dernier message: 06/09/2010, 11h55

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