[quote=drsmachado][code]
mysql> SELECT ((10.00 - 4.50)*30/100);
±------------------------+
| ((10.00 - 4.50)*30/100) |
±------------------------+
| 1.650000 |
±------------------------+
1 row in set (0.00 sec)
mysql>
[code]
Oh, compilou… Oh, a sintaxe existe…
Mais uma vez eu lembro, ninguém é obrigado a responder. Os que respondem apenas tentam ajudar. Se a ajuda não é benvinda ou não está da forma que você quer, simplesmente vá pesquisar ou tentar fazer de outra forma.
Aliás, só para constar, com as minhas alterações, essa sua funçãozinha rodou
DELIMITER $$
DROP FUNCTION IF EXISTS `teste`.`func_guj` $$
CREATE DEFINER=`root`@`%` FUNCTION `func_guj`() RETURNS decimal(13,3)
DETERMINISTIC
BEGIN
DECLARE var_formula varchar(500);
DECLARE ret_preco decimal(13,3);
DECLARE cur CURSOR FOR
select CAST(var_formula as decimal(13,3)) as preco;
SET var_formula = (SELECT (10.00-4.50)*30/100);
OPEN cur;
FETCH cur INTO ret_preco;
CLOSE cur;
RETURN ret_preco;
END $$
DELIMITER ;
mysql> select func_guj();
±-----------+
| func_guj() |
±-----------+
| 1.650 |
±-----------+
1 row in set (0.05 sec)[/quote]
Amigo, vou tentar denovo te explicar, eu não tenho a expressão! Ela está dentro de um VARCHAR, então tem APÓSTROFOS. Do jeito que vc fez claro que funciona, mas eu não tenho isso ai! Por isso estou dizendo que vc não está entendendo. Vc fez isso:
[code]DELIMITER $$
DROP FUNCTION IF EXISTS teste
.func_guj
$$
CREATE DEFINER=root
@%
FUNCTION func_guj
() RETURNS decimal(13,3)
DETERMINISTIC
BEGIN
DECLARE var_formula varchar(500);
DECLARE ret_preco decimal(13,3);
DECLARE cur CURSOR FOR
select CAST(var_formula as decimal(13,3)) as preco;
SET var_formula = (SELECT (10.00-4.50)*30/100);
OPEN cur;
FETCH cur INTO ret_preco;
CLOSE cur;
RETURN ret_preco;
END $$
DELIMITER ;[/code]
Mas o que eu tenho é isso:
[code]DELIMITER $$
DROP FUNCTION IF EXISTS teste
.func_guj
$$
CREATE DEFINER=root
@%
FUNCTION func_guj
() RETURNS decimal(13,3)
DETERMINISTIC
BEGIN
DECLARE var_formula varchar(500);
DECLARE ret_preco decimal(13,3);
DECLARE cur CURSOR FOR
select CAST(var_formula as decimal(13,3)) as preco;
SET var_formula = (SELECT ‘(10.00-4.50)*30/100’); – tá vendo os APÓSTROFOS!!!
OPEN cur;
FETCH cur INTO ret_preco;
CLOSE cur;
RETURN ret_preco;
END $$
DELIMITER ;[/code]
Entendeu agora pq não funciona? Sei bem que ngn é obrigado a responder. E páre de se fazer de ofendido, eu apenas tentei te mostrar que não é isso, páre de se gastar que não é isso.
E não se preocupe, estou aqui há mais tempo que vc e não faço perguntas que eu não tenha pesquisado antes. A prova de que minha dúvida não é simples e encontrável em uma pesquisa qualquer é que ngn até agora se manifestou pra resolvê-la.
Depois me perguntam pq eu fico tempos sem aparecer no GUJ. Realmente… isso aqui não é mais o que era antes… 