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

Sybase Discussion :

utilisation CASE en sybase


Sujet :

Sybase

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2009
    Messages : 22
    Points : 28
    Points
    28
    Par défaut utilisation CASE en sybase
    Bonjour,

    Je doit créer 2 proc une en sybase et une en oracle.
    J'utilise la fonction case en oracle et ca fonctionne par contre en sybase sa bloque

    pour oracle je fait
    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
     
    create or replace
    procedure WEB_CSWEB_VILPORNET
     
    IS
     
    TypeInsert VARCHAR(70);
     
    BEGIN
    	--recupere la valeur de WEB_ALIM_VILPORNET pour connaiter le mode d'alimentation de la table WEB_VILPORNET
    	select nvl(max(INIVAL),'VOIEILOT') into TypeInsert
    	from WEB_INI where ININAME='WEB_ALIM_VILPORNET';
     
    	case TypeInsert
    		when 'GEOCODAGE' THEN 
    			execute immediate('insert into web.web_vilpornet
    								select codine,copos6,cmuabn,null
    								from abo.xpbartp2 t
    								where exists (select 1 from vnd.si05 s 
                                          where s.ccoins = t.ccoins)');
    		when 'SPEC_FS' then 
    			execute immediate('insert into web.web_vilpornet 
    								select codine,copos6,cmuabn,null 
    								from abo.xpbartp2 t 
    								where exists (select 1 from abo.voieilot v 
                                          where v.voiins = codine 
                                          and voicodilo = ''I100'')');
    		when 'VOIEILOT' then
    			execute IMMEDIATE ('insert into web.web_vilpornet
                    select codine,copos6,cmuabn,null 
    								from abo.xpbartp2 t
    								where exists (select 1 from abo.voieilot v 
                                          where v.voiins = codine)');
        WHEN 'SPEC_NM' THEN
          execute immediate ('insert into web.web_vilpornet
                    select codine,copos6,cmuabn,null 
                    from abo.xpbartp2 t
                    where exists (select 1 from abo.voieilot v 
                                          where v.voiins = codine)');
          execute immediate ('insert into web.web_vilpornet
                    select codine,copos6,cmuabn,null 
                    from abo.XPBARTP2
                    where substr(CODINE,1,6) IN (''006999'', ''083137'', ''020033'', ''006088'', ''020004'')
                    and substr (codine,7,1) in (''X'', ''E'') ');
        /*pour toute autre valeur dans la table WEB_INI execution de la meme insertion que pour VOIEILOT
        ceci pour prévoir en cas de changement*/
    		ELSE 
    			execute IMMEDIATE ('insert into web.web_vilpornet
    								select codine,copos6,cmuabn,null 
    								from abo.xpbartp2 t
    								where exists (select 1 from abo.voieilot v 
                                          where v.voiins = codine)');
    	end case;
    	commit;
    end;
    mais en sybase si je met ce code
    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
     
    use web
     
    /*declare @nomobj varchar(255)
    if exists(select 1 from sysobjects where upper(name)=upper('WEB_CSWEB_VILPORNET') and type='P')
          begin
          select @nomobj=name  from sysobjects where upper(name)=upper('WEB_CSWEB_VILPORNET') and type='P'
          execute('drop procedure ' + @nomobj)
          end
    go*/
     
    create proc WEB_CSWEB_VILPORNET
     
    as
     
    declare @TypeInsert VARCHAR(70)
     
    --recupere la valeur de WEB_ALIM_VILPORNET pour connaitre le mode d'alimentation de la table WEB_VILPORNET
    select @TypeInsert=isnull(INIVAL,'VOIEILOT') 
    from WEB_INI where ININAME='WEB_ALIM_VILPORNET'
     
    select case @TypeInsert
    	when 'GEOCODAGE' THEN 
    		execute('insert into web..web_vilpornet
    					select codine,copos6,cmuabn,null
    					from abo..xpbartp2 t
    					where exists (select 1 from vnd..si05 s 
    											where s.ccoins = t.ccoins)')
    	when 'SPEC_FS' then 
    		execute('insert into web..web_vilpornet 
    					select codine,copos6,cmuabn,null 
    					from abo..xpbartp2 t 
    					where exists (select 1 from abo..voieilot v 
    											where v.voiins = codine 
    											and voicodilo = ''I100'')')
    	when 'VOIEILOT'
    		execute('insert into web..web_vilpornet
    					select codine,copos6,cmuabn,null 
    					from abo..xpbartp2 t
    					where exists (select 1 from abo..voieilot v 
    											where v.voiins = codine)')
    	WHEN 'SPEC_NM' THEN
    		execute('insert into web..web_vilpornet
    					select codine,copos6,cmuabn,null 
    					from abo..xpbartp2 t
    					where exists (select 1 from abo..voieilot v 
    											where v.voiins = codine)')
    		execute('insert into web..web_vilpornet
    					select codine,copos6,cmuabn,null 
    					from abo..XPBARTP2
    					where substr(CODINE,1,6) IN (''006999'', ''083137'', ''020033'', ''006088'', ''020004'')
    					and substr (codine,7,1) in (''X'', ''E'') ')
    	/*pour toute autre valeur dans la table WEB_INI execution de la meme insertion que pour VOIEILOT
    	ceci pour prévoir en cas de changement*/
    	ELSE 
    		execute('insert into web..web_vilpornet
    					select codine,copos6,cmuabn,null 
    					from abo..xpbartp2 t
    					where exists (select 1 from abo..voieilot v 
    											where v.voiins = codine)')
    end
    go
    et la j'ai des erreurs à la compile car il n'aime pas ma fonction execute.

    est ce que quelqu'un à une idée
    Merci

  2. #2
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 247
    Points : 473
    Points
    473
    Billets dans le blog
    1
    Par défaut
    Il faut utiliser if then ... else if then ... else if ...
    Le case marche pour remplacer des expressions par d'autres ( eventuellement calulées avec des fonctions internes ou des sous requetes ) mais pas dans ce cas la.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2009
    Messages : 22
    Points : 28
    Points
    28
    Par défaut
    merci de ta réponse,

    je voulais éviter de passer par la et savoir s'il y avait une instruction équivalente en sybase par rapport à oracle.

  4. #4
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 247
    Points : 473
    Points
    473
    Billets dans le blog
    1
    Par défaut
    Par contre tu peux l'ecrire autrement si tu n'aimes pas les if imbriqués :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DECLARE @exec varchar(4000)
    select @exec = case @TypeInsert 
                        when 'cas1' then 'instruction(s) 1'
                        when 'cas2' then 'instruction(s) 2'
                        else             'instruction(s) else'
                   end
     
    EXEC @exec

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2009
    Messages : 22
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par Jean.Cri1 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DECLARE @exec varchar(4000)
    select @exec = case @TypeInsert 
                        when 'cas1' then 'instruction(s) 1'
                        when 'cas2' then 'instruction(s) 2'
                        else             'instruction(s) else'
                   end
     
    EXEC @exec
    Nickel c'est ce que je cherchais.
    Le Seul hic c'est que j'ai des changement de schéma lors de mon exécution des procédure sql et ca il n'aime pas, là c'est un autre problème sinon ta solution me convient parfaitement

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

Discussions similaires

  1. fonction vba utilisant Case
    Par daniel9275 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 26/11/2009, 11h37
  2. Utilisation CASE WHEN avec une liste de valeurs
    Par mortimer.pw dans le forum PL/SQL
    Réponses: 5
    Dernier message: 26/03/2009, 12h50
  3. [Débutant] Utiliser Case of avec Readkey
    Par messahel dans le forum Langage
    Réponses: 6
    Dernier message: 29/11/2008, 20h17
  4. Utilisation case à cocher
    Par steph_p dans le forum IHM
    Réponses: 1
    Dernier message: 05/09/2008, 16h19
  5. Utilisation de namepipe (SyBase) dans Vista
    Par haq93 dans le forum Windows Vista
    Réponses: 0
    Dernier message: 04/10/2007, 16h59

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