web-dev-qa-db-fra.com

Fonction Mysql renvoyant une valeur à partir d'une requête

je veux créer une fonction qui calcule une valeur à l'aide d'une requête et j'ai un problème pour retourner la valeur:

Raccourcie, ma requête est:

CREATE FUNCTION func01(value1 INT , monto DECIMAL (10,2)) RETURNS DECIMAL(10,2)
BEGIN
SET @var_name = 0;
select @var_name=if(value1 = 1,monto * table.divisa_dolar,table.monto *divisa_euro) from table where data_init = 1;
return @var_nam;
END

J'obtiens une erreur de syntaxe SQL.

Erreur SQL (1064): vous avez une erreur dans votre syntaxe SQL;

15
Cesar

En supposant que ce sont tous des noms génériques (la table ne sera pas un bon nom de table), le problème est que vous ne pouvez pas utiliser == pour la comparaison. Il manque également une syntaxe de clé (DECLARE, SELECT INTO, etc.).

Changez pour ceci:

CREATE FUNCTION func01(value1 INT , monto DECIMAL (10,2))
RETURNS DECIMAL(10,2)
DETERMINISTIC
BEGIN
  DECLARE var_name DECIMAL(10,2);
  SET var_name = 0;
  SELECT if(value1 = 1,monto *divisa_dolar,monto *divisa_euro) INTO var_name
    FROM table
    WHERE data_init = 1;
  RETURN var_name;
END

Fonctions et opérateurs de comparaison MySQL

Question connexe: égal égal à MYSQL

Aide sur la fonction: http://www.databasejournal.com/features/mysql/article.php/3569846/MySQL-Stored-Functions.htm

25
theChrisKent