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',' |
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 - 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
- A reversão ocorre
- Falha do sistema ou falha da instância
- 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ênciaCREATE 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. |