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???

Obrigado!!!

-- 
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