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

Langage SQL Discussion :

Comment creer et appeler une fonction sql..


Sujet :

Langage SQL

  1. #1
    Membre habitué Avatar de denissay
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 103
    Points : 125
    Points
    125
    Par défaut Comment creer et appeler une fonction sql..
    Bonjour a tous,
    J'essaie de créer une fonction qui prends comme paramètre un string, effectue des tests (if...elseif...else) avant de retourner un autre string....
    J'ai éssayé ceci (je me suis basé sur un exemple trouvé par google)mais ça me renvoie une erreur 1064:
    CREATE FUNCTION test (s CHAR(50)) RETURNS CHAR(20)
    DEFINE temp CHAR(50)
    IF (s LIKE '%Bus%')
    THEN LET temp = 'Bus';
    ELSE IF (s LIKE '%Voiture%')
    THEN LET temp = 'Voiture';
    ELSE
    THEN LET temp = 'Avion';
    RETURN temp;
    END FUNCTION;
    et puis dans ma requête j'ai:
    SELECT nom, prenom, test(etat) AS moyen FROM fiche;
    Merci d'avance pour votre aide

  2. #2
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 105
    Points : 90
    Points
    90
    Par défaut ceci est valable pour SQL SERVER
    salut dans votre code il y a pas mal de trucs que je comprends pas:
    1- le nom de la fonction doit être précéder par le nom du propriétaire de la bse de donnée:
    exemple : dbo.test
    2- un paramètre doit être précéder par @; exemple : @s
    3- je comprends pas l'utlisation de LET : on utilise la mot clé SET

    alors ta fonction doit avoir la forme suivante :

    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
     
    CREATE FUNCTION dbo.test (s CHAR(50)) 
    RETURNS CHAR(20)
    AS
    begin
    	declare
    	temp CHAR(50)
    	begin	
    	IF (s LIKE '%Bus%') THEN SET temp = 'Bus'
    	ELSE IF (s LIKE '%Voiture%') THEN SET temp = 'Voiture'
    	ELSE SET temp = 'Avion';
    	end
    RETURN temp;
    end

  3. #3
    Membre habitué Avatar de denissay
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 103
    Points : 125
    Points
    125
    Par défaut
    Merci pour ta réponse killer69,
    J'ai encore quelques questions/problèmes:
    1. Qu'est ce que 'le nom du propriétaire de la base de donnée'(dbo dans ton exemple)
    2. 'un paramètre doit être précéder par @', or tu ne l'a pas utilisé dans ton exemple!
    3. J'ai toujours un message d'erreurs, meme apres les modifications :
    CREATE FUNCTION dbo.test (s CHAR(50))
    RETURNS CHAR(20)
    AS
    begin
    declare temp CHAR(50);
    begin
    IF (s LIKE '%Bus%') THEN SET temp = 'Bus';
    ELSE IF (s LIKE '%Voiture%') THEN SET temp = 'Voiture';
    ELSE SET temp = 'Avion';
    end
    RETURN temp;
    end

    SELECT nom, prenom, test(etat) AS moyen FROM fiche;

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 103
    Points : 28 394
    Points
    28 394
    Par défaut
    Bien que la déclaration de fonction soit définie dans la norme SQL 2003, son implémentation dans les SGBD diffère souvent de la norme et reste particulière à chaque éditeur.
    En précisant le SGBD que vous utilisez et sa version, les réponses proposées seront adaptées aux spécificités et limitations de celui-ci.
    Règles du forum Langage SQL à lire par tous

  5. #5
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 790
    Points : 3 056
    Points
    3 056
    Par défaut Juste un truc
    Vu la "simplicité" de la fonction ne pourrais-tu pas la remplacer avantageusement par un SELECT CASE ... WHEN ... THEN ... END

    Va voir : http://msdn2.microsoft.com/en-us/library/aa258235.aspx


    Il me semble que tu gagneras en clarté et en vitesse d'exécution.

  6. #6
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 105
    Points : 90
    Points
    90
    Par défaut
    oui t'as raison j'ai omets de mettre le @ faute de copie ton code :
    je répete ce code n'est valable pour que le SGBD SQL SERVER

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    CREATE FUNCTION dbo.test (@s CHAR(50)) 
    RETURNS CHAR(20)
    AS
    begin
    	declare
    	@temp CHAR(50)
    	begin	
    	IF (@s LIKE '%Bus%') THEN SET @temp = 'Bus'
    	ELSE IF (@s LIKE '%Voiture%') THEN SET @temp = 'Voiture'
    	ELSE SET @temp = 'Avion';
    	end
    RETURN @temp;
    end

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 879
    Points : 53 057
    Points
    53 057
    Billets dans le blog
    6
    Par défaut
    al1_24 :
    déclaration de fonction soit définie dans la norme SQL 2003
    non : SQL:1999

  8. #8
    Membre habitué Avatar de denissay
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 103
    Points : 125
    Points
    125
    Par défaut
    J'ai trouvé ,
    il a fallu d'abord autoriser l'ajout d'UDF ( je rappelle que j'utilise MYSQL) en éxecuttant :
    mysql> SET GLOBAL log_bin_trust_function_creators = 1;
    puis creer la fonctions, dans mon exemple:
    CREATE FUNCTION test (s CHAR(50))
    RETURNS CHAR(20)
    BEGIN
    IF (s LIKE '%Bus%') THEN
    RETURN 'Bus';
    ELSE IF (s LIKE '%Voiture%')
    RETURN 'Voiture';
    ELSE
    RETURN 'Avion';
    ENDIF;
    END;
    Merci à tous ceux qui m'ont aidé ...

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

Discussions similaires

  1. Comment faire un appel à une fonction Java en JSP
    Par persé dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 30/03/2013, 00h03
  2. [CR 10] appeler une fonction SQL
    Par yosboss dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 12/07/2011, 14h05
  3. comment appeler une fonction JAVA en JAVASCRIPT ?
    Par heleneh dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 13/09/2005, 12h21
  4. comment appeler une fonction JAVA en JAVASCRIPT ?
    Par heleneh dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/09/2005, 12h04
  5. Comment appeler une fonction JavaScript depuis Delphi ?
    Par Alfred12 dans le forum Web & réseau
    Réponses: 4
    Dernier message: 17/06/2005, 18h15

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