Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

O que é Sequência no oráculo

O que é Sequência no oráculo

  • O Oracle Sequence é um objeto criado pelo usuário que pode ser compartilhado por vários usuários para gerar números inteiros exclusivos
  • O uso mais geral de sequências seria gerar coluna de chave primária na tabela.
  • A sequência é gerada pela rotina interna do oráculo, então não precisamos nos preocupar com . Isso economizará o tim3, pois o desenvolvedor não precisa gerar a rotina de produção de sequência
  • Um gerador de números sequenciais, pode ser configurado para aumentar ou diminuir
  • Existe apenas no dicionário de dados, pode ser limitado ou repetível (ciclo).
  • Precisamos do privilégio de criação de sequência para criar a sequência





A criação de uma sequência é feita usando o
CRIAR SEQUÊNCIA


[COMEÇAR COM]

[INCREMENTAR POR]

[NÃO/MINVALUE]

[NÃO/MAXVALUE]

[NÃO/CICLO]

[NÃO/CACHE];





Descrição de cada valor

 
COMEÇAR COM Define o valor inicial da sequência (padrão 1 ),
INCREMENTAR POR Define o nível de aumento ou diminuição (padrão 1 ),
MINVALUE Define o valor mais baixo para uma sequência decrescente
MAXVALUE Define o valor mais alto para uma sequência crescente
CICLO Define se a sequência se repetirá
CACHE Define o bloco de números de seqüência mantidos na memória (padrão 20 ), NOCACHE força o dicionário de dados a ser atualizado para cada número gerado pela sequência

Exemplos

 
criar sequência test_tech começar com 1
incremento de 1
valor máximo 10000
ciclo
cache 20;




criar sequência test_tech1

comece com 1
incremento de 1
valor máximo 4500000
ciclo
nocache;

 

Como usar sequências


Para usar a sequência basta usar a pseudocoluna CURRVAL e NEXTVAL

Pseudocoluna NEXTVAL 

É usado para gerar o número de sequência sucessiva da sequência especificada

Pseudocoluna CURRVAL 

Ele contém a sequência que o usuário acabou de gerar


SELECT TEST_TECH.NEXTVAL FROM DUAL;




SELECIONE TEST_TECH.CURRVAL DE DUAL;

SELECIONE TEST_TECH.NEXTVAL DE DUAL;


Como modificar as sequências


Podemos modificar as sequências usando alter sequence.
SQL> ALTER SEQUENCE tech_test1 INCREMENT BY 50;

As alterações afetam apenas o uso futuro da sequência.

Você deve ser o proprietário ou ter privilégios de alteração nessa sequência

Não podemos mudar iniciar com a opção. Para esta sequência, precisa ser descartada e recriada

As alterações de sequência também são validadas

Como eliminar a sequência


A eliminação de uma visualização é feita usando o comando de sequência DROP.
Drop sequence test_tech ;

Visualizações de dicionário para ver os dados de sequência


os detalhes da sequência podem ser consultados no dicionário consultando USER_SEQUENCES, ALL_SEQUENCES ou DBA_SEQUENCES. Existem três categorias de visualizações
USER_% Esta visualização contém informações dos objetos pertencentes apenas ao usuário


Exemplo

USER_TABLES,USER_TAB_COLS
TODOS-% Esta visualização contém informações dos objetos que o usuário pode acessar no banco de dados.


Exemplo

ALL_TABLES,ALL_TAB_COLS
DBA_% Esta visualização contém informações de todos os objetos   no sistema e são visualizações restritas que podem ser acessadas pelo usuário com função de DBA


Exemplo

DBA_TABLES,DBA_TAB_COLS


  DBA_% visualizações sobre informações de sequências TODAS_% visualizações sobre informações de sequências USER_% visualizações sobre informações de sequências
Visualizar sobre sequências informações dba_sequences todas_ sequências sequências de usuário


Para listar todas as sequências pertencentes ao uso atual


selecione o sequence_name em user_sequences;

Para listar todas as sequências em um banco de dados:


Selecione proprietário, sequence_name de dba_sequences;

Para listar sequências acessíveis ao usuário atual:


selecione sequence_name de all_sequences

Como determinar todas as informações sobre a sequência?


selecione sequence_name,min_value,max_value,increment_by,last_number
FROM DBA_SEQUENCES

onde OWNER =''
and sequence_NAME  ='';

Como recuperar o valor atual de uma sequência oracle sem incrementá-lo


A coluna last_number exibe o próximo número de sequência disponível se nenhum cache for especificado
SELECT last_number


FROM user_sequences

WHERE sequence_name =‘’;

Como extrair a definição de sequência (instruções DDL) de um banco de dados Oracle sem ter que passar por uma pilha de visualizações de dicionário


Sintaxe:
SQL> set long 1000
SQL> set pagesize 0select DBMS_METADATA.GET_DDL('SEQUENCE','') de DUAL;





Como  definir o valor LASTVALUE em uma sequência Oracle

ALTER SEQUENCE tech_seq_name INCREMENTAR EM 250;


SELECT tech_seq_name.nextval FROM dual;

ALTER SEQUENCE tech_seq_name  INCREMENTAR EM 1;

Como redefinir uma sequência no Oracle


Existem muitos caminhos.

a) Podemos descartar e recriar a sequência. Mas isso invalida todos os objetos dependentes (gatilhos/procedimentos armazenados etc.)

b) Podemos redefinir  com estas etapas simples
Etapa 1:encontre o valor mais recente da sequência


Selecione tech_seq_name.nextval DE dual;

Etapa 2:altere a sequência com incremento do valor negativo do valor mais recente

ALTER SEQUENCE tech_seq_name INCREMENT BY -  minvalue 0;

Etapa 3  Faça nextval para defini-lo de volta para zero

SELECT tech_seq_name.nextval FROM dual;

Etapa 4:altere o incremento de volta para 1

ALTER SEQUENCE tech_seq_name  INCREMENTAR EM 1;

Exemplo

SELECT tech_seq_name.nextval FROM dual;

—————————————

250

ALTER SEQUENCE tech_seq_name INCREMENT BY -250;

SELECT tech_seq_name.nextval FROM dual;

ALTER SEQUENCE tech_seq_name  INCREMENTAR EM 1;

Você pode encontrar mais neste link

Como redefinir a sequência

Impacto do armazenamento em cache das sequências


As sequências são armazenadas em cache com o objetivo de melhorar o desempenho da busca. No RAC, cada instância armazena os valores de cache

Podemos ter lacunas na sequência ao usar o cache devido aos seguintes motivos
  1. A reversão ocorre
  2. Falha do sistema ou falha da instância
  3. A sequência é usada em outra tabela

Há novo recurso no Oracle 12c para sequências

Sequências de sessão

Com o Oracle Database 12C novas palavras-chave SESSION, GLOBAL estão disponíveis e podem ser especificadas durante a criação de uma sequência
CREATE SEQUENCE test_session_seq START WITH 1 INCREMENT BY 1 SESSION;
CREATE SEQUENCE test_global_seq START WITH 1 INCREMENT BY 1 GLOBAL;

Global Sessão
cria uma sequência padrão bem conhecida na versão anterior. Este é o padrão. cria um novo tipo de sequência de sessão, que é um tipo especial de sequência projetado especificamente para ser usado com tabelas temporárias globais que têm visibilidade de sessão. A sequência de sessão retorna um intervalo exclusivo de números de sequência apenas dentro de uma sessão, mas não entre sessões. Outra diferença é que as sequências de sessão não são persistentes. Se uma sessão desaparecer, o mesmo acontecerá com o estado das sequências de sessão que foram acessadas durante a sessão.