Pular para o conteúdo
Visualizando 6 posts - 1 até 6 (de 6 do total)
  • Autor
    Posts
  • #92978
    gsmdf
    Participante

      Galera,

      Tenho duas tabelas:

      – PT com campos cod_arq_eletronico_catalogado e cod.
      – DS com campos cod_arquivo_eletronico e cod_documento_tramitavel.

      Gostaria de saber como é o SQL para criação de uma trigger na tabela DS before insert e before update que cancele a operação e mostre uma mensagem “MENSAGEM ERRO” quando a seguinte condição retornasse 0 ocorrências, ou seja, não há em PT uma tupla com mesmo cod_documento_tramitavel e cod_arquivo_eletronico que a que estão tentando inserir ou atualizar na tabela DS.

      pt.cod = ds.cod_documento_tramitavel
      AND
      pt.cod_arq_eletronico_catalogado = ds.cod_arquivo_eletronico

      Em outras palavras, só deve-se permitir inserir nova tupla ou atualizar valores que esses dois códigos estejam juntos na tabela PT para alguma tupla.

      #92987
      Ishii
      Participante

        Olá,

        Desculpe-me mas a sua dúvida está em COMO criar a Trigger ou como FAZER a codificação na Trigger ou como RETORNAR a mensagem de erro?

        Não acho que seja um problema de lógica, então não entendi direito…

        Você já tentou fazer essa trigger e deu algum erro?

        []s Ishii 😛

        #93013
        gsmdf
        Participante

          Minha dúvida é a codificação da Trigger e como fazer retornar aquela mensagem de erro.
          Grato!

          #93014
          fsitja
          Participante

            pt.cod e pt.cod_arq_eletronico_catalogado são PK da tabela PT?

            Mesmo que não seja PK, se, por exemplo, a tupla pt.cod = 1 e pt.cod_arq_eletronico = 1 só puder existir uma vez na tabela PT isso caracteriza uma unique key e o melhor é declarar a UK e uma foreign key na tabela DS referenciando a PT.

            #93021
            gsmdf
            Participante

              [quote=”fsitja”:39rmy6z4]pt.cod e pt.cod_arq_eletronico_catalogado são PK da tabela PT?

              Mesmo que não seja PK, se, por exemplo, a tupla pt.cod = 1 e pt.cod_arq_eletronico = 1 só puder existir uma vez na tabela PT isso caracteriza uma unique key e o melhor é declarar a UK e uma foreign key na tabela DS referenciando a PT.[/quote]

              Apenas COD é PK da tabela PT.

              #93027
              fsitja
              Participante

                Bom… teoricamente você pode ainda criar uma Unique Key nas duas colunas e uma FK na DS… mas eu pensaria bem antes de colocar essa coluna cod_arquivo_eletronico na tabela DS. O estritamente correto é sempre que precisar dela fazer um join com a PT e buscá-la, e não haveria razão para replicar a informação e criar um workaround desses.


                Connected to Oracle Database 11g Enterprise Edition Release 11.1.0.6.0
                Connected as FSITJA

                SQL> create table pt (cod number(10) primary key,
                2 cod_arq_eletronico_catalogado number(10));

                Table created

                SQL> create table ds (cod_documento_tramitavel number(10),
                2 cod_arquivo_eletronico number(10));

                Table created

                SQL> alter table pt add constraint uk_pt unique (cod, cod_arq_eletronico_catalogado);

                Table altered

                SQL> alter table ds add constraint fk_ds_uk_pt
                2 foreign key (cod_documento_tramitavel, cod_arquivo_eletronico)
                3 references pt (cod, cod_arq_eletronico_catalogado);

                Table altered

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