Buscar

sql_7_NoRestriction

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 44 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 44 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 44 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

1. Índices
Os SGBD’s utilizam índices para tornar mais
eficiente a recuperação dos dados de um banco
de dados. Um índice é uma estrutura de dados,
onde são armazenados valores e ponteiros
organizados de forma ascendente ou
descendente, que torna possível localizar
rapidamente as linhas de uma tabela nas quais o
valor desejado está armazenado. Os índices são
utilizados internamente pelo SGBD, ficando
totalmente transparente ao usuário a sua
utilização.
1. Índices
1.1 Criando Índices
Um índice é construído sobre uma ou mais colunas 
de uma determinada tabela. Em SQL, um índice é 
criado através do comando create index, cuja a 
forma geral é: 
CREATE [UNIQUE] INDEX <nome_índice> ON 
<nome_tabela> (<lista_de_colunas>); 
A cláusula UNIQUE é opcional, e a sua inclusão 
assegura a não existência de valores duplicados 
no índice a ser criado. 
1. Índices
• Problema: Criar um índice chamado 
produto_desc_prod_idx sobre a coluna desc_prod da 
tabela produto.
Solução: create index produto_desc_prod_idx on
produto(desc_prod);
• Problema: Criar um índice único chamado 
cliente_nome_cli_idx sobre a coluna nome_cli da tabela 
cliente. 
Solução: create unique index cliente_nome_cli_idx on
cliente(nome_cli);
1. Índices
• Problema: Criar um índice único chamado 
pedido_num_ped_cod_vend_idx sobre as colunas num_ped e 
cod_vend da tabela pedido. 
Solução: create unique index
pedido_num_ped_cod_vend_idx on
pedido(num_ped,cod_vend);
• Problema: Criar um índice único chamado cliente_cod_cli_idx
sobre a coluna cod_cli da tabela cliente. 
Solução: create unique index cliente_cod_cli_idx on
cliente(cod_cli);
• Obs: um índice único é automaticamente construído quando 
uma coluna é definida como chave primária no comando 
CREATE TABLE. 
1. Índices
1.2 Eliminado Índices
Podemos eliminar uma índice através do comando drop
index, cuja a forma geral é: 
DROP INDEX <nome_índice>; 
• Problema: Eliminar os índices criados nos problemas 
acima. 
Solução: drop index produto_desc_prod_idx;
Solução: drop index cliente_nome_cli_idx;
Solução: drop index pedido_num_ped_cd_vend_idx;
2. Segurança
• A informação é vital para o sucesso de um
negócio, mas quando ela é tratada de forma
incorreta ou quando cai em mão erradas, pode
tornar-se um sério obstáculo para se atingir o
sucesso. Visando garantir a segurança dos dados,
os SGBD’s disponíveis no mercado fornecem um
série de facilidades para salvaguardar as
informações por eles mantidas. Tais facilidades
são implementadas concedendo-se e retirando-
se privilégios dos usuários sobre os dados
mantidos por um SGBD.
2. Segurança
2.1 O Comando GRANT
Quando uma tabela ou uma visão é criada, o nome do 
usuário que a criou é anexado implicitamente ao nome da 
tabela ou da visão. 
Exemplo: Se a tabela produto foi criada pelo usuário pedro; 
então, internamente, ela será conhecida como 
pedro.produto. O criador de uma tabela ou de uma visão 
tem todos os privilégios sobre o objeto criado, podendo 
inclusive conceder tais privilégios para outros usuários. Em 
SQL, os privilégios são concedidos através do comando 
grant, cuja a forma geral é: 
GRANT <lista_de_privilégios> ON <nome_objeto> TO 
<lista_de_usuários>; 
2. Segurança
Os privilégios concedidos são os seguintes: 
• Select permite executar consultas 
• Insert permite inserir registros 
• Delete permite excluir registros 
• Update permite modificar registros 
• All permite executar qualquer operação 
2. Segurança
Observações: 
a)Os usuário que irão receber os privilégios têm 
que estar previamente cadastrados no banco 
de dados. 
b)Podemos conceder privilégios para todos os 
usuários do banco de dados colocando a 
palavra PUBLIC no lugar reservado para a 
<lista_de_usuários>. 
2. Segurança
Exemplos: 
• GRANT select on produto to pedro; 
Permite apenas consultas ao usuário Pedro sobre a tabela produto. 
• GRANT select, insert, update on pedido to ana; 
Concede ao usuário Ana os privilégios de consulta, inclusão e alteração 
sobre a tabela pedido. 
• GRANT select on cliente to ana,pedro; 
Concede aos usuários Ana e Pedro o privilégio de consulta sobre a 
tabela cliente. 
• GRANT all on vendedor to PUBLIC; 
Permite todos os privilégios a todos os usuários cadastrados sobre a 
tabela vendedor. 
2. Segurança
• Problema: Disponibilizar para seleção, a todos os usuários, a visão 
salario_anual. 
Solução: grant select on salario_anual to public;
• Problema: Disponibilizar para alteração as colunas endereco, 
cidade, cep e uf, da tabela cliente, para todos os usuários. 
Solução: grant update (endereco,cidade,cep,uf) on cliente to 
public;
Podemos passar nossa concessão de privilégio a outros usuários 
através da cláusula WITH GRANT OPTION. 
• Exemplo: Conceder ao usuário Ana o poder de dar a concessão de 
todos os privilégios sobre a tabela pedido a outros usuários. 
Solução: grant all on pedido to ana with grant option;
2. Segurança
2.2 O Comando REVOKE
Da mesma forma que podemos conceder privilégios de 
acesso a outros usuários, podemos também retirá-los 
através do comando REVOKE, cuja a forma geral é: 
REVOKE <lista_de_privilégios> ON <nome_objeto> FROM 
<lista_de_usuários>; 
Exemplo: Retirar o privilégio de seleção sobre a tabela pedido
do usuário Ana. 
REVOKE select on pedido from ana; 
2. Segurança
• Problema: Retirar todos os privilégios concedidos 
a todos os usuários sobre a visão salario_anual. 
Solução: revoke all on salario_anual from public;
• Problema: Retirar os privilégios de atualização e 
inserção concedidos ao usuário Ana sobre a 
tabela pedido. 
Solução: revoke insert, update on pedido from 
ana;
2. Segurança - Prática
Em uma sessão principal do oracle (system/system):
CREATE USER aluno1 // nome do usuário.
IDENTIFIED BY aluno1 // senha do usuário.
DEFAULT TABLESPACE USERS // uso das tablespaces existentes.
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT // usuário padrão.
ACCOUNT UNLOCK; // cria o usuário.
GRANT CONNECT TO aluno1; // libera o usuário para conexão.
GRANT RESOURCE TO aluno1; // libera o usuário para abrir sessão.
2. Segurança - Prática
CREATE USER aluno2
IDENTIFIED BY aluno2
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT
ACCOUNT UNLOCK;
GRANT CONNECT TO aluno2;
GRANT RESOURCE TO aluno2;
2. Segurança - Prática
Abrir 2 sessões (abrir duas novas instâncias do oracle), 
uma para cada usuário criado.
Na sessão do usuário aluno1:
conn aluno1/aluno1;
create table xpto (mat integer not null);
insert into xpto values (1);
insert into xpto values (2);
insert into xpto values (3);
grant select on xpto to aluno2;
2. Segurança - Prática
Na sessão do usuário aluno2
conn aluno2/aluno2;
select * from xpto; // resultará em tabela não 
existe.
select * from aluno1.xpto; // serão exibidos os 
registros.
insert into aluno1.xpto values (4); // erro: falta de 
privilégios
2. Segurança - Prática
Na sessão do usuário aluno1:
grant insert on xpto to aluno2;
Na sessão do usuário aluno2
insert into aluno1.xpto values (4); // o registro será 
incluído
select * from aluno1.xpto; // serão exibidos os 
registros.
2. Segurança - Prática
Na sessão principal (system) eliminar os usuários 
criados, mas antes feche as demais sessões 
(aluno1 e aluno2), a opção cascade faz com 
que todos os objetos criados pelo usuário 
também sejam eliminados:
drop user aluno1 cascade;
drop user aluno2 cascade;
3. Visões
Considerações sobre segurança podem exigir que determinados
dados não estejam disponíveis para alguns usuários. Logo, não é
desejável que o modelo lógico possa ser acessado
indiscriminadamente. Com base nas questões de segurança,
podemos criar uma coleção de relações personalizadas que se
ajustem melhor às necessidades dos usuários e que levem em
conta as questões de segurança. Tais relações são chamadas de
visões. Uma visão, na terminologia SQL, é uma tabela que é
derivada de outras tabelas. Estas outras tabelas podem ser tabelas-
base (criadas através do comando CREATE TABLE) ououtras visões
previamente definidas. Uma visão não está, necessariamente,
fisicamente armazenada no banco de dados; ela pode existir apenas
virtualmente, em contraste com as tabelas-base, cujas as tuplas se
encontram fisicamente armazenadas no banco de dados.
3. Visões
3.1 Definindo Visões
Em SQL, uma visão é definida através do comando create view, cuja a 
forma geral é: 
CREATE VIEW <nome_visão> (<nomes das colunas>) AS 
<expressão_de_consulta>; 
Problema: Criar uma visão que contenha apenas os produtos vendidos 
em quilograma. 
create view prod_kg (codigo,descricao,unidade)
as select cod_prod, desc_prod, unid_prod from produto where 
unid_prod=’kg’;
3. Visões
Problema: Criar uma visão contendo o código do vendedor, o seu 
nome e o salário fixo anual. 
create view salario_anual (codigo,nome,sal_anual)
as select cod_vend,nome_vend,sal_fixo*12 from vendedor;
Problema: Criar uma visão contendo os vendedores, seus pedidos 
efetuados e os respectivos produtos. 
create view lista_pedidos as select nome_vend,num_ped,desc_prod
from vendedor V,pedido P,item_pedido I, produto PR
where V.cod_vend=P.cd_vend and P.num_ped=I.no_ped and 
I.cd_prod=PR.cod_prod;
3. Visões
3.2 Utilizando Visões
Problema: Com base na visão salario_anual, mostrar os vendedores 
que têm salário fixo anual superior a R$ 20.000,00. 
select nome,sal_anual from salario_anual where sal_anual > 20000;
NOME SAL_ANUAL 
Ana Cristina 25200 
Armando Pinto 30000 
2 linhas selecionadas. 
3. Visões
Problema: Inserir uma linha na visão prod_kg com código 800, 
descrição Cimento Branco, e unidade kg.
insert into prod_kg values (800,’Cimento Branco’,’kg’);
ORA-01400: não é possível inserir NULL em 
("xxx"."PRODUTO"."VAL_UNIT")
Problema: Excluir da visão salario_anual todos os vendedores que têm 
salário anual abaixo de R$ 15.000,00. 
delete from salario_anual where sal_anual<15000;
ORA-02292: restrição de integridade (xxx.SYS_C001449) violada –
registro filho localizado
3. Visões
3.3 Eliminando Visões
Podemos eliminar uma visão através do comando 
drop view, cuja a forma geral é: 
DROP VIEW <nome_visão>; 
Problema: Eliminar a visão salario_anual; 
drop view salario_anual;
4. Funções Matemáticas e de Datas
4.1 Principais Funções Matemáticas:
• ABS(col|num)
Devolve o valor absoluto da coluna ou expressão.
• CEIL(col|num)
Devolve o menor inteiro que seja maior ou igual ao parâmetro de 
entrada. Ver FLOOR.
• FLOOR(col|num)
Devolve o maior inteiro que seja menor ou igual ao parâmetro de 
entrada. Ver CEIL.
• MOD(col1|num1, col2|num2)
Determina o resto da divisão do primeiro parâmetro pelo segundo.
• POWER(col|num, n)
Eleva a coluna ou expressão à potência de n. n tem que ser inteiro.
4. Funções Matemáticas e de Datas
• ROUND(col|num, n)
Arredonda o valor para o inteiro mais próximo se n não for especificado. Se n
for positivo arrendonda na casa decimal com esse número. Se n for negativo
arredonda em casas à esquerda da virgula. Ver TRUNC. Exemplo :
SQLWKS> SELECT round(523.456) "R 0",
2> round(523.456, 0) "R 0",
3> round(523.456, 1) "R 1",
4> round(523.456, 2) "R 2",
5> round(523.456, -1) "R-1",
6> round(523.456, -2) "R-2",
7> round(523.456, -3) "R-3",
8> round(523.456, -4) "R-4"
9> FROM dual;
R 0 R 0 R 1 R 2 R-1 R-2 R-3 R-4
523 523 523.5 523.46 520 500 1000 0
4. Funções Matemáticas e de Datas
• SIGN(col|num)
Devolve –1 se a coluna ou expressão tiverem um valor
negativo, 1 se tiverem um valor positivo ou 0 se tiverem um
valor de 0.
• SQRT(col|num)
Devolve a raiz quadrada da coluna ou expressão.
• TRUNC(col|num, n)
Faz o mesmo que o ROUND mas em vez de arredondar trunca.
Ver ROUND.
• Mais funções disponíveis nos manuais do Oracle (ACOS,
ASIN, ATAN, ATAN2, COS, COSH, EXP, LN, LOG, SIN, SINH,
TAN, TANH).
4. Funções Matemáticas e de Datas
4.2 Principais Funções de Datas:
Em Oracle as datas guardam valores sobre o século, ano, mês, dia, hora,
minuto e segundo. Podem representar valores entre 1 de Janeiro de 4712
AC e 31 de Dezembro de 4712 DC. A data é guardada internamente através
de um formato de dados desconhecido para o utilizador/programador. No
entanto, é possível alterar o formato usado pelo Oracle para mostrar datas.
Pode, por exemplo, ver-se datas com 2 dígitos no ano ou com 4 dígitos. Mas
seja qual for a escolha, internamente é guardada toda a informação do ano.
• Operações aritméticas:
As seguintes operações aritméticas são válidas para datas:
data + dias = nova_data
data – dias = nova_data
data1 – data2 = dias_diferenca (numero real positivo)
data + horas/24 = data_mais_horas
data + dias + horas/24 + minutos/1440 + segundos/86400 = nova_data;
4. Funções Matemáticas e de Datas
Exemplo a somar dias, horas, minutos e segundos a uma 
data:
SQL>SELECT TO_CHAR(TO_DATE('98-07-01 00:00:00', 'YY-
MM-DD hh24:mi:ss')
2 + 8 -- mais 8 dias
3 + 12/24 -- mais 12 horas
4 + 34/1440 -- mais 34 minutos
5 + 56/86400, -- mais 56 segundos
6 'yyyy-mm-dd hh24:mi:ss') "Somar"
7 FROM DUAL;
Somar
---------------------------------------------------------------------
1998-07-09 12:34:56
4. Funções Matemáticas e de Datas
Exemplo para subtrair datas:
SQL>SELECT TO_DATE('98-07-01 00:00:00', 'YY-MM-DD 
hh24:mi:ss')
2 - TO_DATE('98-07-01 00:00:00', 'YY-MM-DD hh24:mi:ss')
3 + 8 -- soma 8 dias
4 + 12/24 -- mais 12 horas
5 + 34/1440 -- mais 34 minutos
6 + 56/86400 -- mais 56 segundos
7 "Subtrai datas"
8 FROM DUAL;
Subtrai datas
-------------
8.5242593
4. Funções Matemáticas e de Datas
• ADD_MONTHS(data, n)
Devolve o valor da soma de n meses com data. O valor de n tem que ser
inteiro mas pode ser negativo.
• LAST_DAY(data)
Devolve a data do último dia do mês que contém o dia indicado por data.
• MONTHS_BETWEEN(data1, data2)
Devolve um número fracionário, maior, menor ou igual a zero que
representa a diferença em meses entre a data1 e data2. Para efeitos da
parte fracionária é considerado que um mês tem 31 dias. Assim,
months_between('27-02-1998', '31-01-1998') devolve um valor de
0,870967742 que é igual a 27/31 (e não a 27/28).
• NEW_TIME(data, fuso1, fuso2)
Permite calcular a diferença horária entre dois fusos horários. Consultar os
manuais do Oracle para mais informações.
4. Funções Matemáticas e de Datas
• NEXT_DAY(data, dia_semana)
Devolve o valor de data do próximo dia da semana
especificado por dia_semana a seguir a data.
Valores válidos para dia_semana são: ‘sun’, ‘mon’,
‘tue’, ‘wed’, ‘thu’, ‘fri’, ‘sat’, que representam as
abreviaturas em inglês para os dias da semana.
Também se podem usar os nomes completos em
inglês e não interessa se se escreve em minúsculas
ou maiúsculas. Poder-se-á usar nomes de dias da
semana numa língua diferente do inglês se
alterarmos a língua da sessão em uso. Também se
podem usar os números de 1 (Domingo) a 7
(Sábado).
4. Funções Matemáticas e de Datas
Exemplo:
SQL> SELECT NEXT_DAY(sysdate, 'Sun') "Domingo",
2 NEXT_DAY(sysdate, 'Mon') "Segunda",
3 NEXT_DAY(sysdate, 'Tue') "Terça",
4 NEXT_DAY(sysdate, 'Wed') "Quarta",
5 NEXT_DAY(sysdate, 'Thu') "Quinta",
6 NEXT_DAY(sysdate, 'Fri') "Sexta",
7 NEXT_DAY(sysdate, 'Sat') "Sábado"
8 FROM dual;
Domingo Segunda Terça Quarta Quinta Sexta Sábado
98-11-01 98-11-02 98-11-03 98-10-28 98-10-29 98-10-30 98-10-31
Apesar de não aparecer no exemplo, os valores de hora, minuto e segundo são
iguais aos valores do primeiro argumento (no exemplo – sysdate, que devolve
a data do sistema). Ver função sysdate.
4. Funções Matemáticas e de Datas
• NLS_DATE_FORMAT
O Oracle representa as datas segundo o formato definido em NLS_DATE_FORMAT.
Pode alterar-se o seu valor através do comando ALTER SESSION.
Alguns dos campos válidos do NLS_DATE_FORMAT são:
DDD -> Dia do ano (número)
DD -> Dia do mês (número)
DAY -> Dia da semana (extenso)
MM -> Número do mês
MON -> Nome abreviado do mês
MONTH -> Nome por extenso do mês
YYYY -> Representar o ano com 4, 3, 2 ou 1 dígitos respectivamente
YYY
YY
Y
HH -> Hora do dia (0-12)
HH12
HH24 -> Hora do dia (0-24)
MI -> Minutos
SS -> Segundos
SSSSS -> Segundos depois da meia-noite
- / , . ; : "texto" -> pontuaçãoou texto entre aspas
4. Funções Matemáticas e de Datas
Exemplo para alterar o formato da data:
SQL>ALTER SESSION
2 SET NLS_DATE_FORMAT = '"Data:" YYYY-MON-DD HH24:MI:SS';
Session altered.
SQL>SELECT SYSDATE FROM dual;
SYSDATE
--------------------------
Data: 1998-OCT-27 20:23:35
• SYSDATE
Função sem argumentos que devolve a data e hora do servidor.
• TRUNC(data, [‘DAY’|‘MONTH’|‘YEAR’|‘outro’])
Arredonda a data para as zeros horas do dia actual (se não se usar o segundo
argumento) ou para o princípio da semana actual (se o segundo argumento for
‘DAY’), ou para o princípio do mês actual (se o segundo argumento for ‘MONTH’)
ou para o princípio do ano actual (se o segundo argumento for ‘YEAR’). Em
qualquer dos casos, o valor de horas, minutos e segundos fica igual a zero.
Consultar os manuais do Oracle para as restantes opções.
4. Funções Matemáticas e de Datas
• ROUND(data, [‘DAY’|‘MONTH’|‘YEAR’|‘outro’])
Arredonda a data ao dia ou ao dia da semana ou ao mês ou ao ano. Para
arredondar ao dia não se usa o segundo argumento. Todos os valores
de tempo antes do meio-dia são arredondados para as zero horas
desse próprio dia. Os restantes valores são arredondados para o dia
seguinte. Para arredondar ao dia da semana (para a segunda-feira mais
perto) usa-se o segundo argumento com o valor de ‘DAY’. O valor de
‘MONTH’ serve para arredondar ao mês e o de ‘YEAR’ para arredondar
ao ano. Existem mais opções de arredondamento. Consultar os
manuais da Oracle.
NOTA: Considera-se que o meio da semana é quarta-feira ao meio-dia.
Tudo o que estiver compreendido entre uma segunda-feira e o meio-
dia da quarta-feira da mesma semana é arredondado para as zero
horas dessa segunda-feira. Tudo o que estiver depois do meio-dia da
quarta-feira da mesma semana é arredondado considera-se que a
metade é a meia-noite entre os dias 15 e 16 independentemente do
tamanho dos meses. Em termos de anos, considera-se metade a meia-
noite entre o dia 30 de Junho e o dia 01 de Julho muito embora a
segunda “metade” seja constituída por 184 dias e a primeira por 181
dias (ou 182 em anos bissextos). Em qualquer dos casos, o valor de
horas, minutos e segundos fica igual a zero.
5. Seqüências
Criar Sequências (CREATE SEQUENCE)
Uma seqüência é um objecto que permite gerar números inteiros únicos.
Mesmo que vários utilizadores (ou o mesmo utilizador através de várias
sessões) acedam à seqüência, é garantido que nenhum obtém um
número que outro já tenha obtido.
O principal uso de sequências é para a geração automática de chaves
primárias.
O comando para criar sequências é:
CREATE SEQUENCE nome_sequência
START WITH num_principio
INCREMENT BY num_intervalo
[MAXVALUE num_max | NOMAXVALUE]
[MINVALUE num_min | NOMINVALUE]
[CYCLE | NOCYCLE]
[ORDER | NOORDER]
[CACHE num_cache | NOCACHE]
5. Seqüência
Onde:
• nome_seqüência -> é o nome da seqüência a criar
• START WITH num_principio -> é o primeiro número da seqüência e pode
ser qualquer valor inteiro, positivo, negativo ou zero.
• INCREMENT BY num_intervalo -> específica quantos inteiros separam
dois números obtidos consecutivamente da seqüência. Pode ser
qualquer valor positivo ou negativo mas não pode ser zero.
• MAXVALUE num_max -> limita os números da seqüência a este valor
máximo. Pode ser qualquer número desde que seja maior ou igual a
num_princípio e maior que num_min.
• NOMAXVALUE -> especifica um valor máximo de 1027 no caso de uma
seqüência ascendente e –1 no caso de uma seqüência descendente.
Por omissão as sequências são NOMAXVALUE.
• MINVALUE num_min -> limita os números da seqüência a este valor
mínimo. Pode ser qualquer número desde que seja menor ou igual a
num_princípio e menor que num_max.
• NOMINVALUE -> especifica um valor mínimo de -1027 no caso de uma
seqüência ascendente e 1 no caso de uma seqüência descendente. Por
omissão as sequências são NOMINVALUE.
5. Seqüência
• CYCLE -> determina que uma seqüência ascendente depois de atingir o
valor máximo recomeça a partir do valor mínimo. No caso de uma
seqüência descendente, depois de atingido o valor mínimo a contagem
recomeça no valor máximo.
• NOCYCLE -> é o valor por omissão e determina
• ORDER -> determina que os números da sequência são gerados pela
ordem de pedidos. Os números só poderiam ser gerados fora de ordem
se se estivesse a usar um servidor de BD paralelo. Se esta opção for
indica, os números da sequência nunca são gerados antecipadamente e
as opções CACHE e NOCACHE são irrelevantes.
• NOORDER -> é o valor por omissão e indica que não é forçoso que os
números da sequência sejam gerados pela ordem dos pedidos. No que
diz respeito à geração de chaves primárias, não costuma ser importante
a ordem dos números.
• CACHE num_cache -> indica quantos números o Oracle gera em avanço
para aumentar a rapidez. O valor por omissão é CACHE 20. É preciso
garantir que o valor de num_cache é menor ou igual ao número total
de valores que a sequência pode gerar.
• NOCACHE -> determina que nunca são gerados números em avanço
5. Seqüência
Para usar as sequências basta fazer:
nome_seq.nextval para obter o próximo valor (também funciona para o primeiro)
nome_seq.currval para devolver o valor atual (não funciona a primeira vez)
O uso destas pseudo-colunas funciona como se tratasse de funções. Ou seja,
pode-se incluir qualquer destas formas num comando SELECT, INSERT,
UPDATE, etc. mas não se
pode executar diretamente na linha de comando. Pode-se no entanto fazer uso
da tabela especial DUAL.
Exemplo – Usar uma sequência várias vezes consecutivas. Note que a primeira
vez que se usa a sequência não se pode usar a forma currval (porque ainda
não existe um valor corrente).
SQLWKS> SELECT minha_sequencia.currval FROM dual;
ORA-08002: sequence MINHA_SEQUENCIA.CURRVAL is not yet defined in this
session
SQLWKS> SELECT minha_sequencia.nextval FROM dual;
NEXTVAL
----------
1
1 row selected.
5. Seqüência
SQLWKS> SELECT minha_sequencia.nextval FROM dual;
NEXTVAL
----------
2
1 row selected.
SQLWKS> SELECT minha_sequencia.nextval FROM dual;
NEXTVAL
----------
3
1 row selected.
SQLWKS> SELECT minha_sequencia.currval FROM dual;
CURRVAL
----------
3
1 row selected.
5. Seqüência
• Usar uma sequência num INSERT.
SQLWKS> INSERT INTO emp (nemp, nome, sal, ndep)
2> VALUES (minha_sequencia.nextval, 'Joca', 55000, 10);
1 row processed.
SQLWKS> INSERT INTO emp (nemp, nome, sal, ndep)
2> VALUES (minha_sequencia.nextval, 'Becas', 55000, 10);
1 row processed.
SQLWKS> INSERT INTO emp (nemp, nome, sal, ndep)
2> VALUES (minha_sequencia.nextval, 'Egas', 55000, 10);
1 row processed.
SQLWKS> SELECT nemp, nome FROM emp
2> WHERE nemp < 1000;
NEMP NOME
---------- --------------------
4 Joca
5 Becas
6 Egas
3 rows selected.
5. Seqüência
• Criar uma sequência de 0 a 100, com intervalos de 5 em 5.
Quando chega ao fim volta ao princípio.
CREATE SEQUENCE seq
START WITH 0
INCREMENT BY 5
MAXVALUE 100
MINVALUE 0
CYCLE;
• Apagar Sequências (DROP SEQUENCE)
Para apagar sequências usa-se o comando DROP SEQUENCE
seguido do nome da sequência. Exemplo:
DROP SEQUENCE minha_sequencia;

Outros materiais