IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

[PL/SQL] effectuer une requête en fontion des paramètres


Sujet :

SQL Oracle

  1. #1
    Membre actif
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2004
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 477
    Points : 223
    Points
    223
    Par défaut [PL/SQL] effectuer une requête en fontion des paramètres
    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

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Points : 639
    Points
    639
    Par défaut
    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...

    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;
    /
    Bon courage
    Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche !

  3. #3
    Membre actif
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2004
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 477
    Points : 223
    Points
    223
    Par défaut
    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 ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Points : 639
    Points
    639
    Par défaut
    Dans TOAD, sélectionner tout, puis exécuter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    BEGIN
       Ma_Procedure (valeur_1, valeur_2);
    END;
    /
    Tu peux passer des valeurs en dur à la place de valeur_1 et valeur_2 pour tester.
    Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche !

  5. #5
    Membre actif
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2004
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 477
    Points : 223
    Points
    223
    Par défaut
    Je fais ça pour tester :

    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;
    /
    J'ai une erreur qui se génère et je ne sais pas pourquoi.

    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;

  6. #6
    Membre actif
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2004
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 477
    Points : 223
    Points
    223
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Effectuer une requête SQL en Pascal
    Par zpliz dans le forum Pascal
    Réponses: 6
    Dernier message: 26/04/2010, 14h02
  2. [SQL server CE] Effectuée une requête
    Par afrodje dans le forum VB.NET
    Réponses: 0
    Dernier message: 03/04/2009, 11h32
  3. Langage pour effectuer une requête SQL.
    Par slake13 dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 19/11/2008, 13h22
  4. [PHP-SQL] Effectuer une tâche avec plus de 3000 requêtes
    Par kevinf dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 17/12/2007, 08h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo