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

PL/SQL Oracle Discussion :

Problème imbrication de CASE [12c]


Sujet :

PL/SQL Oracle

  1. #1
    Membre habitué
    Femme Profil pro
    Database
    Inscrit en
    Juin 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Database

    Informations forums :
    Inscription : Juin 2010
    Messages : 125
    Points : 135
    Points
    135
    Par défaut Problème imbrication de CASE
    Bonjour,

    J'essqye desesperement d'imbriquer 2 case dans un petit programme tres simple pl mais il me retourne l'erreur :

    Error(30,11): PLS-00103: Encountered the symbol ";" when expecting one of the following: case The symbol "case" was substituted for ";" to continue.
    et je n'arrive pas a trouver d'ou vient l'erreur

    Le code est le suivant :

    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
    create or replace function FGet_Region(addr_post_code Varchar2)
    return VARCHAR2
    IS
      l_region varchar2(3):= NULL;
     
    BEGIN
       CASE substr(addr_post_code, 1, 2)  WHEN 'A' then
                case substr(addr_post_code, 2, 1) 
                       when 'l'  then l_Region:='H';
                       when 'b' then l_Region:='M';    
                end;
       ELSE  l_Region:= 'Z';
       END CASE;	
       return l_region;
    END;
    J'ai tente de faire la meme chose mais avec un SELECT [code] INTO mais avec le Case pas moyen de trouver la bonne syntaxe!

    Bref, pourriez-vous m'indiquer ou je me suis trompee?

    Merci

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 759
    Points : 52 538
    Points
    52 538
    Billets dans le blog
    5
    Par défaut
    La présence du point virgule est un indicateur de terminaison de la requête.... Vous devez donc retirer ceux figurant après vos WHEN

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre habitué
    Femme Profil pro
    Database
    Inscrit en
    Juin 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Database

    Informations forums :
    Inscription : Juin 2010
    Messages : 125
    Points : 135
    Points
    135
    Par défaut
    Ben maintenant, Oracle s'enerve tout rouge!

    J'ai 3 erreurs:

    Error(10,20): PLS-00103: Encountered the symbol "WHEN" when expecting one of the following: * & = - + ; < / > at in is mod remainder not rem <an exponent (**)> <> or != or ~= >= <= <> and or like like2 like4 likec between || multiset member submultiset The symbol ";" was substituted for "WHEN" to continue.
    Error(11,13): PLS-00103: Encountered the symbol "END" when expecting one of the following: * & = - + ; < / > at in is mod remainder not rem <an exponent (**)> <> or != or ~= >= <= <> and or like like2 like4 likec between || multiset member submultiset The symbol "END" was ignored.
    Error(15,4): PLS-00103: Encountered the symbol ";" when expecting one of the following: case

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 137
    Points : 1 917
    Points
    1 917
    Par défaut
    Bonjour,

    Il est rarement nécessaire d'imbriquer des instructions CASE. Je pense que tu peux simplement écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    case when addr_post_code like 'Al%' then  l_region := 'H';
         when addr_post_code like 'Ab%' then  l_region := 'M';
         else l_region := 'Z';
    end case;
    J'ai l'impression qu'il y a une erreur dans ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      CASE substr(addr_post_code, 1, 2)  WHEN 'A'
    Cela va extraire 2 caractères que tu compares à 'A'

  5. #5
    Membre habitué
    Femme Profil pro
    Database
    Inscrit en
    Juin 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Database

    Informations forums :
    Inscription : Juin 2010
    Messages : 125
    Points : 135
    Points
    135
    Par défaut
    Exact, je veux effectivement comparer mon premier caractere...

    Merci pour ta reponse, je vais reecrire le code avec un seul case.

    Merci beaucoup Vanagreg!

  6. #6
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Le deuxième case n'a pas de END CASE; mais uniquement un END; ce qui peut faire croire qu'il s'agisse de la fin de procédure.
    Pouvez-vous essayer en spécifiant bien END CASE; ?

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

Discussions similaires

  1. [ASP3] problème de select case
    Par beegees dans le forum ASP
    Réponses: 13
    Dernier message: 03/02/2006, 10h46
  2. Problèmes avec des cases à cocher et une liste déroulante
    Par rob2-9 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 25/01/2006, 10h52
  3. Problème avec les cases à cocher
    Par psycopat dans le forum Access
    Réponses: 8
    Dernier message: 20/10/2005, 14h25
  4. Problème avec les cases d'un groupe d'option.
    Par auriolbeach dans le forum Access
    Réponses: 2
    Dernier message: 01/10/2005, 07h33
  5. [Tableaux] Problème avec Switch case
    Par philippef dans le forum Langage
    Réponses: 4
    Dernier message: 07/09/2005, 16h37

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