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

PostgreSQL Discussion :

Syntaxe CASE dans un CREATE FUNCTION


Sujet :

PostgreSQL

  1. #1
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 395
    Par défaut Syntaxe CASE dans un CREATE FUNCTION
    Bonjour à tous,

    Je débute sur Postgre et rencontre un petit problème sur la syntaxe à utiliser pour le CASE dans une fonction.

    Voici la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    REATE FUNCTION P0600 (IN V0 SMALLINT, IN V1 CHAR(5), IN V2 CHAR(5), IN V3 CHAR(8), IN V4 CHAR(8), IN V5 INTEGER, IN V6 VARCHAR(30), IN V7 CHAR(2), IN V8 CHAR(2)) 
    RETURNS SETOF P0600_T AS $$
    DECLARE REC P0600_T%ROWTYPE;
    I1 VARCHAR(5000);
    BEGIN 
    	I1 := '0';
    	CASE V0
    		WHEN 1 THEN 
    			I1 := I1 || '1';
    	END;
    FOR REC IN EXECUTE I1 LOOP RETURN NEXT REC;END LOOP; END;$$LANGUAGE 'PLPGSQL'
    Ne faites pas attention au contenu, j'ai fait de l'élagage pour simplifier la recherche de l'erreur.

    Voici l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ERROR:  syntax error at or near "CASE" at character 1
    QUERY:  CASE  $1  WHEN 1 THEN  $2  :=  $2  || '1'
    CONTEXT:  SQL statement in PL/PgSQL function "p0600" near line 7
    Je pense fortemment que la solution est d'une simplicité enfantine, donc merci à vous pour les éventuels éclaircissements.

  2. #2
    Membre éprouvé Avatar de kain_tn
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 844
    Par défaut
    Bonsoir,

    Pour ce que tu veux faire, tu peux utiliser le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF blublu THEN blublublu ELSE blu END IF;
    . Sinon, il me semble que pour le case, tu est obligé de passer par une expression de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT bla CASE WHEN BLABLA THEN blablablabla END;
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    I1 := bla CASE WHEN BLABLA THEN blablablabla END;

  3. #3
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 395
    Par défaut
    Bonjour et merci pour la réponse.

    Pour ne pas rester bloquer, je suis passé par le IF.

    En ce qui concerne le CASE, je ne l'utilise pas dans la requête mais pour construire la requête.

    Etant donné que j'utilisais déjà le IF, je voulais alléger le code en utilisant le CASE comme je le fais pour DB2, mais j'ai l'impression que ce n'est pas supporté.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Ca n'existe pas en plpgsql mais une il faut voir qu'une cascade de IF ELSEIF ne nécessite pas vraiment plus de lignes de code que si ça existait.

  5. #5
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 395
    Par défaut
    ok merci.
    En effet, mais je n'aime pas avoir des IF imbriqués dans des ELSEIF

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

Discussions similaires

  1. Erreur de syntaxe sur Create Function
    Par olibara dans le forum Développement
    Réponses: 12
    Dernier message: 12/01/2015, 09h23
  2. Syntaxe de CHECK dans un CREATE TABLE
    Par CinePhil dans le forum Requêtes
    Réponses: 14
    Dernier message: 18/02/2009, 18h06
  3. [aide svp] Create function => erreur de syntaxe.
    Par Draz34 dans le forum Développement
    Réponses: 1
    Dernier message: 25/01/2009, 18h55
  4. Erreur de syntaxe sur un CREATE FUNCTION
    Par hirochirak dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 01/07/2008, 14h25
  5. Problème de syntaxe d'un CASE dans un WHERE?
    Par Danny Blue dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/04/2007, 23h18

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