Jump to content
camoes

Trigger update

Recommended Posts

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

Share this post


Link to post
Share on other 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é!

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Edited by Rui Carlos
Código corrigido.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.