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 :

Fonction decode, nouveau pb d'utilisation


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Points : 39
    Points
    39
    Par défaut Fonction decode, nouveau pb d'utilisation
    Bonjour,

    J'ai un script sql qui est éxécuté automatiquement et quaotidiennement par la commande sqlplus.

    J'ai fais évoluer ce script sql qui maintenant ne marche plus... Et je ne comprend pas pourquoi car lorsque j'éxécute mon code sql dans une interface sql il fonctionne bien...

    Je précise que je n'ai aucun code erreur sql en retour...

    Voici les évolution :

    (avant) qui fonctionne bien..
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
     
    CREATE TABLE STAT.RAA_RAWDATA_AGENT 
    tablespace STAT_DAT_MED
    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, 
                                           'A550A00', STA_C_AGENT_ID,
                                           'A550A51', STA_C_AGENT_ID,       
                                           'A550A52', STA_C_AGENT_ID,
                                           'A550A53', STA_C_AGENT_ID,
                                           'A550A54', STA_C_AGENT_ID,
                                           'A550A55', STA_C_AGENT_ID,
                                           'A550A56', STA_C_AGENT_ID,
                                           'A550A57', STA_C_AGENT_ID,
                                           'A550A58', STA_C_AGENT_ID,
                                           'A550A59', STA_C_AGENT_ID, 
                                           'A550C10', STA_C_AGENT_ID,
                                           'A550C20', STA_C_AGENT_ID,
                                           'A550C21', STA_C_AGENT_ID,
                                           'A550C22', STA_C_AGENT_ID,
                                           'A550C23', STA_C_AGENT_ID,
                                           'A550C24', STA_C_AGENT_ID,
                                           'A550C90', STA_C_AGENT_ID,
                                           'A550T30', STA_C_AGENT_ID,
                                           'A550T40', STA_C_AGENT_ID,
                                           'A553A01', STA_C_AGENT_ID,
                                           'A556G50', STA_C_AGENT_ID,
                                           'A557P61', STA_C_AGENT_ID,
                                           'A557P62', STA_C_AGENT_ID,
                                           'A557P63', STA_C_AGENT_ID,
                                           'A557S01', STA_C_AGENT_ID,
                                           'A557S70', STA_C_AGENT_ID,
                                           'A557S00', STA_C_AGENT_ID,
                                           'B210A00', STA_C_AGENT_ID,
                                           'B210A55', STA_C_AGENT_ID,
                                           'B210A53', STA_C_AGENT_ID,
                                           'B214P01', STA_C_AGENT_ID,
                                           'B214P01', STA_C_AGENT_ID,
                                           'B210T30', STA_C_AGENT_ID,
                                           substr(STA_C_AGENT_ID,1, 7)),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 )
    (après) qui ne fonctionne plus...
    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 TABLE STAT.RAA_RAWDATA_AGENT 
    tablespace STAT_DAT_MED
    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, 
                                           decode (SUBSTR(STA_C_AGENT_ID,1, 5), 'B210A', STA_C_AGENT_ID, 
                                           decode (SUBSTR(STA_C_AGENT_ID,1, 5), 'A550C', STA_C_AGENT_ID, 
                                           decode (SUBSTR(STA_C_AGENT_ID,1, 5), 'A550T', STA_C_AGENT_ID, 
                                           decode (SUBSTR(STA_C_AGENT_ID,1, 5), 'A553A', STA_C_AGENT_ID, 
                                           decode (SUBSTR(STA_C_AGENT_ID,1, 5), 'A556G', STA_C_AGENT_ID, 
                                           decode (SUBSTR(STA_C_AGENT_ID,1, 5), 'A557P', STA_C_AGENT_ID, 
                                           decode (SUBSTR(STA_C_AGENT_ID,1, 5), 'A557S', STA_C_AGENT_ID,
                                           decode (SUBSTR(STA_C_AGENT_ID,1, 5), 'B214P', STA_C_AGENT_ID, 
                                           decode (SUBSTR(STA_C_AGENT_ID,1, 5), 'B210T', STA_C_AGENT_ID, 
                                           decode (SUBSTR(STA_C_AGENT_ID,1, 5), 'A550A', STA_C_AGENT_ID, substr(STA_C_AGENT_ID,1, 7)))))))))))),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 )

    Je cherche pourquoi cette dernière utilisation de la fonction decode ne fonctionne pas... Est ce possible que cela vienne d'une trop grande imbriquation de la balise decode??


    Merci de votre aide.

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    La fonction decode c’est plutôt une structure de programmation de type CASE que de type IF THEN ELSE, donc t’as trop de decode inutiles.
    J’ai l’impression que ce morceau de code pouvait être encore simplifié parce que en gros, il renvoie soit STA_C_AGENT_ID soit SubStr(STA_C_AGENT_ID,1,7)

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Points : 39
    Points
    39
    Par défaut
    Alors effectivement je viens de voir que j'ai du code inutiledonc :

    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 TABLE STAT.RAA_RAWDATA_AGENT 
    tablespace STAT_DAT_MED
    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, 
                                           'B210A', STA_C_AGENT_ID, 
                                          'A550C', STA_C_AGENT_ID, 
                                           'A550T', STA_C_AGENT_ID, 
                                           'A553A', STA_C_AGENT_ID, 
                                           'A556G', STA_C_AGENT_ID, 
                                           'A557P', STA_C_AGENT_ID, 
                                           'A557S', STA_C_AGENT_ID,
                                           'B214P', STA_C_AGENT_ID, 
                                           'B210T', STA_C_AGENT_ID, 
                                           'A550A', STA_C_AGENT_ID, substr(STA_C_AGENT_ID,1, 7)))))))))))),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 )

    mais ca ne fonctionne toujours pas...

  4. #4
    Membre confirmé
    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
    Points : 639
    Points
    639
    Par défaut
    Tu as beaucoup trop de parenthèses fermantes pour ton 2ème DECODE.
    J'ai l'impression que tu as mis une parenthèse pour chaque expression évaluée, or il faut une parenthèse globale pour le DECODE.
    Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche !

  5. #5
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut
    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
     
     
      decode (SUBSTR(STA_C_AGENT_ID,1, 5), 
                                           'B210A', STA_C_AGENT_ID, 
                                          'A550C', STA_C_AGENT_ID, 
                                           'A550T', STA_C_AGENT_ID, 
                                           'A553A', STA_C_AGENT_ID, 
                                           'A556G', STA_C_AGENT_ID, 
                                           'A557P', STA_C_AGENT_ID, 
                                           'A557S', STA_C_AGENT_ID,
                                           'B214P', STA_C_AGENT_ID, 
                                           'B210T', STA_C_AGENT_ID, 
                                           'A550A', STA_C_AGENT_ID, 
                                           decode (substr(STA_C_AGENT_ID,1, 7),
                                                     'A457V05', STA_C_AGENT_ID,            
                                                     STA_C_AGENT_ID),
                                            STA_C_AGENT_ID) ENTITY_ID,

    C'est ca que tu veux non ?

    LA valeur retournée par defaut (dans les 2 decode) n'est pas la bonne, c'est totu je pense
    C'est pas parce que ca marche que c'est bon!!
    Pensez au bouton "Résolu"
    Je ne réponds pas en privé aux questions

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. Utilisation fonction decode
    Par Thomas_ats dans le forum SQL
    Réponses: 4
    Dernier message: 03/07/2008, 17h54
  4. Réponses: 16
    Dernier message: 21/02/2005, 17h20

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