Em 08/10/06, Arthur Molina<[EMAIL PROTECTED]> escreveu:
> Amigos,
>
>   Estou passando por um problema que nao consigo resolver. Possuo varias
> tabelas. Algumas com campo varchar outras int ou numeric. E em algumas,
> apesar de estar setada como varchar ela possui dados tanto numericos
> quanto com palavras ou entao nulos. O fato eh o seguinte, o usuario tem
> a possibilidade de criar uma formula matematica envolvendo varias
> tabelas, mas a string da erro em algumas vezes justamente por causa
> dessa possibilidade de ter dados tambem alfanumericos.
>
> Um exemplo de string eh esse abaixo:
>
> SELECT tab01.V01 + tab02.V04 AS vx, a_bjaguaribe_mu.codigo AS id,
> a_bjaguaribe_mu.first_nome AS legenda
> FROM tab01, tab02, a_bjaguaribe_mu
> WHERE a_bjaguaribe_mu.codigo=tab01.codigo AND
> a_bjaguaribe_mu.codigo=tab02.codigo
>
>
> O que eu quero fazer eh que das duas uma:
>  - ou antes de fazer a soma, ele teste para checar se as variaveis sao
> numericas e se nao forem retorne nulo;
>  - ou que ele faca a soma e caso ela de erro retorne nulo, caso
> contrario retorne o valor da soma.
>
> Quero que aconteca isso pq os outros valores da tabela que nao forem
> texto ou nulos devem passa pela formula e mostrar o resultado.
> Nao sei se me fiz entender, mas eh isso. Ateh imaginei que poderia ser
> feito assim, baseado em dicas dos colegas que me enviaram:
>
> SELECT CASE WHEN funcaoteste(tab01.V01 + tab02.V04)=1 THEN tab01.V01 +
> tab02.V04 ELSE null AS vx, a_bjaguaribe_mu.codigo AS id,
> a_bjaguaribe_mu.first_nome AS legenda
> FROM tab01, tab02, a_bjaguaribe_mu
> WHERE a_bjaguaribe_mu.codigo=tab01.codigo AND
> a_bjaguaribe_mu.codigo=tab02.codigo
>
> Onde funcaoteste retornaria 1 caso a soma desse certo e qualquer outra
> coisa caso contrario.
>

nao sei se alguem tem alguma ideia melhor, no momemtno nao me vem
outra coisa a cabeca a nao ser uma funcaozinha com tratamento de
excecao, onde tenta fazerum cast do valor se der erro retorna null

ai fica mais facil o select inclusive pq quando vc chamar a funcao vc
passa o campo e ela retorna o valor inteiro para vc usar na soma ou
retorna 0 por exemplo assim ficaria assim veja

select get_value(v1) + get_value(v2) from test;

na get_value eh so sar tratamento de escessao para tentar fazer isso:

return cast($1 as integer);

se der erro

return 0;

assim se v1 for 1 e v2 for 4 o resultado eh 5
se v1 for 1 e v2 for 'coutinho' o resultado eh 1;



> Obrigado,
> artz
>
>
> _______________________________________________________
> Novidade no Yahoo! Mail: receba alertas de novas mensagens no seu celular. 
> Registre seu aparelho agora!
> http://br.mobile.yahoo.com/mailalertas/
>
>
> _______________________________________________
> Grupo de Usuários do PostgreSQL no Brasil
> Antes de perguntar consulte o manual
> http://pgdocptbr.sourceforge.net/
>
> Para editar suas opções ou sair da lista acesse a página da lista em:
> http://pgfoundry.org/mailman/listinfo/brasil-usuarios
>


-- 
Nabucodonosor Coutinho
Database Administrator
Accu Hosting - www.accuhosting.com
_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/

Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios

Responder a