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 :

Comportement d'une procédure


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
    Août 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 61
    Par défaut Comportement d'une procédure
    Bonjour,

    Je souhaite donc créer une procédure qui me permettra d'affecter un rôle (genre administrateur) à un utilisateur.

    D'une manière générale, ma procédure se comporterait comme cela :
    -le premier select correspond à un test si l'utilisateur et le rôle existe, et mon parm me permettra de dire si oui ou non ce rôle est affecté et/ou pouvoir le désactiver,
    -les selects du CASE correspondent à un test de ma table où je veux faire l'insert ou update s'il y a présence ou non de l'utilisateur et du rôle dans d'autres tables.

    Dans le cas de mon premier CASE, s'il n'y a aucun enregistrement, il devrait faire l'insert mais ne le fait pas.
    Pourtant, ces selects isolés me retournent bien ce que je souhaite.

    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
     
    CREATE OR REPLACE PROCEDURE procedure_name(...parm type...)
    --variables--
    var...
    BEGIN
    SELECT...
    CASE WHEN parm=1 THEN
             SELECT...INTO var
              IF var = 1 THEN
                raise...
              ELSEIF var=0 THEN
                update...
              ELSE                          <----pbs à ce niveau
                insert
            END IF;
            WHEN parm=0 THEN
             SELECT...INTO var
              IF var=0 THEN
              raise...
              ELSE
              update...
             END IF;
    END CASE;
    END;
    Est-ce-qu'au niveau de la structuration, cela vous paraît correcte ?

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    tu ne peux pas employer un statement-case sans else
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SQL> begin
      2    case
      3      when 1=0 then null;
      4    end case;
      5  end;
      6  /
    begin
    *
    ERROR at line 1:
    ORA-06592: CASE not found while executing CASE statement
    ORA-06512: at line 2
    il te faut un else
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SQL> begin
      2    case
      3      when 1=0 then null;
      4      else null;
      5    end case;
      6  end;
      7  /
     
    PL/SQL procedure successfully completed.
    Citation Envoyé par aldente
    pbs à ce niveau
    quel problème? tu as un message d'erreur? alors donne-le!

  3. #3
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    disons que ce n'est pas impossible, mais il faut être sûr que toutes les situations soient couvertes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SQL> begin
      2    case
      3      when 0=0 then null;
      4    end case;
      5  end;
      6  /
     
    PL/SQL procedure successfully completed.

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    il y aussi ELSIF et non ELSEIF

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SQL> begin
      2    if (0=1) then null;
      3    elsif (0=2) then null;
      4    else null;
      5    end if;
      6  end;
      7  /
     
    PL/SQL procedure successfully completed.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 61
    Par défaut
    Oui pardon c'était ELSIF !
    Non pas de message d'erreur.
    L'insertion ne se fait pas qd je check la table après l'éxécution.
    Je teste avec un else pour le case.

    edit: pas de changement. mes conditions s'éxécutent pour le CASE et le ELSE mais arriver dans le premier CASE, le dernier cas de figure ne se fait pas...
    donc cela viendrait de ma requête ?
    Etrange si j'arrive à obtenir un résultat en la tapant "manuellement".

  6. #6
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    pourquoi ne pas ajouter des informations dbms_output pour voir ou tu en es...

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

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. Transformation de date dans une procédure stockée
    Par bd0606 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/10/2003, 11h31
  3. Réponses: 12
    Dernier message: 27/08/2003, 11h04
  4. Problème avec une procédure stockée
    Par in dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/05/2003, 15h33
  5. Fin de programme dans une procédure
    Par Sinclair dans le forum Langage
    Réponses: 13
    Dernier message: 29/11/2002, 22h30

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