Exécution de procédures et functions Oracle 9i
Bonjour,
Je désire exécuter des procédures stockées et des fonctions stockées (que j'aurai écrites) dans ma base Oracle 9i.
C'est cette méthodologie que j'applique dans l'ensemble des projets informatiques auquels je participe. Que ce soit en C++, C#, Delphi, VBA ...
En effet, le fait d'écrire les requêtes en dur dans le code WinDev nécessite, en cas de correctif, une nouvelle compilation, une nouvelle livraison et un nouveau déploiement.
Il doit bien être possible tout de même d'exécuter une procédure stockée à partir de WinDev en passant les paramètres en entrées et en récupérant le résultat dans WinDev.
Voici l'exemple d'une procédures tockée qui prends en entrée un login et mot de passe, et renvoie l'identifiant de l'utilisateur désigné, l'identifiant et le nom de son groupe ainsi que l'identifiant du responsable de son groupe.
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
| CREATE OR REPLACE PROCEDURE OGBC_CHECK_CONNECTION (
login in bctbutilisateur.util_login%type,
pwd in bctbutilisateur.util_pwd%type,
idGroupe out bctbgroupe.grpe_id%type,
nomGroupe out bctbgroupe.grpe_nom%type,
idRespGroupe out bctbgroupe.rgpe_id%type,
idUser out bctbutilisateur.util_id%type
)
IS
BEGIN
SELECT g.grpe_nom,
g.grpe_id,
rg.util_id,
u.util_id
INTO nomGroupe,
idGroupe,
idRespGroupe,
idUser
FROM bctbutilisateur u,
bctbgroupe g,
bctbresponsable_groupe rg
WHERE g.grpe_id = u.grpe_id
AND g.grpe_id = rg.grpe_id
AND u.util_login = login
AND u.util_pwd = pwd;
END; |
Via cette requête (dans l'analyseur de requête) ça marche très bien.
Code:
1 2 3 4 5 6 7 8 9
| variable temp1 number;
variable temp2 varchar2(50)
variable temp3 number
variable temp4 number
call ogbc_check_connection('rp', 'rp', :temp1, :temp2, :temp3, :temp4);
print :temp1
print :temp2
print :temp3
print :temp4 |
Par contre, à partir de WinDev je tourne en rond, pas moyen de l'exécuter.
Merci de votre aide.
procédure plsql lancée depuis windev
Code:
1 2 3
| requete=" begin procedure_stockée(p1,p2.....pn); end;"
sqlexec(requete,"nom_requete") |
en fait on est très proche de ce que vous aviez fait mais sans le call dans la requête.
A+