[RESOLVIDO] Function Mysql com substituição no select  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

Bom dia,

Tenho uma function no MySQL onde no começo dela, entre outras coisas, tenho as declarações:


Num dado momento, depois de várias substituições, etc, etc.. a minha var_formula fica com um conteúdo mais ou menos assim (claro que, cada vez que dependendo da fórmula é o conteúdo, mas um exemplo):

var_formula = '(10.00-4.50)*30/100'

E ai, eu gostaria que ao abrir o meu cursor, ele resolvesse essa expressão, então faço isso:


A execução dá erro, esse erro:

Incorrect decimal value: '' for column '' at row -1


Eu entendi o que está acontecendo, na verdade, qdo mando abrir o cursor, ele tá fazendo isso:


Quando o que eu queria era que ele fizesse isso:



Perceberam a sutileza dos MALDITOS apóstrofos?!

Enfim, eu entendi o que acontece, mas não estou achando forma de resolver. Alguém sabe como faço pra que ele substitua minha var_formula no select invés de usar como um valor varchar?

Se tiver algum ex clippeiro de plantão, pra resumir, eu diria que preciso de macro-substituição. Mas como?!

Grata,
Renata








This message was edited 3 times. Last update was at 13/05/2011 10:39:16


[]'s, Renata
[Email]
drsmachado
GUJ Expert

Membro desde: 25/09/2010 12:54:06
Mensagens: 3986
Localização: Curitiba / São José dos Pinhais - PR
Offline

Não seria mais simples tratar a fórmula diretamente na function e retornar um bigdecimal?

Rumo aos 4000
"Os homens de verdade assumem suas responsabilidades e culpas. Esquivar-se e dar desculpas é atitude dos tolos, que preferem não se comprometer".

Lugar de perguntar é no fórum!
Não respondo via MP
Não respondo por Email
Não respondo por IM
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

drsmachado wrote:Não seria mais simples tratar a fórmula diretamente na function e retornar um bigdecimal?


É justamente o que eu estou tentando fazer.

[]'s, Renata
[Email]
drsmachado
GUJ Expert

Membro desde: 25/09/2010 12:54:06
Mensagens: 3986
Localização: Curitiba / São José dos Pinhais - PR
Offline

Bem, a primeira coisa a fazer é alterar o tipo de retorno.
A segunda, é criar, dentro da function, uma forma de resolver a fórmula.
Se você puder postar a function...

Rumo aos 4000
"Os homens de verdade assumem suas responsabilidades e culpas. Esquivar-se e dar desculpas é atitude dos tolos, que preferem não se comprometer".

Lugar de perguntar é no fórum!
Não respondo via MP
Não respondo por Email
Não respondo por IM
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

drsmachado wrote:Bem, a primeira coisa a fazer é alterar o tipo de retorno.
A segunda, é criar, dentro da function, uma forma de resolver a fórmula.
Se você puder postar a function...


O tipo do retorno já é um decimal(13,3), não preciso alterá-lo, como vc pode ver nas declarações que postei:



Qto a segunda coisa, é exatamente por causa disso que postei aqui. Como fazer?

Sobre postar a function, o que interessa da function para demonstrar/resolver o problema eu já postei. É só juntar as partes. Vou colocar denovo o que já coloquei, desta vez tudo junto pra vc entender:

[]'s, Renata
[Email]
drsmachado
GUJ Expert

Membro desde: 25/09/2010 12:54:06
Mensagens: 3986
Localização: Curitiba / São José dos Pinhais - PR
Offline

Tenta alterar o SET para

Rumo aos 4000
"Os homens de verdade assumem suas responsabilidades e culpas. Esquivar-se e dar desculpas é atitude dos tolos, que preferem não se comprometer".

Lugar de perguntar é no fórum!
Não respondo via MP
Não respondo por Email
Não respondo por IM
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

drsmachado wrote:Tenta alterar o SET para


Amigo, é óbvio que isso não funcionará.

Por favor, alguém tem alguma idéia?

[]'s, Renata
[Email]
drsmachado
GUJ Expert

Membro desde: 25/09/2010 12:54:06
Mensagens: 3986
Localização: Curitiba / São José dos Pinhais - PR
Offline

Testou?
Senão, vai lá no prompt do mysql, entra com usuário e senha e executa este comando

e verifica qual a saída.
Ela será a mesma para a tua funçãozinha

Rumo aos 4000
"Os homens de verdade assumem suas responsabilidades e culpas. Esquivar-se e dar desculpas é atitude dos tolos, que preferem não se comprometer".

Lugar de perguntar é no fórum!
Não respondo via MP
Não respondo por Email
Não respondo por IM
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

drsmachado wrote:Testou?
Senão, vai lá no prompt do mysql, entra com usuário e senha e executa este comando

e verifica qual a saída.
Ela será a mesma para a tua funçãozinha


Eu sei! Mas eu não tenho o conteúdo dessa forma. Como já falei, minha fórmula está dentro de um VARCHAR, então tem apóstrofos.

E nem que eu tivesse, o comando:



Nem compila a function no MySQL pq essa sintaxe não existe!

E vc? TESTOU na function que eu passei antes de postar?!

Amigo, vc não está entendendo o problema e está indo pra algo que não tem nada haver...


[]'s, Renata
[Email]
drsmachado
GUJ Expert

Membro desde: 25/09/2010 12:54:06
Mensagens: 3986
Localização: Curitiba / São José dos Pinhais - PR
Offline


mysql> select func_guj();
+------------+
| func_guj() |
+------------+
| 1.650 |
+------------+
1 row in set (0.05 sec)

Rumo aos 4000
"Os homens de verdade assumem suas responsabilidades e culpas. Esquivar-se e dar desculpas é atitude dos tolos, que preferem não se comprometer".

Lugar de perguntar é no fórum!
Não respondo via MP
Não respondo por Email
Não respondo por IM
jaziel.rc
JavaChild

Membro desde: 19/08/2010 12:02:02
Mensagens: 141
Offline

Ia responder praticamente a mesma coisa que o drsmachado colocou.
Primeiro compila e funciona sim a proc como ele colocou.
Segundo, uma educação ajuda bastante, o cara vem ajudar com boa vontade, pode estar em N situações (dando um tempo do trabalho, acabou de acordar, etc...) e pode não ter entendido como tu queria ou como ACREDITA que se expressou, um pouco de bom senso sempre é bem vindo, mesmo para as próximas respostas se necessárias.
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

drsmachado wrote:
mysql> select func_guj();
+------------+
| func_guj() |
+------------+
| 1.650 |
+------------+
1 row in set (0.05 sec)



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:



Mas o que eu tenho é isso:



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...

[]'s, Renata
[Email]
drsmachado
GUJ Expert

Membro desde: 25/09/2010 12:54:06
Mensagens: 3986
Localização: Curitiba / São José dos Pinhais - PR
Offline

RenataFA wrote:
Sobre postar a function, o que interessa da function para demonstrar/resolver o problema eu já postei. É só juntar as partes. Vou colocar denovo o que já coloquei, desta vez tudo junto pra vc entender:

Realmente, não havia "tudo o que interessa da function".
A única solução que vejo para isto é desmembrar o parâmetro e montar a consulta dinamicamente.

Vai dar muito mais trabalho, mas pode funcionar.

E não, isso aqui não é mais como era antigamente, faltam pessoas que conheceram isto aqui desde o seu começo, faltam pessoas com interesse em responder e não apenas colocar discussões sobre esta ou aquela empresa, sobre isto ou aquilo, faltam pessoas que ajudem a elevar o nível das respostas aqui.
Afinal, os mais "antigos" sempre esquecem que existem novatos precisando de respostas...

Rumo aos 4000
"Os homens de verdade assumem suas responsabilidades e culpas. Esquivar-se e dar desculpas é atitude dos tolos, que preferem não se comprometer".

Lugar de perguntar é no fórum!
Não respondo via MP
Não respondo por Email
Não respondo por IM
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

drsmachado wrote:
RenataFA wrote:
Sobre postar a function, o que interessa da function para demonstrar/resolver o problema eu já postei. É só juntar as partes. Vou colocar denovo o que já coloquei, desta vez tudo junto pra vc entender:

Realmente, não havia "tudo o que interessa da function".
A única solução que vejo para isto é desmembrar o parâmetro e montar a consulta dinamicamente.

Vai dar muito mais trabalho, mas pode funcionar.

E não, isso aqui não é mais como era antigamente, faltam pessoas que conheceram isto aqui desde o seu começo, faltam pessoas com interesse em responder e não apenas colocar discussões sobre esta ou aquela empresa, sobre isto ou aquilo, faltam pessoas que ajudem a elevar o nível das respostas aqui.
Afinal, os mais "antigos" sempre esquecem que existem novatos precisando de respostas...



rs... Aha! Agora vc releu e viu que não tinha nada haver né? E vai falar que eu não tinha dito tudo? rs... ok ok... que seja, se isso te deixa menos magoado, pra mim não muda nada.

Vc tem total razão! Faltam msm pessoas pra ajudar a elevar o nível de respostas, concordo plenamente. E tenho a sensação de que cada dia vão faltar mais!

E qto "aos que esquecem dos novatos precisando de respostas", eu nem vou falar nada. Afinal, vc nem me conhece, não tem culpa. E não preciso responder pq quem me conhece, me manda e-mail, me manda msg em private, etc, etc... sabe do que se precisa saber.

Só achei feio vc ser tão apelativo. Mas cada um é cada um né?

A gente tenta explicar uma dúvida, e arranja um inimigo. Ruim isso.

Qto a minha dúvida, deixa pra lá. Vou tentar em outro lugar, aqui não dá mais, ngn mais vai responder.

Obrigada à todos e aos moderadores: podem fechar o tópico, não serviu pra nada msm.

Grata,
Renata


[]'s, Renata
[Email]
jaziel.rc
JavaChild

Membro desde: 19/08/2010 12:02:02
Mensagens: 141
Offline

???
Tá tenso isso...
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team