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.