Salut,
J'ai créé un gros package qui contient ce type de proc :
Puis une autre procédure qui me permet d'injecter une grosse ligne issue d'un web service dans mes tables.
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;
J'avais pensé (à tort bien entendu) que ceci fonctionnerait :
Marcha pa...
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; ...
J'ai aussi essayé :
Marcha pas non plus...
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;
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
Partager