2008/6/23 Emerson Casas Salvador <[EMAIL PROTECTED]>:
> Yoshio escreveu:
>> Olá pessoal.
>> Como faço para concatenar vários campos (linha) delimitados com algum
>> caracter em uma string dentro de uma trigger? O problema está no fato
>> de não saber a quantidade de campos (nem os tipos) que seriam
>> concatenados, pois a idéia é concatenar qualquer linha de qualquer
>> tabela. Gostaria de fazer isto sem ter que fazer selects em tabelas
>> catalogs nem usar loops. Existe alguma função para fazer isso?
>>
>> So para informar, a idéia é poder registrar as alterações nas tabelas
>> como um histórico simples, indicando o se foi insert, update ou
>> delete. Estava pensando em aumentar o nivel do log do postgre mas acho
>> que iria ficar muito pesado. Estou aceitando idéias também. Quem puder
>> ajudar, obrigado
> ...Gostaria de fazer isto sem ter que fazer selects em tabelas catalogs
> nem usar loops...
> qual o problema em fazer selects em catalogs ou loops?
>
> acho que vc está procurando alguma coisa +- pronta, é isso?
Isso mesmo. Queria alguma coisa tipo:
CONCATENA_CAMPOS(new.*, ';');
O retorno seria alguma coisa assim:
'123;Campo1;Campo2;Campo3...'
A função está com esta estrutura:
IF TG_OP = 'DELETE' THEN
INSERT INTO HISTORICO(Nome da tabela, Operacao, Dados) VALUES
(TG_TABLE_NAME, 'D', CONCATENA_CAMPOS(old.*, ';'));
RETURN old;
ELSIF TG_OP = 'INSERT' THEN
INSERT INTO HISTORICO(Nome da tabela, Operacao, Dados) VALUES
(TG_TABLE_NAME, 'I', CONCATENA_CAMPOS(new.*, ';'));
RETURN new;
ELSIF TG_OP = 'UPDATE' THEN
INSERT INTO HISTORICO(Nome da tabela, Operacao, Dados) VALUES
(TG_TABLE_NAME, 'U', CONCATENA_CAMPOS(new.*, ';'));
RETURN new;
END IF;
E existisse essa função "CONCATENA_CAMPOS" ajudaria bastante, mas se
não der nenhum problema em utilizar outros selects e loops, beleza.
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral