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 :

tests sur requetes dans une procedure stockée


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 44
    Par défaut tests sur requetes dans une procedure stockée
    bonjour, je me permet de faire appel a vous pour l'ecriture d'une procedure stockée.


    comme d habitude je m'attaque a un truc enorme pour commencé... et j avoue que je ne sais pas trop comment debuté, j ai lu attentivement les cours sur les procédure, j ai l'impression d'etre avec un cas qui n'est pas d ecole.

    en 2 mots voici le contexte :



    j ai un dossier qui changer d etat celon s'il est utilisé (ou pas) il a plusieurs status qui dependent du status des objets qui l'utilisent.


    voici donc l algo :



    declaration de 2 arguments
    libelle et tome

    select count (*) from table_utilisation
    where lib = @libelle
    and tome =@tome

    si le resultat de la requete est 0 alors je change le statue de mon dossier

    si le resultat est >1 alors je fait mon test 2

    test 2 est un select count et je fait pareil ... 7 fois avec des criteres differents


    donc !!! si je ne m abuse mon code devrait ressembler a ceci :

    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
     
     
     CREATE OR REPLACE PROCEDURE calcul 
    (p_libelle VARCHAR2, p_tome VARCHAR2, p_user VARCHAR2)
    IS
        BEGIN
    IF   ( select count (*) from table_utilisation
           where lib = @p_libelle
           and tome =@p_tome) = 0 
    THEN 
     
    UPDATE DOSSIER_MODIF
    SET OP_DATE_MAJ= SYSDATE, 
    OP_MODI=@p_user,
    DM_ETAT='Créé'
    where 1=1
    and DM_REFERENCE = @p_libelle
    and DM_TOME = @p_tome)
    ELSE
    IF elect count (*) from table_utilisation
           where statue = 'OK' and 
           lib = @p_libelle
           and tome =@p_tome) = 0
    THEN 
    UPDATE DOSSIER_MODIF
    SET OP_DATE_MAJ= SYSDATE, 
    OP_MODI=@p_user,
    DM_ETAT='Maj'
    where 1=1
    and DM_REFERENCE = @libelle
    and DM_TOME = @tome) 
    ELSE 
    END;
    /
    merci d avances pour votre aide et vos eclaircissements

    OOPS j oubliais le preincipal : je suis sur ORACLE 9i

  2. #2
    Membre chevronné Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Par défaut
    A quoi sert exactement la condition ? Merci

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 44
    Par défaut
    en fait c est juste l habitude de bosser sur des requetes generés

    lorsque le developpeur reprend la requete il n ajoute que


    select * from table
    where 1=1

    and toto = condition1
    and toto = condition 2

    en rouge c est fixe, ca consomme pas plus et ca permet au generateur de requete de pas se poser de question sur la place de l argument..
    effectivement pas necessaire ici

  4. #4
    Membre averti
    Inscrit en
    Août 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 20
    Par défaut
    Dans la déclaration de ta procédure tu dois indiquer si tes paramètres sont des paramètres d'entrée ou de sortie de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     CREATE OR REPLACE PROCEDURE calcul 
    (p_libelle VARCHAR2, p_tome VARCHAR2, p_user VARCHAR2)
    IS.....
    BEGIN
    ...
    END;
    De plus tu références tes paramètre au sein de ta procédure avec @ devant, pour quelle raison?
    Ensuite si ton paramètre s'appelle p_tome pourquoi écris-tu @tome?

    Attention aux erreurs d'orthographe...

  5. #5
    Membre chevronné Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Par défaut
    Citation Envoyé par Phil_67 Voir le message
    Dans la déclaration de ta procédure tu dois indiquer si tes paramètres sont des paramètres d'entrée ou de sortie de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     CREATE OR REPLACE PROCEDURE calcul 
    (p_libelle VARCHAR2, p_tome VARCHAR2, p_user VARCHAR2)
    IS.....
    BEGIN
    ...
    END;
    T'as dû zapper les In/Out au passage
    Citation Envoyé par Phil_67 Voir le message
    De plus tu références tes paramètre au sein de ta procédure avec @ devant, pour quelle raison?
    J'avais pas fait attention à ça, je pense que c'est seulement une erreur d'inattention de la part de morback à moins qu'il n'y ait de mystérieuses raisons derrière cette syntaxe.
    Citation Envoyé par Phil_67 Voir le message
    Attention aux erreurs d'orthographe...
    Citation Envoyé par Phil_67 Voir le message
    De plus tu références tes paramètres au sein de ta procédure avec @ devant, pour quelle raison?

  6. #6
    Membre éclairé Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    En s'abstenant pour rentrer dans le débat d'orthographe..
    Ta procédure devrait ressembler à ça :

    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
     CREATE OR REPLACE PROCEDURE calcul 
    (p_libelle IN VARCHAR2, p_tome IN VARCHAR2, p_user IN VARCHAR2)
    IS
        BEGIN
    IF   ( select count (*) from table_utilisation
           where lib = p_libelle
           and tome =p_tome) = 0 
    THEN 
    
        UPDATE DOSSIER_MODIF
        SET OP_DATE_MAJ= SYSDATE, 
              OP_MODI=p_user,
              DM_ETAT='Créé'
        where DM_REFERENCE = p_libelle
            and DM_TOME = p_tome)
    ELSE
       IF select count (*) from table_utilisation
            where statue = 'OK' and 
            lib = p_libelle
           and tome =p_tome) = 0
       THEN 
          UPDATE DOSSIER_MODIF
           SET OP_DATE_MAJ= SYSDATE, 
                 OP_MODI=p_user,
                 DM_ETAT='Maj'
        where  DM_REFERENCE = libelle
             and DM_TOME = tome) 
    END;
    /
    Plus ou moins

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 44
    Par défaut
    alors le IN / OUT je savais pas je viens de l ajouter

    pour l'@ je pensais que c'etait obligatoire comme le %% en batch le $ en perl etc ...
    donc la je les retire

    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
     
    CREATE OR REPLACE PROCEDURE calcul 
    (p_libelle IN VARCHAR2, p_tome IN VARCHAR2, p_user IN VARCHAR2)
    IS IN
        BEGIN
    IF   ( select count (*) from table_utilisation
           where lib = p_libelle
           and tome = p_tome) = 0 
    THEN 
     
    UPDATE DOSSIER_MODIF
    SET OP_DATE_MAJ= SYSDATE, 
    OP_MODI=p_user,
    DM_ETAT='Créé'
    where 1=1
    and DM_REFERENCE = p_libelle
    and DM_TOME = p_tome
    ELSE
    IF (select count (*) from table_utilisation
           where statue = 'OK' and 
           lib = p_libelle
           and tome =p_tome) = 0
    THEN 
    UPDATE DOSSIER_MODIF
    SET OP_DATE_MAJ= SYSDATE, 
    OP_MODI=@p_user,
    DM_ETAT='Maj'
    where 1=1
    and DM_REFERENCE = libelle
    and DM_TOME = p_tome 
    ELSE 
    END;
    /

    mais la encore j ai des erreurs de compliation

    je suis desolé du coté un peu basic de mes attentes, autant je commence a être bien à l'aise avec le SQL autant pour les procédure stockés, les cours me sembles vites abstraits

    merci de votre aide



    le principe est simple sur le papier faire un update d'un champs en fonction de resultat de requetes count... mais dois je mettre entre parethse, cote ou rien, bref je suis un peu perdu sur la syntaxe, il ne dois pas manquer grand chose (enfin j espere) ou peut etre que je tente des choses qui ne se font pas..

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

Discussions similaires

  1. alternative à la création de vues dans une procedure stockée
    Par cladsam dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/09/2005, 17h07
  2. Réponses: 6
    Dernier message: 24/09/2004, 13h10
  3. Réponses: 3
    Dernier message: 21/09/2004, 07h35
  4. Réponses: 6
    Dernier message: 05/08/2004, 13h15
  5. Probleme dans une procedure stockée
    Par malbaladejo dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 07/07/2004, 14h08

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