Osvaldo Kussama escreveu:
Em 01/12/08, Luiz Henrique<[EMAIL PROTECTED]> escreveu:
  
Bom dia pessoal!!!

Um cliente solicitou que todo e qualquer texto gravado no BD fosse
gravado em letras maiúsculas.
Pesquisei um pouco sobre o assunto e não encontrei nada esclarecedor.
Gostaria de saber se existe alguma função do próprio banco para fazer
isso...

A solução (quebra galho) que desenvolvi até agora foi uma TRIGGER BEFORE
INSERT OR UPDATE que grava os novos valor em uma tabela temporária com a
mesma estrutura da tabela em que os dados estão sendo gravados,
identifica quais campos são Texto, faz um update destes campos com um
UPPER() e pega de volta esses valores atualizados para o NEW.
A função é esta:

CREATE OR REPLACE FUNCTION ftp_upper()
  RETURNS "trigger" AS
$BODY$
declare
r record;
comando text;

begin

create temp table maiuscula on commit drop as (select new.*);

for r in
(SELECT
    pg_attribute.attname as coluna
FROM
    pg_stat_all_tables
JOIN
    pg_attribute on pg_attribute.attrelid = pg_stat_all_tables.relid
JOIN
    pg_type on pg_attribute.atttypid = pg_type.oid
WHERE
    pg_stat_all_tables.schemaname = 'public'::name
AND
    pg_stat_all_tables.relname = TG_TABLE_NAME
AND
    pg_attribute.attstattarget < 0
AND
    pg_type.typoutput in ('textout', 'varcharout'))
loop

    comando := 'update maiuscula set ' || r.coluna || ' = upper(' ||
r.coluna || ');';
    execute comando;

end loop;

for r in (select * from maiuscula) loop

    new := r;

end loop;

return new;

end;$BODY$
  LANGUAGE 'plpgsql' VOLATILE;


Seria extremamente mais simples se existisse algo como "NEW :=
UPPER(NEW)" mas acho que infelizmente não existe.

Alguém conhece uma outra solução mais viável do que esta que encontrei???

    

Dê uma olhada no histórico mas, se não me falha a memória, sempre que
questões parecidas foram colocadas aqui na lista foi sugerido o uso de
pl/perl.

Osvaldo
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


  
Boa Tarde Osvaldo!!

Obrigado pelo dica!!
Como não tenho conhecimento em pl/perl vou ficar com a minha alternativa, mesmo pq é só um quebra-galho até ser implementado na aplicação (o que já foi providenciado).

Abraço!!
-- 
Luiz Henrique Livrari
Implantador de Sistemas Jr.
MSI SOLUÇÕES - Unidade Ourinhos
Av. Dr. Altino Arantes, 131 Sala 145 - 146
Centro - Ourinhos/SP - Brasil
Fone/Fax: +55 (14) 3324-8181
www.msisolucoes.com.br
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a