Pular para o conteúdo
  • Este tópico contém 20 respostas, 3 vozes e foi atualizado pela última vez 16 anos, 2 meses atrás por Rodrigo Mesquita.
Visualizando 15 posts - 1 até 15 (de 21 do total)
  • Autor
    Posts
  • #90285
    Anakim
    Participante

      Teria como usar um valor, que está sendo inserido na tabela, em um check constraint?

      #90286
      Rodrigo Mesquita
      Participante

        voce pode tratar isso em um trigger before insert ou before update

        #90287
        Anakim
        Participante

          Isso eu sei, só queria saber se tem como criar isso em um check. 😉

          #90288
          Rodrigo Mesquita
          Participante

            Não sei exatamente como voce quer, mais neste exemplo abaixo eu evito que um valor seja igual ao de outra coluna na mesma tabela.

            create table TESTE
            (
            EXEMPLO1 VARCHAR2(100),
            EXEMPLO2 VARCHAR2(100)
            );

            alter table TESTE
            add constraint CHECK1
            check (exemplo1 exemplo2);

            #90289
            Anakim
            Participante

              O que eu na verdade quero saber é se tem como pegar este valor que está sendo inserido e fazer um select nele, igual a uma trigger.

              #90290
              Anakim
              Participante

                Por exemplo:

                A estrutura da tabela é esta: id, name, id_fk.
                Vou incluir os dados (1, test, 2).
                Tem como eu pegar o id_fk, que neste caso é 2 e fazer um count por ele dentro de um check?

                #90291
                Rodrigo Mesquita
                Participante

                  Até que eu saiba o oracle não permite subquery dentro de check constraints

                  #90292
                  Anakim
                  Participante

                    Entendi…
                    Resolvi fazer em trigger. Valeu pela ajuda galera.
                    Alguém poderia me mandar um trigger de exemplo?
                    Queria fazer um count dentro da trigger e atribuir um valor a uma variável.
                    A que estou fazendo está com erro:


                    CREATE OR REPLACE
                    TRIGGER TEST_TRIGGER
                    BEFORE INSERT ON TEST
                    FOR EACH ROW
                    declare
                    total integer;
                    BEGIN

                    total := select count( :new.id_fk ) from dual;

                    if total > 2
                    then
                    raise_application_error('erro de count');
                    end if;

                    END;

                    #90295
                    Rodrigo Mesquita
                    Participante

                      Voce não pode fazer uma consulta na mesma tabela em um trigger before update ou insert. Vai dar erro de tabela em mutação.

                      #90296
                      Ishii
                      Participante

                        Olá,

                        Neste caso será necessário usar o PRAGMA autonomous_transaction declarado

                        #90297
                        Anakim
                        Participante

                          Então, a unica maneira de fazer isso é com uma procedure de insert?

                          #90299
                          Ishii
                          Participante

                            Olá,

                            Não, você pode declarar o autonomous_transaction na trigger mesmo.

                            []s Ishii

                            #90301
                            Anakim
                            Participante

                              Vou tentar colocar esta constante na minha trigger.
                              Vocês saberiam aonde eu poderia conseguir um lugar para aprender sobre a sintaxe da pl do oracle, lembrando que estou vindo do postgre. 😉

                              #90302
                              Ishii
                              Participante

                                Olá,

                                No site da Oracle (precisa de cadastro) você já encontra bastante coisa, como você é de PostGre fica mais fácil…

                                http://www.oracle.com/pls/db102/homepage

                                []s Ishii

                                #90303
                                Anakim
                                Participante

                                  Valeu Ishii a trigger funcionou! 😛
                                  Agora gostaria de entender o que significa esta constante que eu tive que inclui no meu código.

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