Bonjour,
j'ai une table TABLE_1
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
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
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
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:
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
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.
Partager