Pular para o conteúdo
Visualizando 11 posts - 1 até 11 (de 11 do total)
  • Autor
    Posts
  • #98773
    Peterson
    Participante

      Bom 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?

      #98775
      Ishii
      Participante

        Olá,

        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

        #98777
        Peterson
        Participante

          Ishii, 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_ ='*')
          BEGIN

          UPDATE 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_sc1010

          Alguém viu algum erro?

          #98784
          burga
          Participante

            Qual erro que dá? O dblink é pra oracle ou via HS??

            #98793
            Peterson
            Participante

              o DBlink é pra Oracle. Após criar o trigger dá a mensagem que ele foi criado com erros de compilação.

              #98795
              burga
              Participante

                Talvez tenha alguma pista melhor do erro aqui:

                SELECT * FROM DBA_ERRORS
                WHERE UPPER(NAME) = 'BEFORE_SIGA_SC1010' AND TYPE = 'TRIGGER';

                #98796
                Ishii
                Participante

                  Olá,

                  Ou tente no SQL*Plus ou similar:

                  show errors trigger before_siga_sc1010 ;

                  E coloque o resultado aqui.

                  []s Ishii

                  #98816
                  Peterson
                  Participante

                    Ishii, 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!

                    #98817
                    Peterson
                    Participante

                      Ah sim, Burga, muito obrigado também pela ajuda!!! 😳

                      #98825
                      Ishii
                      Participante

                        Olá,

                        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

                        #98826
                        Peterson
                        Participante

                          Ishii, 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.

                        Visualizando 11 posts - 1 até 11 (de 11 do total)
                        • Você deve fazer login para responder a este tópico.