Variable dynamique (Eval ?)
Bonjour à tous,
J'ai un petit soucis pour assigner dynamiquement des variables.
Je viens plutôt du monde web, donc je ne connais pas tous les tips d'Oracle.
En php je sais que c'est possible mais en PL-SQL....
Explications :
J'ai une procédure qui me retourne un curseur
Code:
1 2 3 4 5 6 7 8 9 10
| CREATE OR REPLACE PROCEDURE PNVCELLTM
(
--mes params
, p_RECORDSET OUT sys_refcursor
) AS
BEGIN
OPEN p_RECORDSET FOR
select --blabla;
END PNVCELLTM; |
Une procédure principale qui appelle cette sous-procédure dans laquelle j'aimerais faire ceci :
La variable v_slbcelma contient de nombreuses propriétés du style(id, code, toto1, toto2, toto3, .., toto22, col1, col2, col3 ..., col12)
J'aimerais assigner dans une boucle
toto||iterator := maval etc.
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 30 31 32
| create or replace PROCEDURE PROCPRINCIPALE AS
--types
v_slbcelma SLBCELMA%ROWTYPE;
BEGIN
/* Traitement*/
v_iterator := 0;
PNVCELLTM(v_numeul,v_copaul,v_dafincal,v_cursor);
LOOP
FETCH v_cursor
INTO v_currentarray(v_iterator)l;
EXIT WHEN v_cursor%NOTFOUND;
END LOOP;
CLOSE v_cursor;
v_slbcelma.toto1 := v_currentarray(0);
v_slbcelma.toto2 := v_currentarray(1);
v_slbcelma.toto3 := v_currentarray(2);
v_slbcelma.toto4 := v_currentarray(3);
v_slbcelma.toto5 := v_currentarray(4);
v_slbcelma.toto6 := v_currentarray(5);
--
MERGE INTO SLBCELMA using DUAL ON (
--{...}
)
WHEN NOT MATCHED THEN
INSERT VALUES v_slbcelma;
END BILANCELLULES; |
Serait-il possible de ne pas passer par un tableau ??
Du genre
LOOP
FETCH v_cursor INTO v_slbcelma.toto||v_iterator
END LOOP;
J'ai essayé pas mal de choses comme le EXECUTE IMMEDIATE.
Mon code marche mais j'aimerais l'optimiser.
Grand merci !:D