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

DB2 Discussion :

comment utiliser le 'CASE' statement


Sujet :

DB2

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 200
    Par défaut comment utiliser le 'CASE' statement
    Bonjour a vous,

    De l'aide!!!!
    voici mon probleme, dès que je décommente... enlever le signe du commentaire --) pour l'ajouter au select par exemple la colonne (-- M.fsp_id, )
    , j'obtient une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CONVERT    SQLPRINT              32  RETURN CODE IS 8                                                                                                                                                                                                                                                                                 
    CONVERT    SQLTERM                1 DSNH016I E     DSNHPARS LINE 28 COL 22  "END" REQUIRED                                                                                                                                                                                                               
    CONVERT    SQLTERM                2 DSNH104I E     DSNHPARS LINE 28 COL 22  ILLEGAL SYMBOL ",". SOME SYMBOLS THAT MIGHT BE LEGAL ARE: END
    par contre comme ça, ça marche 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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    CREATE PROCEDURE FSMS.STATUS_LIST_TEST (     IN I_language       character(2),
                                            IN I_parameter      character(7),
                                            out O_error_nr      integer )
     
        RESULT SETS 1
        LANGUAGE SQL
    --    WLM ENVIRONMENT DB2DWAPP
        MODIFIES SQL DATA
        COLLID FSMS
        asutime no limit
        RUN OPTIONS 'NOTEST(ALL,*,,VADTCPIP&137.122.105.233:*)'
    ------------------------------------------------------------------------
    -- SQL Stored Procedure
    ------------------------------------------------------------------------
    P1: BEGIN
     
        DECLARE v_error INT DEFAULT 0;
     
        DECLARE cursor1 CURSOR WITH RETURN FOR
     
        SELECT  DISTINCT   M.sector_id,
        case  upper(I_parameter)
        when  'SECTORALL'  then
     
                M.type_cd
    --            M.fsp_id,
    --	    M.status_id,
    --	    M.english_Html
    --	    M.french_Html,
    --	    M.update_userid,
    --	    S.english_desc,
    --	    S.french_desc,
    --	    case upper(I_language)
    --               when 'FR' then M.French_Html
    --               else  M.English_Html
    --            end Descrip_txt,
    --
    --            case upper(I_language)
    --               when 'FR' then S.French_desc
    --               else  S.English_desc
    --            end Descrip_status
    ---
         when  'SECTOR'  then
                 M.sector_id
         when 'FSPFSP'   then
                 M.fsp_id
         when 'TYPEFS' then
                 M.type_cd
         when 'STATUS' then
                S.french_desc
    ---            M.status_id
    --            case upper(I_language)
    --               when 'FR' then S.French_desc
    --               else  S.English_desc
    --            end Descrip_status
     
        end
     
        FROM    GAF.MFP_STATUS M
        inner join GAF.STATUS  S
    	    on M.Status_ID = S.Status_ID
    --    ORDER BY M.sector_id,
    --	    M.type_cd,
    --	    M.fsp_id
    --	    Descrip_status
        WITH UR;
     
        set O_error_nr = 0;
     
    --  open cursor1
        OPEN Cursor1;
     
    END P1
     
     
     
    -- --------------------------------------------------------------------
    -- date         sr#     user
    -- -----------  ----    -------- --------------------------------------
    -- 2007-07-16           
    -- Initial creation of stored procedure
    -- ----------------------------------------------

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut
    Evidemment ! la colonne baptisée "Descrip_txt" ne peut pas prendre à la fois la valeur de la colonne M.type_cd et celle de la colonne M.fsp_id par exemple.
    pour mieux comprendre, disons qu'un CASE peut se lire comme un IF :
    IF upper(I_parameter) = 'SECTORALL' then Descrip_txt = M.type_cd

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 200
    Par défaut comment utiliser le 'CASE' statement
    Merci Mercure, c'etait la fonctionalité du CASE qui m'avait échapé.....
    ce que je veux est du genre:
    si tu arrives a me restructurer ce code, tu me sauveras ben du temps.
    A+

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    CREATE PROCEDURE FSMS.STATUS_LIST_TEST (     IN I_language       character(2),
                                            IN I_parameter      character(7),
                                            out O_error_nr      integer )
     
        RESULT SETS 1
        LANGUAGE SQL
    --    WLM ENVIRONMENT DB2DWAPP
        MODIFIES SQL DATA
        COLLID FSMS
        asutime no LIMIT
        RUN OPTIONS 'NOTEST(ALL,*,,VADTCPIP&137.122.105.233:*)'
    ------------------------------------------------------------------------
    -- SQL Stored Procedure
    ------------------------------------------------------------------------
    P1: BEGIN
     
        DECLARE v_error INT DEFAULT 0;
     
        DECLARE cursor1 CURSOR WITH RETURN FOR
     
        SELECT  DISTINCT   M.sector_id,
        si  upper(I_parameter) est =  'SECTORALL'  alors je selectionne les champs suivants:
                SELECT  DISTINCT   M.sector_id,
                M.type_cd
                M.fsp_id,
    	    M.status_id,
    	    M.english_Html
    	    M.french_Html,
    	    M.update_userid,
    	    S.english_desc,
    	    S.french_desc,
    	    case upper(I_language)
                   when 'FR' then M.French_Html
                   else  M.English_Html
                end Descrip_txt,
     
                case upper(I_language)
                   when 'FR' then S.French_desc
                   else  S.English_desc
                end Descrip_status
     
                ORDER BY M.sector_id,
                M.type_cd,
    	M.fsp_id
    	Descrip_status
     
     
     
         si  upper(I_parameter) est =  'SECTOR'  alors je selectionne les champs suivants:
                 SELECT  DISTINCT   
                 M.sector_id
                 ORDER BY M.sector_id
     
         si  upper(I_parameter) est =  'FSPFSP'  alors je selectionne les champs suivants:
                  SELECT  DISTINCT   
                   M.fsp_id
                  ORDER BY M.fsp_id
     
         si  upper(I_parameter) est =  'TYPEFS'  alors je selectionne les champs suivants:
                 SELECT  DISTINCT   
                 M.type_cd
                 ORDER BY M.type_cd
     
         si  upper(I_parameter) ets =  'STATUS'  alors je selectionne les champs suivants:
                SELECT  DISTINCT   
                 M.status_id
                case upper(I_language)
                   when 'FR' then S.French_desc
                   else  S.English_desc
                end Descrip_status
                ORDER BY Descrip_status
     
     
        FROM    GAF.MFP_STATUS M
        INNER JOIN GAF.STATUS  S
    	    ON M.Status_ID = S.Status_ID
     
        WITH UR;
     
        SET O_error_nr = 0;
     
    --  open cursor1
        OPEN Cursor1;
     
    END P1
     
     
     
    -- --------------------------------------------------------------------
    -- date         sr#     user
    -- -----------  ----    -------- --------------------------------------
    -- 2007-07-16           
    -- Initial creation of stored procedure
    -- ----------------------------------------------

Discussions similaires

  1. [11g] Utiliser une nested query dans un CASE statement
    Par h12enri dans le forum SQL
    Réponses: 6
    Dernier message: 09/11/2014, 12h40
  2. Réponses: 4
    Dernier message: 24/02/2009, 12h06
  3. comment utiliser actionscript ?
    Par webs dans le forum Flash
    Réponses: 3
    Dernier message: 09/02/2003, 23h11
  4. Comment utiliser OUT ?
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 3
    Dernier message: 20/07/2002, 09h35
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

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