Gofmam 0 Denunciar post Postado Setembro 30, 2008 Pessoa estou com um problema. Tenho um caso de controle de cinemas. Nele tenho as tabelas DIRETOR (cod_diretor,nome, Media_avaliacao, tot_filmes). Na outra tenho as DIRECOES(1..N) (cod_diretor,cod_filme,avaliacao). Criei uma package direcoes que faz os procedimentos para a multating table. Abaixo as triggers: -- BEFORE STATEMENT create or replace trigger direcoes_biuds before insert or update or delete on direcoes declare -- local variables here begin direcoes_pkg.limpar; dbms_output.put_line('BIUDS - Vetor inicializado'); end; -- AFTER INSERT UPDATE DELETE ROW create or replace trigger direcoes_aiudr after insert or update or delete on direcoes for each row declare -- local variables here begin if (inserting or updating) then-- alimentar vetor dbms_output.put_line('AIUDR - Alimentando vetor' ||:new.cod_diretor|| ' '||:new.avaliacao ); direcoes_pkg.inserir(:new.cod_diretor, :new.avaliacao); elsif(deleting) then if (:old.cod_diretor = :new.cod_diretor) and (:old.avaliacao = :new.avaliacao) then direcoes_pkg.inserir(:new.cod_diretor, :new.avaliacao); end if; end if; end; -- AFTER INSERT UPDATE DELETE STATEMENT create or replace trigger direcoes_aiuds after insert or update or delete on direcoes declare -- local variables here v_cd_diretor diretores.cod_diretor%type; v_aval diretores.media%type; v_tot_fil diretores.tot_filmes%type; i binary_integer; begin i := 0; direcoes_pkg.obter_dados(i,v_cd_diretor,v_aval,v_tot_fil); dbms_output.put_line('AIUDS - Obtencao de dados ' || v_cd_diretor || ' '||v_aval ||'' || v_tot_fil); while v_cd_diretor is not null loop update DIRETORES set TOT_FILMES = v_tot_fil, MEDIA = v_aval where COD_DIRETOR = v_cd_diretor; i := i + 1; direcoes_pkg.obter_dados(i,v_cd_diretor,v_aval,v_tot_fil); dbms_output.put_line('AIUDS - Atualizou dados ' || v_cd_diretor || ' '||v_aval ||'' || v_tot_fil); end loop; exception when no_data_found then dbms_output.put_line('AIUDS - Dados nao encontrado'); end; Os procedimentos das packages estão OK. O problema esta que nao atualiza os valores na tabela DIRETORES Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
NaPraia 12 Denunciar post Postado Setembro 30, 2008 não entendi o motivo de você ter criado três triggers, que eu mal pergunte, a primeira limpa o quê? você está fazendo a alteração na tabela diretores somento na terceira trigger, correto? pelo que eu me lembro não dá para alterar dados de outras tabelas em trigger, tente colocar esse comando numa procedure (ou package) e chame a procedure na trigger Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Setembro 30, 2008 A function obter_dados retorna os valores corretos. Já tentou ler a tabela com os valores retornados ? As tabelas estão no mesmo owner ? Pode ser problema de acesso/grant. Alguma constraint é violada ? Altere a última trg ... dbms_output.put_line('AIUDS - Atualizou dados ' || v_cd_diretor || ' '||v_aval ||'' || v_tot_fil); end loop; exception when no_data_found then dbms_output.put_line('AIUDS - Dados nao encontrado'); when others then dbms_output.put_line(SQLERRM(SQLCODE)'); end; Veja se retorna algum erro. Compartilhar este post Link para o post Compartilhar em outros sites
thiago_ 0 Denunciar post Postado Outubro 3, 2008 Conseguir resolver O problema por nao estar atualizando foi que eu so estava obtendo os dados que estava atualizando. Solução foi inserir os codigos no vetor, depois para cada cod fazer um select e atualizar os dados no After Statement Obrigado a todos Compartilhar este post Link para o post Compartilhar em outros sites