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

Responder a