Marcel Costa Postado Abril 15, 2011 Denunciar Share Postado Abril 15, 2011 Preciso pegar um valor que esta em uma outra tabela, para conctenar com a matriculaEx.: Matricula antiga: 0123456 Matricula nova: sal0123456Esse 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$DECLAREmunicipio character varying(20);matriculanova character varying(20);BEGINSelect into municipio mun."MUN_NOME" From aluno a JOIN curso c ON a.curs_cod = c.curs_codJOIN campus cm ON c.camp_cod = cm.camp_codJOIN 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 só 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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Kakao Postado Abril 15, 2011 Denunciar Share Postado Abril 15, 2011 (editado) Marcel, eu sei que a sua pergunta não é esta, mas eu acho uma péssima idéia criar a matricula concatenando com o nome do município.Se é necessário que o município faça parte da chave primária (o que também não é uma grande idéia) então crie a chave primária combinando os dois campos: matricula e id do município com o id do município fazendo referência à tabela de municípios:create table municipio ( id integer primary key, nome text ) ; create table aluno ( matricula integer not null, municipio_id integer references municipio (id), nascimento_data date not null, primary key (municipio_id, matricula) ) ; Editado Abril 15, 2011 por Kakao Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Marcel Costa
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 só 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?
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.