Bonjour,
Je dois rédiger une procédure stockée qui, en fontion des paramètres reçus, lancera la requête adéquate. Ma procédure doit envoyer par la suite un curseur sur le résultat.
Comment faire ? Merci
Bonjour,
Je dois rédiger une procédure stockée qui, en fontion des paramètres reçus, lancera la requête adéquate. Ma procédure doit envoyer par la suite un curseur sur le résultat.
Comment faire ? Merci
Voilà un exemple structurant le passage de paramètre dans une procédure, et l'utilisation de curseur en fonction de la valeur des paramètres.
A toi de l'adapter à tes besoins, et aussi de consulter la doc...
Bon courage
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Ma_procedure ( Param_1 IN NUMBER, Param_2 IN VARCHAR ) IS CURSOR C1 IS SELECT ...... var_1 NUMBER(5); var_2 VARCHAR2(100); BEGIN IF Param_1 = 1 AND Param_2 = 'A' THEN OPEN C1; LOOP FETCH C1 INTO var_1, var_2; EXIT WHEN C1%NOTFOUND; Traitement... END LOOP; CLOSE C1; ELSIF Param_1 = 2 AND Param_2 = 'B' THEN ...................... ELSIF Param_1 = 3 AND Param_2 = 'C' THEN ...................... END IF; END; /
Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche !
Merci pour votre réponse!
J'ai fais ma procédure stockée qui en fait effectue une requête SQL et qui me renvoie un curseur. Ca compile!
Mais comment faire pour tester cette procédure à partir deToad et vérifier que tout fonctionne ?
Dans TOAD, sélectionner tout, puis exécuter :
Tu peux passer des valeurs en dur à la place de valeur_1 et valeur_2 pour tester.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 BEGIN Ma_Procedure (valeur_1, valeur_2); END; /
Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche !
Je fais ça pour tester :
J'ai une erreur qui se génère et je ne sais pas pourquoi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 BEGIN PKG_ECH.ECH_SEARCH(1,null,null,:cursor); END; /
Voici ce que je fais dans ma procédure:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 PROCEDURE ECH_SEARCH ( inNUMINT in ECHEAN.NUMINT%TYPE, inIDEOPE in CARTOU.IDEOPE%TYPE, inCODTERLO in CARTOU.CODTERLO%TYPE, outREF_CURSOR_ECH out refcur ) IS requete varchar2(255); numoperation varchar2(10); codeTerritoire varchar2(10); c1 refcur; BEGIN requete := 'SELECT * FROM ECHEAN e, CARTOU c'; numoperation := inIDEOPE; codeTerritoire := inCODTERLO; if(inNUMINT IS NOT NULL) then requete := requete ||' ' || 'WHERE e.NUMPRE = ' || inNUMINT; end if ; if(inIDEOPE IS NOT NULL) then numoperation := '''' || inIDEOPE || ''''; DBMS_OUTPUT.PUT_LINE(numoperation); if(requete = '') then requete := requete ||' ' ||'WHERE c.IDEOPE = ' || numoperation; Else requete := requete ||' ' ||'AND c.IDEOPE = ' || numoperation; end if; end if ; if(inCODTERLO IS NOT NULL) then codeTerritoire := '''' || inCODTERLO || ''''; DBMS_OUTPUT.PUT_LINE(codeTerritoire); if(requete = '') then requete := requete ||' ' ||'WHERE c.CODTERLO = ' || codeTerritoire; else requete := requete ||' ' ||'AND c.CODTERLO = ' || codeTerritoire; end if; end if ; requete := requete || ';'; DBMS_OUTPUT.PUT_LINE(requete); --EXECUTE IMMEDIATE requete USING OUT outREF_CURSOR_ECH; OPEN outREF_CURSOR_ECH FOR requete; END ECH_SEARCH;
C'est bon j'ai trouvé pourquoi j'ai un message d'erreur! Il ne faut pas ajouter un ; la fin de la requête à executer sur le curseur.
Merci pour votre aide
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager