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
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral