Pular para o conteúdo
Visualizando 8 posts - 1 até 8 (de 8 do total)
  • Autor
    Posts
  • #80058
    Anônimo

      Pessoal tenho a seguinte trigger abaixo:

      create or replace trigger delete_medicoes
      after delete on A
      for each row
      declare

      begin
      delete B
      where data_med = to_date(:new.ame_data, 'DD/MM/RRRR hh24:mi:ss');
      end delete_medicoes;

      Quando eu apago algum registro na tabela A ele deveria apagar o registro com a mesma data e hora na tabela B, porém o registro não é apagado e não retorna nenhum erro.
      Alguém tem alguma dica do que pode estar errado?

      #80059
      Marcio68Almeida
      Participante

        delete B
        where data_med = to_date(:new.ame_data, 'DD/MM/RRRR h24:mi:ss');

        Aqui está retornando uma única linha ???
        Não deveria trazer também a chave desta tabela ???

        #80060
        Anônimo

          Cara essa trigger é apenas para a compatibilidade de um sistema que acessa uma tabela sem chave, por isso em pego a data para excluir.
          Como não tenho muito intimidade com o Oracle como eu consigo testar essa execução da trigger para saber se está retornando o valor correto?

          #80061
          Marcio68Almeida
          Participante

            Se você colocar o valor da data na cláusula select * você verá as linhas que retornarão…
            A questão é, se voltar mais de uma linha e você colocou a comparação igual, então vai dar erro…
            Se você quer que retorne mais de uma linha e excluir todas as que retornarem, então tem que colocar IN no lugar de igual.

            #80062
            DanielB
            Participante

              yo lo que veo es que estas utilizando :new. en un trigger delete cuando solo tiene valor y debe ser utilizado el 😮 ld

              #80066
              Anônimo

                Pessoal coloquei old e nada de funcionar, mudei para select e retornou alguma coisa, como eu vejo o que retornou?
                Alterei um pouco o código, veja como está agora:

                create or replace trigger delete_medicoes
                after delete on A
                for each row
                declare
                teste number;
                begin
                select peso
                into teste
                from B
                where data_med in to_date(:old.ame_data, 'DD/MM/RRRR hh24:mi:ss');
                exception
                when no_data_found then
                null;
                when others then
                null;
                end A;

                #80070
                DanielB
                Participante

                  el = es correcto, no es necesario in
                  data_med y ame_data son tipos date en las tablas?

                  para ver el error puedes agregar en la excepciones

                  raise_application_error(-20001, sqlerrm);

                  en cada when(yo pondira solo el when others para testear)
                  y probar desde sqlplus o toad o la herramienta que uses

                  #80071
                  Anônimo

                    Pessoal valeu pela força, mas o que tava dando problema era o to_date.
                    Removi o bixo e agora tá rolando beleza.
                    Vlw pessoal.

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