Em 1/9/2011 17:49, Pedro Cavalheiro escreveu:
Opa!Segue a função atual: Ela pode receber todo tipo de consulta, desde select, insert, delete... enfim, qualquer comando, sendo que também é possível que ela receba mais de 1 ao mesmo tempo. ex. "insert into tabela (coluna) values ('valor'); select * from tabela;" Neste caso, o que importa para o retorno é apenas o select (não sei se isso faz diferença para a complexidade). Os outros parâmetros são gravados em uma tabela que é consultada em uma trigger disparada em INSERT, UPDATE, ou DELETE. (essa parte está funcionando perfeitamente) CREATE OR REPLACE FUNCTION log_user ( sql text, id_user integer, cod_deck integer ) RETURNS text AS $body$ DECLARE USUARIO INTEGER := id_user; DECK INTEGER := cod_deck; BEGIN PERFORM ul.id FROM log_usuario ul LIMIT 1 FOR UPDATE; UPDATE log_usuario SET id=USUARIO, id_deck=DECK; execute sql; return 'ops ^^'; END; $body$ LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER COST 100; Desde já, agradeço pela ajuda. Atenciosamente, Pedro Cavalheiro
O seu retorno seria os registros do "select"? E se alguém passar um passar um comando "select * from tabela; insert into tabela..." ? O retorno seria o que?
O retorno como está não funciona para trazer vários registros, para isso você deve usar um setof com record ou type.
Uma record para você não adianta porque na chamada você precisa saber o retorno da pl.
Já um type é mais flexível mas você precisaria definir ele antes, então você poderia criar ele antes usando a estrutura do select, mas isso é algo bem complicado, vai ter que pensar muito bem, tratar erros, saber os tipos de campos ou talvez consultar no catálogo.
Eu uso uma pl que escreve os comandos, mas faço diferente, passo os campos e os conteúdos por array, o nome da tabela e a ação, daí ela monta a query e executa.
Dá uma olhada na documentação: http://www.postgresql.org/docs/9.0/interactive/plpgsql-control-structures.html Abraço, Fabiano Machado Dias * Português - detectado * Inglês * Português * Inglês * Português <javascript:void(0);>
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
