À todos os interessados no assunto… eis o desfecho:
A única forma de fazer o que preciso seria através do que o MySQL chama de SQL Dinâmico (Dynamic SQL), ou seja, colocar numa variável um varchar com o comando do select e depois executar essa variável. Igual fazemos no fonte do java.
Pra fazer isso usando MySQL, teria que ser da seguinte forma (seguindo o meu exemplinho de antes…):
[code] SET var_formula = ‘(15.0-13.5)’; – uma fórmula qualquer
SET @sql = CONCAT(‘select CAST(’, var_formula, ’ as decimal(13,3)) as preco’);
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;[/code]
O comando acima funciona bem, exceto por um detalhe: o MySQL, por suas limitações que eu não sei explicar o motivo, não permite o uso de SQLs dinâmicos em functions ou triggers. Ou seja, só pode ser usado em stored procedures.
Eu inclusive testei em SP e realmente funciona. Pra poder ver o resultado (já que SPs não retornam valor), eu invés de “select” usei um comando de “update” pra que fosse atualizado um campo de uma tabela e eu poder ver o resultado. E deu certo.
Porém, pra mim, uma SP no caso não serve pra nada. E nem vou ficar entrando em detalhes do pq já que não quero mais polêmicas nesse post.
Eu passei por muitos sites, dicas, tutoriais, etc, etc… não compensa listar tudo aqui e nem vou lembrar e achar todos.
Dois mais simples e resumidos que posso listar são: http://forums.mysql.com/read.php?60,27979,30437#msg-30437 e http://forums.mysql.com/read.php?10,398743,398743#msg-398743
Eu precisava fazer essa alteração pra mais de um BD, trabalho com MySQL, SQL Server e Oracle.
Pro MySQL o desfecho foi esse dai. Pro SQL Server, pelo que fui lendo enquanto pesquisava pro MySQL, parece ser totalmente possível e simples de ser feito (veja bem, eu disse que “parece”, pq eu não testei). Já sobre o Oracle eu não encontrei nada (mas tb, eu não estava procurando né…).
Obrigada à todos que ajudaram.
Renata