- Este tópico contém 10 respostas, 3 vozes e foi atualizado pela última vez 14 anos, 11 meses atrás por
Peterson.
-
AutorPosts
-
6 de abril de 2011 às 3:27 pm #98773
Peterson
ParticipanteBom dia amigos,
É possível eu criar um trigger em um banco de dados que dependendo do DML executado em uma tabela ele atualize uma outra tabela em um outro banco de dados através de dblink?
Há restrições para isso?
6 de abril de 2011 às 5:36 pm #98775Ishii
ParticipanteOlá,
Peterson, é possível sim. A única restrição seria o DBlink falhar por qualquer razão e isso não será tratado em nenhuma exception…
[]s Ishii
6 de abril de 2011 às 9:10 pm #98777Peterson
ParticipanteIshii, obrigado pela ajuda!
Posso abusar e pedir pra me ajudar a criar o TRIGGER?
É o seguinte, tenho uma tabela em um banco e quando essa for atualizada em certa coluna, quero mudar um campo numa outra tabela em outro banco.
Tipo, quando a coluna D_E_L_E_T_ for atualizada para o conteúdo ‘*’, quero alterar o status de um registro correspondente em outra tabela que fica em um banco de dados diferente.
Tenho um dblink chamado DBLSGT e fiz o seguinte trigger que dá erro ao criá-lo.
CREATE TRIGGER before_siga_sc1010
BEFORE UPDATE OF D_E_L_E_T_
ON sc1010
FOR EACH ROW WHEN (new.D_E_L_E_T_ ='*')
BEGINUPDATE solicitacao@DBLSGT
SET status=5
WHERE cdfilial = (CASE :old.C1_FILIAL
WHEN '01' THEN 25
WHEN '02' THEN 02
WHEN '03' THEN 10
WHEN '04' THEN 23
WHEN '05' THEN 16
END)
AND
NUMERO_SOLICITACAO = TO_NUMBER(:old.C1_NUM||TO_CHAR(s.cdfilial));
END before_siga_sc1010Alguém viu algum erro?
7 de abril de 2011 às 12:28 am #98784burga
ParticipanteQual erro que dá? O dblink é pra oracle ou via HS??
7 de abril de 2011 às 7:18 pm #98793Peterson
Participanteo DBlink é pra Oracle. Após criar o trigger dá a mensagem que ele foi criado com erros de compilação.
7 de abril de 2011 às 7:51 pm #98795burga
ParticipanteTalvez tenha alguma pista melhor do erro aqui:
SELECT * FROM DBA_ERRORS
WHERE UPPER(NAME) = 'BEFORE_SIGA_SC1010' AND TYPE = 'TRIGGER';7 de abril de 2011 às 7:57 pm #98796Ishii
ParticipanteOlá,
Ou tente no SQL*Plus ou similar:
show errors trigger before_siga_sc1010 ;E coloque o resultado aqui.
[]s Ishii
11 de abril de 2011 às 5:46 pm #98816Peterson
ParticipanteIshii, muito obrigado pela ajuda cara. Precisava descobrir como verificar os erros ocorridos na compilação da trigger.
O erro ocorria por problemas de permissão na tabela que sofreria o update.
Não lembrava mais dessa view DBA_ERRORS.
Obrigado mais uma vez!
11 de abril de 2011 às 5:49 pm #98817Peterson
ParticipanteAh sim, Burga, muito obrigado também pela ajuda!!! 😳
12 de abril de 2011 às 5:20 am #98825Ishii
ParticipanteOlá,
Peterson, não tem problema, afinal estamos aqui para isso 8) . Estou chutando, mas acho que faltou o owner na DBLink? Somente isso para erro na criação…
[]s Ishii
12 de abril de 2011 às 3:26 pm #98826Peterson
ParticipanteIshii, na verdade o que ocorreu foi o seguinte. Ao criar o dblink, o fiz com um usuário com privilégios de leitura e delete na tabela que sofreria o updtate.
Durante a criação do trigger ocorria o erro. Pesquisando, vi que o erro que o Oracle informava na criação era de não existir a tabela. Após dar privilégio de update nela, o trigger foi criado sem erros.
Na verdade comi mosca né? Porque como queria criar um trigger que faz update sem dar esse grant no objeto rsrsrsr.
-
AutorPosts
- Você deve fazer login para responder a este tópico.