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 :

Utilisation fonction decode


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Par défaut Utilisation fonction decode
    Bonjour,

    J'ai un petit soucis, j'ai une évolution à réaliser sur un script de création de table et je cherche à paramétrer ma fonction decode.

    Voici le code concerné :
    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
    CREATE TABLE STAT.RAA_RAWDATA_AGENT 
    as 
    select 
     SEQ_RAA_RAWDATA_AGENT.nextval PK_RAA_ID,
     to_number(TO_CHAR(STA_D_DATE, 'YYYYMMDDhh24')) FK_DAT_ID,
     STA_A_ACTION ACTION, 
     STA_C_AGENT_ID SAGES_AGENT,        
     STA_C_TYPE_AGENT TYPE_AGENT,
     STA_D_DATE DATE_PUBLICATION,
     decode(STA_C_TYPE_AGENT, 'DGI',
      decode (SUBSTR(STA_C_AGENT_ID,1, 7), 'A457V05', STA_C_AGENT_ID, 
    
                                           substr(STA_C_AGENT_ID,1, 7)),STA_C_AGENT_ID) ENTITY_ID,
      decode(STA_C_TYPE_AGENT, 'DGI',      
            decode (SUBSTR(STA_C_AGENT_ID,1, 4), 'B210A', STA_C_AGENT_ID, 
                                    substr(STA_C_AGENT_ID,1, 10)),STA_C_AGENT_ID) ENTITY_ID,
     STA_A_VAR1 VAR_1,             
     STA_A_VAR2 VAR_2,             
     STA_A_VAR3 VAR_3,             
     STA_A_VAR4 VAR_4,             
     STA_A_VAR5 VAR_5
     from STA_AGENT
     where STA_C_AGENT_ID not in 
      (SELECT EHA_AGENT_ID 
       FROM STAT.EHA_ENTITE_HYPERVISION_AGENT )
    Ce que j'ai fais moi, j'ai dupliqué la fonction décode pour qu'elle réponde à mes nouveau critères. Sauf que là la création de la table est impossible vue que la colonne ENTITY_ID est crée 2 fois. Est il possible de mettre plusieurs condition dans 1 balise decode?

    Ce que je voudrai en faite est que si les 4 premiers caractères de STA_C_AGENT_ID est égale a B210A alors je copie tous le champs sinon je ne prend que les 7 premiers caractère.

    Merci pour votre aide, je peux donner plus de précisions si ce n'est pas claire.

    Thomas.

  2. #2
    Membre émérite
    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
    Par défaut
    Plusieurs remarques :
    - à vérifier, mais je ne suis pas sûr que le DECODE soit utilisable dans une ordre DDL, ici dans un CREATE TABLE.
    - en faisant un SUBSTR de 4 caractères, tu ne trouveras jamais la chaîne 'B210A' qui en compte 5 ...
    - c'est clair qu'avoir 2 champs ayant le même nom ne doit pas aider à ce que ça fonctionne...
    - enfin, pour avoir plusieurs conditions dans un DECODE, il faut faire comme tu l'as fait, imbriquer les DECODE entre eux.

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Par défaut
    Oui effectivement autant pour moi, il s'agit bien des 5 premiers caractères.

    Bon, mais j'ai essayé un tas de truc mais je trouve pas mon bonheur...

    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
     
     
    Si (sta_id = dgi) alors 
        Si (les 7  premier caractère de "sta_agent" = A457V05) alors
            retourne sta_agent
        Sinon Si (les 5 premier caractère de "sta_agent" = B210A) alors
            retourne sta_agent
        Sinon
            retourne (les 7premier caractère de sta_agent)
        Fin Si
    Fin Si
    // Voila l'algorithme que je veux mettre en place j'ai donc essayé ;
     
    decode(STA_C_TYPE_AGENT, 'DGI',
      decode (SUBSTR(STA_C_AGENT_ID,1, 7), 'A457V05', STA_C_AGENT_ID,  
         decode (SUBSTR(STA_C_AGENT_ID,1, 5), 'B210A', STA_C_AGENT_ID, substr(STA_C_AGENT_ID,1, 7)),STA_C_AGENT_ID) ENTITY_ID,
    Mais ca marche pas... Un pb dans la construction ou c simplement impossible?

  4. #4
    Membre émérite
    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
    Par défaut
    J'ai testé ton code, il manque une parenthèse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    decode(STA_C_TYPE_AGENT, 'DGI',
      decode (SUBSTR(STA_C_AGENT_ID,1, 7), 'A457V05', STA_C_AGENT_ID,  
         decode (SUBSTR(STA_C_AGENT_ID,1, 5), 'B210A', STA_C_AGENT_ID, substr(STA_C_AGENT_ID,1, 7))),STA_C_AGENT_ID) ENTITY_ID
    Comme ça, ça marche, maintenant dans un CREATE TABLE...

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Par défaut
    Effectivement ça marche, merci !!

    c'est trop facile avec vous

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

Discussions similaires

  1. Utilisation de la fonction DECODE
    Par AlexGr8 dans le forum SQL
    Réponses: 2
    Dernier message: 04/04/2014, 17h10
  2. [11g] Utilisation de la fonction DECODE
    Par shakapouet dans le forum SQL
    Réponses: 4
    Dernier message: 03/04/2014, 14h51
  3. Fonction decode, nouveau pb d'utilisation
    Par Thomas_ats dans le forum PL/SQL
    Réponses: 4
    Dernier message: 09/07/2008, 17h28
  4. Utilisation fonction définie dans un .Dll
    Par jeab. dans le forum Windows
    Réponses: 5
    Dernier message: 23/03/2004, 16h23

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