Salut
Je développe une procédure stockée dans laquelle je veut appeler des autres procédures ou fonction dont les noms sont stockés dans une base de données.
Comment je peut appeler dynamiquement ces procédures ?
Salut
Je développe une procédure stockée dans laquelle je veut appeler des autres procédures ou fonction dont les noms sont stockés dans une base de données.
Comment je peut appeler dynamiquement ces procédures ?
Avec EXECUTE IMMEDIATE.
Conseil afin d'éviter les posts d'erreurs : Quand on développe, toujours afficher par DBMS_OUTPUT la chaine de caractère qui va être exécutée par le Execute Immediate. Quand c'est bon, on l'enlève.
Merci McM pour la réponse,
J'ai déjà travaillé avec EXECUTE IMMEDIATE pour des requêtes sql.Mais est ce que je peut l'utilisé pour l'appel d'une fonction ,si oui comment faire et comment je puisse recupérer alors le resultat de mon fonction(je suppose que toutes mes fonctions retourne un boolean)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Create or Replace Function f1() return number is ... End;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Declare n number ; Begin EXECUTE IMMEDIATE 'Select f1 from dual' INTO n ; End;
Je ferrais plutôt
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 declare l_num pls_integer; begin execute immediate 'begin :n := f(); end;' Using Out l_num; -- dbms_output.put_line(l_num); end;
les 2 fonctionnent:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 1 DECLARE 2 n NUMBER ; 3 Begin 4 EXECUTE IMMEDIATE 'Select ff1 from dual' INTO n ; 5 dbms_output.put_line('n:' || n); 6* END; SQL> / n:1 Procédure PL/SQL terminée avec succès. SQL>
Merci SheikYerbouti pou votre aide ,
j'ai testé votre proposition avec une procedure stocké test_code:
mais ma procédure n'est pas appelé et j'ai une erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part test_code('2742337') from dual
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2java.sql.SQLException: ORA-00904: "test_code" : identificateur non valide
Merci SheikYerbouti pou votre aide ,
j'ai testé votre proposition avec une procedure stocké test_code:
mais ma procédure n'est pas appelé et j'ai une erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part select test_code('2742337') from dual
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2java.sql.SQLException: ORA-00904: "test_code" : identificateur non valide
?? mais vous voyez bien, dans l'example qu'il faut utiliser EXECUTE IMMEDIATE.
Si vous ne donnez pas le code exact est complet que vous testez, on ne peut pas le deviner...
Partager