Opa,
fala drsmachado. Foi mal cara, não prestei atenção nas suas respostas. Erro meu! :oops:
Poxa Renata, realmente é um problema não trivial. Talvez se criasse esse mesmo post no MySQL Forums.
Mesmo assim, qualquer novidade tento novamente.
Abs!
Opa,
fala drsmachado. Foi mal cara, não prestei atenção nas suas respostas. Erro meu! :oops:
Poxa Renata, realmente é um problema não trivial. Talvez se criasse esse mesmo post no MySQL Forums.
Mesmo assim, qualquer novidade tento novamente.
Abs!
[quote=newbcc] Olá Renata,
eu não tenho alternativa, realmente a substituição não é válida e não faria sentido.
O quê eu estou pensando nesse momento é se existe a possibilidade de você, ao invés de usar essa expressão toda ‘10.00 - 4.50…’, enviar o resultado direto dela para a sua função, pois assim você estaria trabalhando direto com o double.
Se você entendeu a minha intenção, é possível para você fazer essa implementação?
Abs![/quote]
Não tenho… veja só, minha função que monta a tal fórmula. O que chega pra minha função é uma fórmula assim por ex: "CAMPO1 + CAMPO2 / (CAMPO3 * CAMPO4) + CAMPO5 / CAMPO6 * 7 / 3.45"
Ou seja, chega uma fórmula qq.
Eu substituo nessas fórmulas cada um desses campos pelos valores que terei que usar e no final, chego a um varchar com a a expressão a ser resolvida. É a minha tal var_formula.
Tendeu?
Na verdade, o que eu queria era simplesmente macro-substituição. Os mais velhos sabem do que estou falando.
Seria por ex, igual qdo no iReport invés de usar $P usamos $P!, ou seja, invés de concatenar uma variável, concatenamos só o conteúdo dela.
Pensei que nos banco de dados teríamos algo similar.
À 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
Só um detalhe…é possível retornar valores via procedure sim. utilizando nos parametros :
(in entrada varchar(5), out saida varchar(5))
Garota chata paracaralho!
Qual a função deste comentário?
O que isto contribui para a comunidade?
Contribui tanto quanto as suas tentativas de ajuda para com a dúvida dela.
