Bonjour,

Lorsque j'utilise le code ci-dessous pour définir un curseur, j'ai l'erreur ORA-22905 lorsque je mets des paramètres pour v_idNoeud et v_Numero.
Par contre, lorsque je définis des valeurs directement je n'ai pas l'erreur.

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
 
     SELECT RTRIM(SUBSTR(ARBRE_NUM, 1+LENGTH('#'), DECODE(INSTR(ARBRE_NUM,'#',1,2),0,LENGTH(ARBRE_NUM), INSTR(ARBRE_NUM,'#',1,2)-(1+LENGTH('#'))))) ROOT_NUM,
            RTRIM(SUBSTR(ARBRE_IDC, 1+LENGTH('#'), DECODE(INSTR(ARBRE_IDC,'#',1,2),0,LENGTH(ARBRE_IDC), INSTR(ARBRE_IDC,'#',1,2)-(1+LENGTH('#'))))) ROOT_IDC
     , C.* FROM (
     SELECT B.*, LEVEL NIVEAU,
       SYS_CONNECT_BY_PATH(B.NUMERO,  '#')||NVL2(B.NUMERO,'',B.CODE_MAT) ARBRE_NUM,
       SYS_CONNECT_BY_PATH(B.IDNOEUD, '#') ARBRE_IDC  
       FROM (
       SELECT A.ARB_IDNOEUD IDNOEUD, A.ARB_IDMAT IDMAT, A.ARB_NUMERO NUMERO, A.ARB_QTE, A.ARB_FEUILLE FEUILLE,  
           A.ARB_NOEUD_PERE.ARB_NUMERO PERE_NUMERO, A.ARB_NOEUD_PERE.ARB_IDNOEUD PERE_IDNOEUD, 
        A.ARB_PROP_NOEUD.PND_LOT_ID LOT_ID,
        M.CODFAMMAT, M.CODE_MAT, M.DESIG_MAT, M.TYPE_MAT,
        E.CODE_EMPL, E.CODE_LIEU_S, E.BATIMENT_EMPL
           , J.PRJ_CODE,SF.SFM_CODE, C1.CODE_CLI CODE_CLI, C2.CODE_CLI CODE_CLI_DO 
       FROM (SELECT A.* 
             FROM arbre_contenant a, (SELECT * FROM TABLE (SELECT get_row_idnoeuds_en_relation (v_idNoeud, v_numero) FROM DUAL))
			 --FROM arbre_contenant a, (SELECT * FROM TABLE (SELECT get_row_idnoeuds_en_relation (3851, '1001732%') FROM DUAL)) 
             WHERE a.arb_idnoeud = ident
            ) A, MATERIEL M, STOCK_CONTENANT SC, EMPLACEMENT E, PROJET J, SFAMMAT SF, CLIENT C1, CLIENT C2
       WHERE     A.ARB_IDMAT   = M.IDMAT 
         AND A.ARB_IDNOEUD = SC.SC_ARB_IDNOEUD(+)
       AND SC.SC_IDEMPL  = E.IDEMPL(+)
       AND M.PRJ_ID      = J.PRJ_ID(+)
       AND M.SFM_ID      = SF.SFM_ID(+)
       AND M.IDCLI       = C1.IDCLI(+)
       AND M.IDCLI_DO    = C2.IDCLI(+)
     ) B 
     START WITH B.PERE_NUMERO IS NULL 
     CONNECT BY B.PERE_IDNOEUD = PRIOR B.IDNOEUD
     ) C;
J'ai essayé avec :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
CURSOR C1 IS SELECT...
et aussi

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
C1 SYS_REFCURSOR;
...
OPEN C1 FOR SELECT...
Les deux donnent la même erreur ORA-22905.

Quelqu'un pourrait-il m'expliquer d'où cela peut venir SVP.

Merci.

REMARQUE : get_row_idnoeuds_en_relation() est une fonction qui renvoie des ligne avec l'utilisation de PIPELINED / PIPE ROW().

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
ORA-22905: impossible d''accéder aux lignes d''un élément qui n''appartient pas à une table imbriquée