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 :

Subtillité incompréhensible dans 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 Subtillité incompréhensible dans Case
    Bonjour, bonjour!

    Je viens de créer une petite fonction basic qui doit retourner la région d'appartenance par rapport a un code postal donné.

    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
    create or replace function FGet_GeoProfile( cp Varchar2)
    return VARCHAR2
    IS
      l_cp Varchar2(2):= substr(cp,1,2);
      l_geoProfile varchar2(20):= NULL;
     
    BEGIN
     
      IF l_cp is null then
          l_geoProfile:= '1. South East';
      ELSE
          CASE l_cp
               WHEN 'BA' || 'BH' ||'BS' ||'DT' ||'EX' ||'GL' ||'PL' || 'SN'|| 'SP' ||'TA' ||'TQ'||'TR'  THEN
                  l_geoProfile:= '1. South East';
               WHEN 'AL' || 'BN' || 'CM' || 'CO' || 'CR' || 'CT' || 'DA' || 'GU' || 'HP' || 'LU' || 'ME' 
                    || 'MK' || 'OX' || 'PO' || 'RG' || 'RH' || 'SG' || 'SL' || 'SO' || 'SS' || 'TN' || 'WD' THEN
                  l_geoProfile:= '2. South East';  
               ELSE
                  l_geoProfile:= 'Unknown';
          END CASE;
      END IF;
      return l_geoProfile;
    END;
    Je suis en Angleterre, les codes postaux commence par 2 lettres sur lesquels je fais mon test...

    Mais en fait, ben cela ne fonctionne pas!
    Le resultat est toujours 'Unknown'

    Avez-vous une idée du comment du pourquoi?? parceque je préfererais éviter que mes utilisateurs aient a gérer la variable a passer.

    Merci

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    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 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Bonjour,

    Ce ne serait pas plutôt une liste IN qu'il faudrait tester?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CASE WHEN l_cp IN ('BA',  'BH', 'BS', 'DT', 'EX', 'GL', 'PL', 'SN', 'SP', 'TA', 'TQ', 'TR'  THEN ...
    Pareil pour le deuxième test.

  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
    Merci Vanagreg!

    C'est exactement cela, juste un IN!

  4. #4
    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
    Pour l'explication

    Le double pipe || sert à la concaténation de texte, donc si l'on écrit ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'BA' || 'BH' ||'BS' ||'DT' ||'EX' ||'GL' ||'PL' || 'SN'|| 'SP' ||'TA' ||'TQ'||'TR'
    Ça revient à cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'BABHBSDTEXGLPLSNSPTATQTR'
    D'où le résultat "unknown"

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 19/12/2007, 11h06
  2. Erreur incompréhensible dans une boucle
    Par Neuromancien2 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/08/2007, 16h48
  3. [TP] Jeu bille qui tombe dans case
    Par stabiloboss dans le forum Turbo Pascal
    Réponses: 12
    Dernier message: 09/06/2007, 10h21
  4. Réponses: 4
    Dernier message: 12/11/2006, 18h49
  5. [select dans case] reconnaitre un champ d une table liée
    Par the_edge dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 22/10/2004, 16h47

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