2009/9/30 Tiago Adami <[email protected]>
> Obrigado, Fabrízio. Gostaria de fazer mais duas perguntas a respeito da sua
> resposta:
>
> 1) Existem duas funções EXECUTE no PostgreSQL? Estive consultando a
> documentação em [1] e pelo o que entendi, é apenas para códigos preparados
> (prepared statements);
>
>
É isso ai... dentro de uma PL/PgSQL o EXECUTE tem uma função [1] e no que
diz respeito a "Prepared Statments" tem outra função [2].
> <corte>
>
> Compila e executa perfeitamente. Mas mesmo existindo o valor na tabela, o
> resultado de "FOUND" sempre é "FALSE". Alguma sugestão para contornar este
> comportamento?
>
>
O EXECUTE não atualiza a variável especial FOUND numa PL/PgSQL, veja em [3]
quando a variável FOUND é atualizada.
Mas você pode reescrever a tua PL da seguinte maneira para atender o
requisito:
CREATE OR REPLACE FUNCTION f_valor_existe( VARCHAR, VARCHAR, INTEGER )
RETURNS BOOLEAN AS
$f_valor_existe$
DECLARE
cNomeTabela ALIAS FOR $1;
cNomeColuna ALIAS FOR $2;
iValor ALIAS FOR $3;
cSQL TEXT;
lRetorno BOOLEAN DEFAULT false;
BEGIN
cSQL := 'SELECT EXISTS(SELECT 1 FROM '||cNomeTabela||' WHERE
'||cNomeColuna || ' = ' || CAST(iValor AS TEXT)||')';
RAISE INFO 'Comando SQL: %', cSQL;
EXECUTE cSQL INTO lRetorno;
RETURN lRetorno;
END;
$f_valor_existe$
LANGUAGE 'plpgsql' VOLATILE;
[1]
http://www.postgresql.org/docs/8.4/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN
[2] http://www.postgresql.org/docs/8.4/static/sql-execute.html
[3]
http://www.postgresql.org/docs/8.4/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-DIAGNOSTICS
Cordialmente,
--
Fabrízio de Royes Mello
>> Blog sobre TI: http://fabriziomello.blogspot.com
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral