[10g] Execution d'une Procédure d'un package depuis une autre procédure du package
Salut,
J'ai créé un gros package qui contient ce type de proc :
Code:
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:
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:
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:
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 |