Pular para o conteúdo
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #97216
    Anakim
    Participante

      Tem como criar uma constraint unique com uma cláusula por exemplo. Eu tenho dois 3 campos (campoA, campoB e campoC) que só podem ser iguais se o campoC for igual a zero. Segue um exemplo abaixo:

      Esta situação pode:

      – campoA = 1, campoB = 2, campoC = 0
      – campoA = 1, campoB = 2, campoC = 0;
      – campoA = 1, campoB = 2, campoC = 1;
      – campoA = 1, campoB = 2, campoC = 0;

      Esta não pode:

      – campoA = 1, campoB = 2, campoC = 1;
      – campoA = 1, campoB = 2, campoC = 1;

      Eu sei que eu poderia fazer isso em uma trigger, mas gostaria de saber se tem como fazer isso através de um check por exemplo, porque no postgre eu consigo fazer isso através de uma constraint unique e de maneira bem fácil. 😛

      #97220
      burga
      Participante

        E aí Anakim,

        Acho que já respondi uma vez essa questão pra você, em um tópico bem antigo…

        https://profissionaloracle.com.br/modules.php?name=Forums&file=viewtopic&t=3571&start=0&postdays=0&postorder=asc&highlight=unique+index

        Usando unique function-based index. Olha o código:
        CREATE UNIQUE INDEX teste_idx
        ON tabela (
        DECODE(campoC, 0, NULL, campoA),
        DECODE(campoC, 0, NULL, campoB),
        DECODE(campoC, 0, NULL, campoC)
        );

        Abraços

        #97232
        Anakim
        Participante

          É eu sei que tinha colocado algo parecido, eu pequisei no forum e achei também o link que você postou, mas neste cenário a soluçaõ não serve por ter mais um campo.

          E tentei usar esta solução nova que você colocou mas não funcionou, porque este index deixa outros valores no campoC entrar. Por exemplo:

          Esta situação pode:

          • campoA = 1, campoB = 2, campoC = 0
          • campoA = 1, campoB = 2, campoC = 0;
          • campoA = 1, campoB = 2, campoC = 1;
          • campoA = 1, campoB = 2, campoC = 0;

          Esta não pode:

          • campoA = 1, campoB = 2, campoC = 1;
          • campoA = 1, campoB = 2, campoC = 1;
          • campoA = 1, campoB = 2, campoC = 2;
          • campoA = 1, campoB = 2, campoC = 3;

          Só pode haver valores duplicados se o campoC for 0.

          #97235
          Anakim
          Participante

            Fazendo uma análise melhor em cima da sua solução vi que ela atende a minha necessidade se for preciso eu crio um check na tabela. 🙂

            Mais um vez valeu pela ajuda!

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