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