Boa noite a todos! Fabiano,
> 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? Sim, o retorno deve ser os registros do select. No caso de alguém passar uma query multipla, acredito que o mais fácil seria levar em conta apenas a última (ignorando os retornos anteriores). Até por isso comentei que pode funcionar de um jeito ou de outro (retornando tudo ou apenas a última consulta, o que for mais fácil para definir). No caso de insert, update ou delete, não é necessário retornar nada. > O retorno como está não funciona para trazer vários registros, para isso > você deve usar um setof com record ou type. Sim, estou ciente disso. Justamente por isso que entrei em contato com o grupo, não sei como prosseguir. Tentei definir de diversos modos diferentes a combinação de setof, record, entre outros, mas sempre recebia algum erro. Não entendi bem a sintaxe que precisa ser definida para receber o retorno em tabela. Queria algo como adicionar os resultados da query numa variável, e retornar essa variável (isso é apenas uma explicação, não sei se é possível em pgplsql). Infelizmente, não tenho como criar uma função para criação das querys. Já existe um sistema em funcionamento, com diversos consultas "gigantescas" que tornam a ideia inviável. O único modo de fazer isto é definindo retorno por type? Quais as exigências deste tipo? Não existe algum modo mais prático, sem nenhum tipo de "filtro", para retornar uma tabela de uma consulta? Desde já, agradeço pela ajuda. Abraços a todos. Atenciosamente, Pedro Cavalheiro Em 1 de setembro de 2011 20:01, Fabiano Machado Dias <[email protected]> escreveu: > 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 > > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
