Para o PostgreSQL poder chamar a sua função ele deve calcular o valor de todos os parâmetros, então sua função csw() não vai funcionar para isso. O correto é usar CASE ... WHEN mesmo: SELECT CASE WHEN c1 <> 0 && c2 <> 0 THEN c1/c2 ELSE 0 END FROM tabela; Não como evitar o processamento prévio dos parâmetros, a não ser que você passe uma fórmula como caracter para uma função plpgsql, e essa função execute um PERFORM. Atenciosamente, Márcio Gil.
_____ De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Em nome de Charles Viana Enviada em: quarta-feira, 9 de maio de 2007 11:25 Para: [email protected] Assunto: [pgbr-geral] Função para substituir Case when fiz a seguinte função CREATE OR REPLACE FUNCTION csw(boolean, anyelement, anyelement) RETURNS anyelement AS 'select case when $1 then $2 else $3 end;' LANGUAGE 'sql' VOLATILE; Quando eu passo os paramentros select csw( c1 + c2 > 0 ,c1/c2,0) from tabela; gera o sequinte erro ERROR: division by zero SQL state: 22012 c1 e c2 são campos de uma tabela e as vezes os dois estão zerados ele teria que executar a codição e verificar que c1 + c2 não é maior que 0 e retorna zero. O que eu gostaria de fazer é ao inves de fazer case a=a when then a else b end; eu gostaria de subustuir a funcao case para que ficasse assim csw(a=a,a,b) se qlguem puder me ajudar grato.
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
