Salut,

J'ai créé un gros package qui contient ce type de proc :

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
 
PROCEDURE BU_GetCreate(
    pNAME IN VARCHAR2,
    pReturnCursor OUT SYS_REFCURSOR
)
IS
    vID NUMBER := null;
BEGIN
    BEGIN
        SELECT P.ID INTO
            vID
        FROM
            FHR_BU P
        WHERE
            P.BU_NAME = pNAME;
            exception
                when NO_DATA_FOUND then
                    vID := null;
    END;
 
    IF (vID is null) THEN
        --Creation de l'enregistrement 
        INSERT INTO FHR_BU ( 
            BU_NAME
        ) VALUES (
            pNAME
        ) returning FHR_BU.ID into vID;
    END IF;
END;
Puis une autre procédure qui me permet d'injecter une grosse ligne issue d'un web service dans mes tables.

J'avais pensé (à tort bien entendu) que ceci fonctionnerait :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
...
    vGetCreateCursor SYS_REFCURSOR; 
    vBU_ID NUMBER := null; 
...
    BU_GetCreate(BUSINESS_UNIT,vGetCreateCursor);
    SELECT B.ID INTO vBU_ID 
    FROM vGetCreateCursor B;
...
Marcha pa...

J'ai aussi essayé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
...
    vGetCreateCursor SYS_REFCURSOR; 
    vBU_ID NUMBER := null; 
...
    UMBRELLA_GetCreate(UMB_NAME,UMB_ID,vGetCreateCursor);
    OPEN vGetCreateCursor;
    FETCH vGetCreateCursor INTO vBU_ID;
Marcha pas non plus...

Ma question est la suivante :

Comment faire pour sélectionner la ligne retournée via le curseur ?

D'avance merci

Laurent

PS je sais Google est mon ami etc... J'ai déjà cherché mais je n'arrive pas à trouver un ex. clair.

J'ai trouvé des trucs comme ça mais marcha pas non plus :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
 exec sql BEGIN DECLARE SECTION;... var1, var2, ... varn ...
 exec sql END DECLARE SECTION;
 
 exec sql DECLARE cursor-name CURSOR FOR CALL routine-invocation;
 
 exec sql OPEN cursor-name;
 
 loop as required
    exec sql FETCH cursor-name INTO :var1,:var2,...,:varn;
 end loop