Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

marcel Costa

Trigger AFTER

Recommended Posts

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

ao invez de você passar pra essa funcao o codigo do aluno, você teria q passar o codigo da tb CURSO pra você verificar qual o munic desse relacionamento

 

Select mun."MUN_NOME"  
into municipio 

From curso c 
JOIN campus cm ON 
   (c.camp_cod = cm.camp_cod)
JOIN municipios mun ON 
   (cm.mun_cod = mun."MUN_COD")
Where 
  c.curs_cod = XXXX;

 

dessa forma você poderia deixar a funcao usando na trigger BEFORE, pq como você esta inserindo , esse registro ainda nao existe e sua consulta

nao vai funcionar, agora se você pegar o campo NEW.curs_cod na trigger BEFORE você consegue fazer a mesma consulta

so q sem vincular ao aluno, que ainda nao foi inserido

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.