Appel de function en SQL Dynamique
Bonjour à tous,
Selon ma base de données, j'ai des packages différents. Je voudrais centraliser tout ça dans un package.
Le but est d'appeler un seul package au lieu de faire des versions multiples. Et je ne peux utiliser textuellement mes pakages puisque certains n'existeront pas et donc ne compileront pas.
Je pensais à du SQL Dynamique mais ....
Le petit souci est qu'avec execute immediate je n'aurais pas le retour de ma fonction ; en DBMS_SQL je ne peux pas utiliser de BIND_VARIABLE puisque c'est ma fonction.
Auriez-vous une idée ?
Thanks
DKD
Appel dynamique avec un type particulier
Je te remercie pour le sussport de SQL Dynamique. Il est supper.
J'utilise la table magique "dual". Mais j'ai un souci car l'appel de ma fonction utilse en param un type qui lui est propre.
Existe-t-il une solution ?
Merci d'avance
DKD
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
| FUNCTION Fc_APPEL (vPackage in varchar2,
vFonction in varchar2,
vDecod in out toto ) return integer
IS
/* Contenu dans un autre package
toto is record (
machaine varchar2(20);
monInteger integer; );*/
MaRequete varchar2(124);
MonResultat integer;
vDecod toto;
BEGIN
MaRequete := 'select ' || vPackage || '.' || vFonction || '( :1 ) from dual';
EXECUTE IMMEDIATE MaRequete USING vDecod, OUT MonResultat;
-- Si j'utilise cette 2ème solution, il lui faut un type string (ce qui est comprehensible)
--MaRequete := 'select ' || vPackage || '.' || vFonction || '(' || vDecod|| ') from dual';
--EXECUTE IMMEDIATE MaRequete INTO MonResultat;
-- 3ème solution, il n'aime pas le concatenation de chaine dans le EXECUTE
--MaRequete := 'select ' || vPackage || '.' || vFonction || '(' ;
--EXECUTE IMMEDIATE (MaRequete || vDecod || ') from dual') INTO MonResultat;
return MonResultat;
end; |