Ir para o conteúdo
camoes

Trigger update

Mensagens Recomendadas

camoes

Boas.

Precisava de fazer um Trigger que atualize o estado dum projeto quando se alterar o estado da ultima atividade para concluída.

(projecto)

pat_projeto:

(pk)is_projeto,
id_pat,
estado
, designscao, orcamento, data_fim_prevista, valor_final, data_registo

atividade

(pk)id_atividade,(fk) id_projeto,
estado, tipo_atividade, data_inicio, data_fim, data_estado, custo_previsto_hora, data_registo

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jsWizard

Isto é um pedido de ajuda ou uma encomenda? :D

É que não estou a ver dúvida nenhuma.. apenas "uma encomenda". Porque não tentas fazer o trigger e depois colocar dúvidas se tiveres problemas.

Para aprender as fazer as coisas é preciso ter um bocadinho de força de vontade e tentar.. ler um bocado de documentação.. ver exemplos, tentar entender os exemplos. Pedir a outros que façam o trabalho por ti não te vai ensinar nada..

inté!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
camoes

ja fiz n versões do triger e nunca dá certo.

a ultima:

create or replace trigger trg_ponto_8
 after update on atividade
 for each row

 begin

 update pat_projeto set estado=4
 where pat_projeto.id_projeto is in (select ID_PROJETO from vw_triger_8)
 and pat_projeto.id_projeto = atividade.id_projeto;

end;
/
select * from vw_triger_8;

CREATE view VW_TRIGER_8 AS
SELECT
*
FROM
pat_projeto
where
id_projeto NOT IN(SELECT id_projeto
                   FROM atividade
                   where ESTADO <>4);

SELECT
*
FROM
atividade;

o problema e que n entendo o que é que estpu a fazer mal.. mas nenhum procedure triger etc finciona

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jsWizard

tens de estudar um bocado mais a documentação do Oracle :D

CREATE OR REPLACE TRIGGER trg_ponto_8
after UPDATE ON atividade
FOR each ROW

BEGIN

--se a actividade ficou concluida, então concluir o projecto (troca os ??? pelo valor correcto.. claro!)
if (:new.estado = ???) then
--antes deste update tb deves precisar de fazer um select para contar se existem actividades por terminar.. e só se não existir nenhuma, então fazer o update

UPDATE pat_projeto a
SET a.estado = 4
WHERE a.id_projeto = :new.id_projecto;
end if;

END;

Penso que já te dei umas pistas para ires no bom caminho! Pelo menos pelo que entendi.

Bom trabalho!

Já agora.. deves dar nomes com significados os objectos, variáveis, etc.. chamar ao trigger trg_ponto_8 não me parece que seja um nome muito jeitoso :D

inté!

WTF ??

pahh.. o código ficou todo xinado.. com tags de e o camandro.. o editor passou-se.. pah.. não tenho paciência para limpar isto.. safa-te.. ou pede a algum admin do forum que limpe! LOL

Editado por Rui Carlos
Código corrigido.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.