Pular para o conteúdo
Visualizando 12 posts - 1 até 12 (de 12 do total)
  • Autor
    Posts
  • #91185
    Shiono
    Participante

      Pessoal bom dia que comando eu executo no oracle para saber se uma tabela tem uma coluna de auto incremento?

      Desde já eu agradeço

      #91186
      Ishii
      Participante

        Olá,

        Diferente do SQL Server, no Oracle a coluna auto-incremento deve ser construída com uma sequence que pode ser inserida via comando insert direto (inserto into table values sequence.nextval etc…) ou via trigger mas sempre usando uma sequence.

        []s Ishii

        #91187
        Shiono
        Participante

          Ola Ishii

          Mas tem como eu sabe se uma tabela tem alguma sequence relacionada?

          #91188
          rwarstat
          Participante

            Os meus parcos conhecimentos de Oracle dizem que tu cria a sequence e pode usá-la em qualquer lugar. Ela não fica ligada diretamente à nenhuma coluna ou outra estrutura do banco.
            Ou seja, se tu criar uma sequence sq_nr_produto, tanto vai poder usar ela numa trigger para fazer o insert em uma tabela como em um código PL/SQL.

            []´s
            Roberto

            #91189
            MauroLacerda
            Participante

              Caso voce não queira usar sequence voce pode fazer assim:

              Exemplo :
              Tabela1
              Codigo Number,
              Nome Varchar2(10).

              insert into tabela1 (codigo,nome) values ((select nvl(max(codigo),0)+1 from tabela1),);

              Abs.

              #91195
              Shiono
              Participante

                Estava lendo umas postagem, esta escrito que eu posso usar uma unica sequence para varias tabelas, se eu entendi corretamente.

                Minha duvida é a seguinte

                se eu tenho uma tabela X com 10 registros e um tabela Y com 200

                como que o oracle sabe que o proximo X será 11 e o proximo Y 201

                Nao entendi isto

                #91197
                MauroLacerda
                Participante

                  A sequence pode servir para as duas tabelas so que não haveria numero iguais para as duas.

                  Exemplo : Sequence em 1.

                  Insert na primeira tabela – 1
                  Insert na segunda tabela – 2 (.Nextval)

                  Como voce pode ver não haver o “1” nas duas tabelas.

                  Abs.

                  #91198
                  burga
                  Participante

                    Oi Shiono,

                    No caso o Oracle não sabe,

                    O objeto sequence grava o ultimo número solicitado a ela. Assim quando você pede outro número pra ela, ela te passa o ultimo + 1.

                    Se o ultimo número foi 200, o próximo será 201, independente da tabela que você vá utilizar.

                    #91200
                    Shiono
                    Participante

                      Valeu pessoal pela ajuda agora entendi o esquema, muito obrigado

                      #91202
                      Shiono
                      Participante

                        Pessoal tem como eu dar um reseset no last_number da dba_sequences ou
                        user_sequences.

                        Para um valor que eu precise no momento???

                        #91206
                        burga
                        Participante

                          Um jeito conhecido, sem ser o de dropar e recriar a sequence é o seguinte (parece gambiarra). Exemplo:

                          Digamos que a sua sequence está no número 10 e você deseja que passe a 200, então você altera o increment by pra 189 e faz um select na sequence:

                          alter sequence sequencia
                          increment by 189;

                          select sequencia.nextval from dual;

                          feito isto você altera novamente o valor do increment by pro valor que estava antes:

                          alter sequence sequencia
                          increment by 1;

                          Note que se quiser diminuir o número você pode setar o increment by pra um valor negativo…

                          #91207
                          Ishii
                          Participante

                            Olá,

                            Eu uso o código:


                            alter sequence increment by nocache;
                            select .nextval from dual;
                            alter sequence increment by 1 nocache;
                            declare
                            LastValue integer;
                            begin
                            loop
                            select .currval into LastValue from dual;
                            exit when LastValue >= - 1;
                            select .nextval into LastValue from dual;
                            end loop;
                            end;
                            /
                            alter sequence increment by 1 nocache;

                            []s Ishii

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