Jump to content


Marcel Costa

Member Since 27/03/2011
Offline Last Active 19/04/2011, 01:00
-----

Topics I've Started

Trigger After

15/04/2011, 00:22

Preciso pegar um valor que esta em uma outra tabela, para conctenar com a matricula
Ex.: Matricula antiga: 0123456
Matricula nova: sal0123456
Esse sal > vem do municipio "SALvador"

Para pegar o nome do Municipio do campus, fiz uma função, que segue abaixo:

CREATE OR REPLACE FUNCTION matricula_aluno(mat_aluno character varying)
RETURNS character varying AS
$BODY$
DECLARE
municipio character varying(20);
matriculanova character varying(20);
BEGIN
Select into municipio mun."MUN_NOME" From aluno a JOIN curso c
ON a.curs_cod = c.curs_cod
JOIN campus cm
ON c.camp_cod = cm.camp_cod
JOIN municipios mun
ON cm.mun_cod = mun."MUN_COD"
Where alun_matricula = mat_aluno;
select into municipio substring(municipio from 0 for 4);
select into municipio lower(municipio);
matriculanova := municipio||mat_aluno;
return matriculanova;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION matricula_aluno(character varying) OWNER TO postgres;

Essa função, faz todo um select, que chega ate o MUN_NOME, quando o alun_matricula = parametro passado pela função.
Essa função esta funcionando. Pega as 3 primeiras letras do municipio e conctena com o número de matricula.

Só que, essa função soh funciona se eu colocar a TRIGGER como AFTER. Mas, com a trigger em AFTER, a função não consegue inserir no registro.

O que eu posso fazer?

Criar Tabela A Partir Do Pg_Attribute De Outra Tabela

27/03/2011, 04:50

Esse codigo abaixo, tem algum a ver com o que eu estou querendo.
Quero gerar uma tabela Log_produtos, a partir de todos os campos da tabela Protudos:

create table log_produtos as
(SELECT a.attname
FROM pg_attribute AS a
JOIN pg_class AS c ON c.oid=a.attrelid AND c.relname !~ '^pg_'
JOIN pg_type AS t ON t.oid=a.atttypid
LEFT OUTER JOIN pg_attrdef AS d ON c.oid=d.adrelid
AND d.adnum=a.attnum
WHERE a.attnum>0
AND c.relname = 'produtos'
ORDER BY a.attnum);

Agradeço a todos!

IPB Skin By Virteq