Anda di halaman 1dari 54

Faculdade Impacta Tecnologia

Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

Gerenciar Objetos de Esquema

a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
v in Oracle.eTodos
Copyright © 2009,
( t os direitos reservados.
s
p aio licen
S am able
i c ius nsfer
Vin n-tra
no
Faculdade Impacta Tecnologia

Objetivos
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

Ao concluir esta lição, você será capaz de:


• Adicionar constraints
• Criar índices
• Criar índices usando a instrução CREATE TABLE
• Criar índices baseados em function
• Eliminar e definir colunas como UNUSED
• Executar operações FLASHBACK
• Criar e usar tabelas externas s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Objetivos
S am able
Esta lição contém
i c i usinformações
s f er sobre a criação de índices e constraints, além da alteração de objetos
Vinda criação
existentes. Você também
t r n aprenderá sobre tabelas externas e a condição para nomear o índice no
ade
momento - uma constraint de chave primária.
non

Oracle Database 11g: Fundamentos de SQL II 2 - 2


Faculdade Impacta Tecnologia

Agenda da Lição

• Usando a instrução ALTER TABLE para adicionar,


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

modificar e eliminar uma coluna


• Gerenciando constraints
– Adicionando e eliminando uma constraint
– Adiando constraints
– Ativando e desativando uma constraint
• Criando índices
– Usando a instrução CREATE TABLE
a
– Criando índices baseados em function
) has
– Removendo um índice
l ฺ c om ideฺ
• Executando operações de flashback m ai t Gu
g n
• Criando e usando tabelas externas io@ ude
m pa is St
s l sa e th
iu o us
icOracle.
v i n
Copyright © 2009,
( e t os direitos reservados.
Todos
s
p aio licen
S am able
i c ius nsfer
Vin n-tra
no

Oracle Database 11g: Fundamentos de SQL II 2 - 3


Faculdade Impacta Tecnologia

Instrução ALTER TABLE

Use a instrução ALTER TABLE para:


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

• Adicionar uma nova coluna


• Modificar uma coluna existente
• Definir um valor padrão para a nova coluna
• Eliminar uma coluna

s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Instrução ALTER TABLE
S am able
Após a criaçãou
i c i s f er talvez seja necessário alterar a estrutura da tabela porque você omitiu
desuma tabela,

tran a instrução ALTER TABLE.


Vinisson-usando
uma coluna, sua definição de coluna precise ser alterada ou seja necessário remover as colunas. Você
pode fazer
no

Oracle Database 11g: Fundamentos de SQL II 2 - 4


Faculdade Impacta Tecnologia

Instrução ALTER TABLE

Use a instrução ALTER TABLE para adicionar, modificar ou


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

eliminar colunas:
ALTER TABLE table
ADD (column datatype [DEFAULT expr]
[, column datatype]...);

ALTER TABLE table


MODIFY (column datatype [DEFAULT expr]
[, column datatype]...);
s a
) h a
ALTER TABLE table
c m
o ideฺ
i l ฺ
DROP (column);
g ma nt Gu
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Instrução ALTER TABLEm(continuação)
S a able
i c s fer e eliminar colunas de uma tabela usando a instrução ALTER TABLE.
ius nmodificar
Você pode adicionar,
in -tra
Na sintaxe:
V
table on É o nome da tabela
n
ADD|MODIFY|DROP É o tipo de modificação
column É o nome da coluna
datatype É o tipo de dados e o comprimento da coluna
DEFAULT expr Especifica o valor padrão de uma coluna

Oracle Database 11g: Fundamentos de SQL II 2 - 5


Faculdade Impacta Tecnologia

Adicionando uma Coluna

• Você pode usar a cláusula ADD para adicionar colunas:


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

ALTER TABLE dept80


ADD (job_id VARCHAR2(9));

• A nova coluna se torna a última:

s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Diretrizes para Adicionar
S am uma
a b e
lColuna
i c i s fou
• Você podeuadicionar
s ermodificar colunas.
• Nãoin
V t r n
é possívelaespecificar onde a coluna aparecerá. A nova coluna se torna a última.
O exemplo o -
nonslide adiciona uma coluna chamada JOB_ID à tabela DEPT80. A coluna JOB_ID se
n
torna a última coluna na tabela.
Observação: Se uma tabela já contiver linhas quando uma coluna for adicionada, a nova coluna será
inicialmente nula ou usará o valor padrão para todas as linhas. Você só poderá adicionar uma coluna
NOT NULL obrigatória a uma tabela que contenha dados nas outras colunas se especificar um valor
padrão. É possível adicionar uma coluna NOT NULL a uma tabela vazia sem o valor padrão.

Oracle Database 11g: Fundamentos de SQL II 2 - 6


Faculdade Impacta Tecnologia

Modificando uma Coluna


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

• Você pode alterar tipo, tamanho e valor padrão dos dados


de uma coluna.
ALTER TABLE dept80
MODIFY (last_name VARCHAR2(30));

• Uma alteração no valor padrão afeta somente inserções


subsequentes na tabela.

s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Modificando uma Coluna
S am able
ius numa
Você pode modificar r
fdaedefinição de coluna usando a instrução ALTER TABLE com a cláusula
MODIFY. i i c
n tra
A s
modificação coluna pode incluir alterações no tipo, tamanho e valor padrão de uma
V
coluna. n-
n
Diretrizes
o
• É possível aumentar a largura ou precisão de uma coluna numérica.
• A largura das colunas de caracteres pode ser aumentada.
• A largura de uma coluna poderá ser reduzida se:
- A coluna contiver somente valores nulos
- A tabela não tiver linhas
- A redução da largura da coluna não for inferior aos valores existentes
• Você poderá alterar o tipo de dados se a coluna contiver somente valores nulos. A exceção são
as conversões de CHAR para VARCHAR2, que podem ser feitas com dados nas colunas.
• Só será possível converter uma coluna CHAR no tipo de dados de VARCHAR2 ou converter uma
coluna VARCHAR2no tipo de dados de CHAR somente se a coluna contiver valores nulos ou se
você não alterar o tamanho.
• Uma alteração no valor padrão de uma coluna afeta somente as inserções subsequentes na
tabela.

Oracle Database 11g: Fundamentos de SQL II 2 - 7


Faculdade Impacta Tecnologia

Eliminando uma Coluna

Use a cláusula DROP COLUMN para eliminar da tabela colunas


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

que não sejam mais necessárias:

ALTER TABLE dept80


DROP COLUMN job_id;

s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Eliminando uma Coluna
S am able
i c ius uma
Você pode eliminar
s f er de uma tabela usando a instrução ALTER TABLE com a cláusula
coluna
in -tran
DROP COLUMN.
V
Diretrizes on
n pode ou não conter dados.
• A coluna
• Usando a instrução ALTER TABLE DROP COLUMN, somente uma coluna pode ser eliminada
por vez.
• Deverá restar pelo menos uma coluna na tabela depois de ter sido alterada.
• Depois que uma coluna for eliminada, ela não poderá ser recuperada.
• Uma coluna não poderá ser eliminada se ela fizer parte de uma constraint ou parte de uma
chave de índice, exceto se a opção de cascata for adicionada.
• A eliminação de uma coluna poderá demorar um pouco se a coluna tiver um grande número de
valores. Nesse caso, talvez seja melhor defini-la para não ser usada e eliminá-la quando houver
poucos usuários no sistema a fim de evitar bloqueios longos.
Observação: Certas colunas não podem ser eliminadas, como as que fazem parte da chave de
particionamento de uma tabela particionada ou colunas que fazem parte da chave primária de uma
tabela organizada por índice.

Oracle Database 11g: Fundamentos de SQL II 2 - 8


Faculdade Impacta Tecnologia

Opção SET UNUSED

• A opção SET UNUSED pode ser usada para marcar uma ou


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

mais colunas como não usadas.


• A opção DROP UNUSED COLUMNS pode ser usada para
remover as colunas marcadas como não usadas.

ALTER TABLE <table_name>


SET UNUSED(<column_name>);
OU
ALTER TABLE <table_name>
SET UNUSED COLUMN <column_name>; s a
a
)h ฺ
ALTER TABLE <table_name> m
co uide
i l ฺ
DROP UNUSED COLUMNS;
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Opção SET UNUSED m
S a able
A opção SET UNUSED
i c i us smarca f er uma ou mais colunas como não usadas para que possam ser eliminadas
quando aindemanda a
r n recursos de sistema for menor. A especificação dessa cláusula não remove
sobre
de fatoVas colunas
n - t de destino de cada linha na tabela (ou seja, não restaura o espaço em disco usado
n o
por essas colunas). Portanto, o tempo de resposta será mais rápido se você executar a cláusula DROP.
As colunas não usadas são tratadas como se fossem eliminadas, mesmo que seus dados de coluna
permaneçam nas linhas da tabela. Depois que uma coluna tiver sido marcada como não usada, você
não terá acesso a ela. Uma consulta SELECT * não recuperará dados de colunas não usadas. Além
disso, os nomes e os tipos de colunas marcadas como não usadas não serão exibidos durante uma
instrução DESCRIBE, e você poderá adicionar à tabela uma nova coluna com o nome igual ao da
coluna não usada. As informações de SET UNUSED são armazenadas na view de dicionário de
USER_UNUSED_COL_TABS.
Observação: As diretrizes para definir uma coluna como UNUSED são semelhantes às de eliminação
de uma coluna.

Oracle Database 11g: Fundamentos de SQL II 2 - 9


Faculdade Impacta Tecnologia

Opção DROP UNUSED COLUMNS


DROP UNUSED COLUMNS remove da tabela todas as colunas atualmente marcadas como não usadas.
Você pode usar essa instrução quando quiser recuperar espaço em disco extra de colunas não usadas
na tabela. Se a tabela não contiver colunas não usadas, a instrução retornará sem erros.
ALTER TABLE dept80
SET UNUSED (last_name);
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

ALTER TABLE dept80


DROP UNUSED COLUMNS;

a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
( v in e t
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no

Oracle Database 11g: Fundamentos de SQL II 2 - 10


Faculdade Impacta Tecnologia

Agenda da Lição

• Usando a instrução ALTER TABLE para adicionar,


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

modificar e eliminar uma coluna


• Gerenciando constraints
– Adicionando e eliminando uma constraint
– Adiando constraints
– Ativando e desativando uma constraint
• Criando índices
– Usando a instrução CREATE TABLE
a
– Criando índices baseados em function
) has
– Removendo um índice
l ฺ c om ideฺ
• Executando operações de flashback m ai t Gu
g n
• Criando e usando tabelas externasaio@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
S am able
i c ius nsfer
Vin n-tra
no

Oracle Database 11g: Fundamentos de SQL II 2 - 11


Faculdade Impacta Tecnologia

Adicionando uma Sintaxe de Constraint

Use a instrução ALTER TABLE para:


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

• Adicionar ou eliminar uma constraint, mas não modificar


sua estrutura
• Ativar ou desativar constraints
• Adicionar uma constraint NOT NULL usando a cláusula
MODIFY

ALTER TABLE <table_name>


ADD [CONSTRAINT <constraint_name>]
s a
type (<column_name>); a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
am able
Adicionando uma Constraint
S
ius numa
Você pode adicionar r
feconstraint para tabelas existentes usando a instrução ALTER TABLE com a
i c
n tra
cláusula iADD. s
V
Na sintaxe:on-
tablen É o nome da tabela
constraint É o nome da constraint
type É o tipo da constraint
column É o nome da coluna afetada pela constraint
A sintaxe do nome da constraint é opcional, embora recomendada. Se você não nomear suas
constraints, o sistema gerará nomes de constraint.
Diretrizes
• Você pode adicionar, eliminar, ativar ou desativar uma constraint, mas não pode modificar sua
estrutura.
• Uma constraint NOT NULL pode ser adicionada a uma coluna com o uso da cláusula MODIFY da
instrução ALTER TABLE.
Observação: Uma coluna NOT NULL só poderá ser definida se a tabela estiver vazia ou se a coluna
tiver um valor para cada linha.

Oracle Database 11g: Fundamentos de SQL II 2 - 12


Faculdade Impacta Tecnologia

Adicionando uma Constraint

Adicione uma constraint FOREIGN KEY à tabela EMP2


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

indicando que um gerente já deve existir como funcionário


válido na tabela EMP2.

ALTER TABLE emp2


MODIFY employee_id Primary Key;

ALTER TABLE emp2


ADD CONSTRAINT emp_mgr_fk s a
FOREIGN KEY(manager_id) a
)h ฺ
m
co uide
REFERENCES emp2(employee_id);
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
am ab(continuação)
Adicionando uma Constraint
S le
ius no
O primeiro exemplo slide
f rmodifica a tabela EMP2 para adicionar uma constraint PRIMARY KEY
eObserve
na coluna
i i c
n tran s
EMPLOYEE_ID. que como nenhum nome de constraint é fornecido, ela é
V -
nomeada automaticamente
n pelo servidor Oracle. O segundo exemplo do slide cria uma constraint
n o
FOREIGN KEY na tabela EMP2. A constraint assegura que exista um gerente como um funcionário
válido na tabela EMP2.

Oracle Database 11g: Fundamentos de SQL II 2 - 13


Faculdade Impacta Tecnologia

ON DELETE CASCADE
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

Delete linhas filhas quando uma chave pai for deletada:

ALTER TABLE Emp2 ADD CONSTRAINT emp_dt_fk


FOREIGN KEY (Department_id)
REFERENCES departments(department_id) ON DELETE CASCADE;

s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
ON DELETE CASCADE m
S a able
A ação ON DELETE
i c i us CASCADE
s f er permite que os dados da chave pai com referência da tabela filha
tabelaV
in -dependem
sejam deletados,
filha, que
mas
t r annão atualizados.
dos valores
Quando os dados na chave pai são deletados, todas as linhas na
deletados da chave pai, também são deletadas. Para
n o n
especificar essa ação referencial, inclua a opção ON DELETE CASCADE na definição da constraint
FOREIGN KEY.

Oracle Database 11g: Fundamentos de SQL II 2 - 14


Faculdade Impacta Tecnologia

Adiando Constraints
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

As constraints podem ter os seguintes atributos:


• DEFERRABLE ou NOT DEFERRABLE
• INITIALLY DEFERRED ou INITIALLY IMMEDIATE
Adiando constraint sobre a
ALTER TABLE dept2 criação
ADD CONSTRAINT dept2_id_pk
PRIMARY KEY (department_id)
DEFERRABLE INITIALLY DEFERRED

s a
SET CONSTRAINTS dept2_id_pk IMMEDIATE Alterando um atributo de
constraint específico
)h ฺ a
m
co uide
i l
a todasฺ
ALTER SESSION
g m
Alterando
constraints
n t
de uma
Gsessão
as
SET CONSTRAINTS= IMMEDIATE
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Adiando Constraintsam le
S a b
Você pode adiar
i c i s f er de verificação de validade até o final da transação. Uma constraint
usas constraints
Vioncommit
será adiada
violada, - t r ancom
se o sistema
fará
verificar que ela é atendida apenas no commit. Se uma constraint adiada for
que seja feito o rollback da transação. Se uma constraint for imediata
n o n
(não adiada), ela será verificada no final de cada instrução. Se ela for violada, será feito o rollback da
instrução imediatamente. Se uma constraint provocar uma ação (por exemplo, DELETE CASCADE),
essa ação será sempre tomada como parte da instrução que a provocou, seja ela adiada ou imediata.
Use a instrução SET CONSTRAINTS a fim de especificar, para uma determinada transação, se uma
constraint adiável é verificada seguindo cada instrução DML ou quando a transação é submetida a
commit. Para criar constraints adiáveis, você deve criar um índice não-exclusivo para essa constraint.
Você pode definir constraints como adiáveis ou não adiáveis e inicialmente adiadas ou inicialmente
imediatas. Esses atributos podem ser diferentes para cada constraint.
Cenário de uso: A política da empresa determina que o número de departamento 40 deve ser
alterado para 45. A alteração da coluna DEPARTMENT_ID afeta funcionários designados a esse
departamento. Portanto, você torna as chaves primária e estrangeira adiáveis e inicialmente adiadas.
As informações do departamento e do funcionário são atualizadas e, no momento do commit, todas
as linhas são validadas.

Oracle Database 11g: Fundamentos de SQL II 2 - 15


Faculdade Impacta Tecnologia

Diferença Entre INITIALLY DEFERRED e


INITIALLY IMMEDIATE
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

INITIALLY DEFERRED Aguarda para verificar a constraint


até que a transação termine
INITIALLY IMMEDIATE Verifica a constraint no final da
execução da instrução

CREATE TABLE emp_new_sal (salary NUMBER


CONSTRAINT sal_ck
CHECK (salary > 100)
DEFERRABLE INITIALLY IMMEDIATE,
s a
bonus NUMBER a
)h ฺ
CONSTRAINT bonus_ck
m
co uide
CHECK (bonus > 0 )
i l ฺ
DEFERRABLE INITIALLY DEFERRED );
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
S am abDEFERRED
Diferença Entre INITIALLY le e INITIALLY IMMEDIATE

i c
s como
Uma constraintudefinida
i IMMEDIATE.
s f er Aadiável pode ser especificada como INITIALLY DEFERRED ou
in -tran
INITIALLY
V
cláusula INITIALLY IMMEDIATE é a padrão.

nondo slide:
No exemplo
• A constraint sal_ck é criada como DEFERRABLE INITIALLY IMMEDIATE
• A constraint bonus_ck é criada como DEFERRABLE INITIALLY DEFERRED
Depois de criar a tabela emp_new_sal conforme mostrado no slide, tente inserir valores na tabela e
observe os resultados. Quando as constraints sal_ck e bonus_ck são efetivadas, as linhas são
inseridas sem erro.
Exemplo 1: Insira uma linha que viole sal_ck. Na instrução CREATE TABLE, sal_ck é
especificada como uma constraint inicialmente imediata. Isso significa que a constraint é verificada
imediatamente depois da instrução INSERT, e um erro é observado.
INSERT INTO emp_new_sal VALUES(90,5);

Exemplo 2: Insira uma linha que viole bonus_ck. Na instrução CREATE TABLE, bonus_ck é
especificada como uma constraint adiável e inicialmente adiada. Portanto, a constraint não é
verificada até que você use COMMIT ou defina o estado da constraint novamente para imediato.

Oracle Database 11g: Fundamentos de SQL II 2 - 16


Faculdade Impacta Tecnologia

Diferença Entre INITIALLY DEFERRED e INITIALLY IMMEDIATE (continuação)


INSERT INTO emp_new_sal VALUES(110, -1);

A inserção da linha foi executada com êxito. Mas observe que há um erro durante o commit da
transação.
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

COMMIT;

O commit falhou em razão de uma violação de constraint. Portanto, nesse momento, o banco de
dados faz o rollback da transação.
Exemplo 3: Defina o status DEFERRED para todas as constraints que possam ser adiadas. Observe
que você também pode definir o status DEFERRED para uma única constraint se necessário.
SET CONSTRAINTS ALL DEFERRED;

s a
Agora, se você tentar inserir uma linha que viole a constraint sal_ck, a instrução será executada
)h ฺa
com êxito. m
INSERT INTO emp_new_sal VALUES(90,5);
i l ฺ co uide
g ma nt G
@ ufalha
Mas observe que há um erro durante o commit da transação. Aiotransação
a t de e é feito seu rollback.
m i s S
p de COMMIT.
Isso ocorre porque as duas constraints são verificadas depois
a h
COMMIT;
i u sls use t
i n ic to
i o (v nse
p a lice
S am IMMEDIATE
Exemplo 4: Defina o status
a b le para as duas constraints definidas como DEFERRED no
i c s f er ALL IMMEDIATE;
iusCONSTRAINTS
exemplo anterior.
Vin n-tran
SET

no
Ocorrerá um erro se você tentar inserir uma linha que viole sal_ck ou bonus_ck.
INSERT INTO emp_new_sal VALUES(110, -1);

Observação: Se você criar uma tabela sem especificar adiabilidade da constraint, a constraint será
marcada imediatamente no final de cada instrução. Por exemplo, com a instrução CREATE TABLE
da tabela newemp_details, se você não especificar a adiabilidade da constraint
newemp_det_pk, a constraint será verificada imediatamente.
CREATE TABLE newemp_details(emp_id NUMBER, emp_name
VARCHAR2(20),
CONSTRAINT newemp_det_pk PRIMARY KEY(emp_id));
Durante a tentativa de adiar a constraint newemp_det_pk que não é adiável, ocorre o seguinte
erro:
SET CONSTRAINT newemp_det_pk DEFERRED;

Oracle Database 11g: Fundamentos de SQL II 2 - 17


Faculdade Impacta Tecnologia

Eliminando uma Constraint

• Remova a constraint do gerente da tabela EMP2:


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

ALTER TABLE emp2


DROP CONSTRAINT emp_mgr_fk;

• Remova a constraint PRIMARY KEY da tabela DEPT2 e


elimine a constraint associada FOREIGN KEY da coluna
EMP2.DEPARTMENT_ID:

ALTER TABLE dept2 s a


DROP PRIMARY KEY CASCADE;
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
am able
Eliminando uma Constraint
S
Para eliminar uma
f r você pode identificar o nome dela nas views do dicionário de dados
ius constraint,
eUSER_CONS_COLUMNS.
i i c
n tran
USER_CONSTRAINTS s e Em seguida, use a instrução ALTER TABLE
V
com a cláusulan-DROP. A opção CASCADE da cláusula DROP faz com que qualquer constraint
n o
dependente também seja eliminada.
Sintaxe
ALTER TABLE table
DROP PRIMARY KEY | UNIQUE (column) |
CONSTRAINT constraint [CASCADE];
Na sintaxe:
table É o nome da tabela
column É o nome da coluna afetada pela constraint
constraint É o nome da constraint
Quando você elimina uma constraint de integridade, ela não é mais imposta pelo servidor Oracle e
não está mais disponível no dicionário de dados.

Oracle Database 11g: Fundamentos de SQL II 2 - 18


Faculdade Impacta Tecnologia

Desativando Constraints

• Execute a cláusula DISABLE da instrução ALTER TABLE


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

para desativar uma constraint de integridade.


• Aplique a opção CASCADE para desativar constraints de
integridade dependentes.

ALTER TABLE emp2


DISABLE CONSTRAINT emp_dt_fk;

s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
am able
Desativando uma Constraint
S
Você pode desativar
i c er
s umafconstraint
iuDISABLE.
s
sem eliminá-la ou recriá-la usando a instrução ALTER TABLE
in -tran
com a cláusula
V
Sintaxe on
ALTER
n TABLE table
DISABLE CONSTRAINT constraint [CASCADE];
Na sintaxe:
table É o nome da tabela
constraint É o nome da constraint
Diretrizes
• Você pode usar a cláusula DISABLE nas instruções CREATE TABLE e ALTER TABLE.
• A cláusula CASCADE desativa constraints de integridade dependentes.
• A desativação de uma constraint de chave exclusiva ou primária remove o índice exclusivo.

Oracle Database 11g: Fundamentos de SQL II 2 - 19


Faculdade Impacta Tecnologia

Ativando Constraints
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

• Ative uma constraint de integridade atualmente desativada


na definição de tabela usando a cláusula ENABLE.
ALTER TABLE emp2
ENABLE CONSTRAINT emp_dt_fk;

• Um índice UNIQUE será criado automaticamente se você


ativar uma chave UNIQUE ou uma constraint PRIMARY KEY.

s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Ativando uma Constraint
S am able
i c s fer sem eliminá-la ou recriá-la usando a instrução ALTER TABLE com
iusumanconstraint
Você pode ativar

V in -tra
a cláusula ENABLE.
Sintaxe on
ALTERn TABLE table
ENABLE CONSTRAINT constraint;
Na sintaxe:
table É o nome da tabela
constraint É o nome da constraint
Diretrizes
• Se você ativar uma constraint, ela se aplicará a todos os dados na tabela. Todos os dados na
tabela devem estar de acordo com a constraint.
• Se você ativar uma chave UNIQUE ou uma constraint PRIMARY KEY, um índice UNIQUE ou
PRIMARY KEY será criado automaticamente. Se já existir um índice, ele poderá ser usado por
essas chaves.
• Você pode usar a cláusula ENABLE nas instruções CREATE TABLE e ALTER TABLE.

Oracle Database 11g: Fundamentos de SQL II 2 - 20


Faculdade Impacta Tecnologia

Ativando uma Constraint (continuação)


Diretrizes (continuação)
• A ativação de uma constraint de chave primária que foi desativada com a opção CASCADE não
ativa nenhuma chave estrangeira que dependa da chave primária.
• Para ativar uma constraint UNIQUE ou PRIMARY KEY, você deve ter os privilégios necessários
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

para criar um índice na tabela.

a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
( v in e t
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no

Oracle Database 11g: Fundamentos de SQL II 2 - 21


Faculdade Impacta Tecnologia

Constraints em Cascata

• A cláusula CASCADE CONSTRAINTS é usada juntamente


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

com a cláusula DROP COLUMN.


• A cláusula CASCADE CONSTRAINTS elimina todas as
constraints de integridade referenciais relacionadas às
chaves primária e exclusiva definidas nas colunas
eliminadas.
• A cláusula CASCADE CONSTRAINTS também elimina todas
as constraints de várias colunas definidas nas colunas
eliminadas. s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Constraints em Cascata
S am able
i c i us o susofedar cláusula CASCADE CONSTRAINTS. Suponha que a tabela TEST1
Esta instrução ilustra

Vin CREATE
seja criada n
como seasegue:
t r
-
noncol1_pk NUMBER PRIMARY KEY,
TABLE test1 (

col2_fk NUMBER,
col1 NUMBER,
col2 NUMBER,
CONSTRAINT fk_constraint FOREIGN KEY (col2_fk) REFERENCES
test1,
CONSTRAINT ck1 CHECK (col1_pk > 0 and col1 > 0),
CONSTRAINT ck2 CHECK (col2_fk > 0));
Um erro é retornado para as seguintes instruções:
ALTER TABLE test1 DROP (col1_pk); —col1_pk é uma chave pai.
ALTER TABLE test1 DROP (col1); —col1 é indicada pela constraint de
várias colunas, ck1.

Oracle Database 11g: Fundamentos de SQL II 2 - 22


Faculdade Impacta Tecnologia

Constraints em Cascata
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

Exemplo:
ALTER TABLE emp2
DROP COLUMN employee_id CASCADE CONSTRAINTS;

ALTER TABLE test1


DROP (col1_pk, col2_fk, col1) CASCADE CONSTRAINTS;
s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Constraints em Cascata
S am(continuação)
a b le
A submissão dauinstrução
i r elimina a coluna EMPLOYEE_ID, a constraint da chave primária e
s fea seguir
i c s
an chave estrangeira relacionadas à constraint da chave primária da tabela
in de-tqualquer
as constraints
EMP2:V r
non emp2 DROP COLUMN employee_id CASCADE CONSTRAINTS;
ALTER TABLE
Se todas as colunas indicadas pelas constraints definidas nas colunas eliminadas também forem
eliminadas, CASCADE CONSTRAINTS não será necessária. Por exemplo, supondo que nenhuma
outra constraint referencial de outras tabelas se refira à coluna COL1_PK, é possível submeter a
instrução a seguir sem a cláusula CASCADE CONSTRAINTS da tabela TEST1 criada na página
anterior:
ALTER TABLE test1 DROP (col1_pk, col2_fk, col1);

Oracle Database 11g: Fundamentos de SQL II 2 - 23


Faculdade Impacta Tecnologia

Renomeando Colunas de Tabela e Constraints

Use a cláusula RENAME COLUMN da instrução ALTER TABLE


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

para renomear colunas da tabela.


a
ALTER TABLE marketing RENAME COLUMN team_id
TO id;

Use a cláusula RENAME CONSTRAINT da instrução ALTER


TABLE para renomear qualquer constraint existente para
uma tabela. s a
a
) bh ฺ
m
co uide
ALTER TABLE marketing RENAME CONSTRAINT mktg_pk i l ฺ
TO new_mktg_pk; g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Renomeando Colunas
S am de Tabela
a b le e Constraints
i c i us suma
Quando você renomeia
f ercoluna de tabela, o novo nome não deve entrar em conflito com o nome
dantabela. Não é possível usar qualquer outra cláusula juntamente com a cláusula
VinCOLUMN.
de qualquer colunaa
- t r
nondo slide usam a tabela marketing com a chave primária mktg_pk definida na
RENAME
Os exemplos
coluna id.
CREATE TABLE marketing (team_id NUMBER(10),
target VARCHAR2(50),
CONSTRAINT mktg_pk PRIMARY KEY(team_id));

O exemplo a mostra que a coluna id da tabela marketing é renomeada para mktg_id. O exemplo b
mostra que mktg_pk é renomeado para new_mktg_pk.
Quando você renomeia qualquer constraint existente para uma tabela, o novo nome não deve entrar
em conflito com nenhum nome de constraint. É possível usar a cláusula RENAME CONSTRAINT
para renomear nomes de constraint gerados pelo sistema.

Oracle Database 11g: Fundamentos de SQL II 2 - 24


Faculdade Impacta Tecnologia

Agenda da Lição

• Usando a instrução ALTER TABLE para adicionar,


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

modificar e eliminar uma coluna


• Gerenciando constraints
– Adicionando e eliminando uma constraint
– Adiando constraints
– Ativando e desativando uma constraint
• Criando índices
– Usando a instrução CREATE TABLE
a
– Criando índices baseados em function
) has
– Removendo um índice
l ฺ c om ideฺ
• Executando operações de flashback m ai t Gu
g n
• Criando e usando tabelas externasaio@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
S am able
i c ius nsfer
Vin n-tra
no

Oracle Database 11g: Fundamentos de SQL II 2 - 25


Faculdade Impacta Tecnologia

Visão Geral de Índices


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

Os índices são criados:


• Automaticamente
– Criação de PRIMARY KEY
– Criação de UNIQUE KEY
• Manualmente
– A instrução CREATE INDEX
– A instrução CREATE TABLE

s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Visão Geral de Índices
S am able
Podem ser criados
i c i usdoisstipos
f erde índices. Um tipo é um índice exclusivo. O servidor Oracle cria
in -haja
automaticamente um
r níndice exclusivo quando você define uma coluna ou grupo de colunas em uma
auma
tabelaV
para quen t constraint de chave PRIMARY KEY ou UNIQUE. O nome do índice é o
n o
dado à constraint.
O outro tipo de índice é um não-exclusivo, que um usuário pode criar. Por exemplo, você pode criar
um índice para uma coluna FOREIGN KEY a ser usado em joins para melhorar a velocidade de
recuperação.
Você pode criar um índice em uma ou mais colunas emitindo a instrução CREATE INDEX.
Para obter mais informações, consulte Oracle Database 11g SQL Reference.
Observação: É possível criar manualmente um índice exclusivo, mas é recomendado criar uma
constraint exclusiva, que cria implicitamente um índice exclusivo.

Oracle Database 11g: Fundamentos de SQL II 2 - 26


Faculdade Impacta Tecnologia

CREATE INDEX com a instrução CREATE TABLE


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

CREATE TABLE NEW_EMP


(employee_id NUMBER(6)
PRIMARY KEY USING INDEX
(CREATE INDEX emp_id_idx ON
NEW_EMP(employee_id)),
first_name VARCHAR2(20),
last_name VARCHAR2(25));

s a
SELECT INDEX_NAME, TABLE_NAME a
)h ฺ
FROM USER_INDEXES m
co uide
WHERE TABLE_NAME = 'NEW_EMP'; i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
am ableCREATE TABLE
CREATE INDEX com a instrução
S
No exemplo douslide,
i c i s f er CREATE INDEX é usada com a instrução CREATE TABLE para
s a cláusula
V ndo nnome tradanconstraint PRIMARY KEY.
criar umiíndice de chave primária explicitamente. Ao criar a chave primária, dê a seus índices nomes
diferentes -
Você podenoconsultar a view do dicionário de dados USER_INDEXES para obter informações sobre
seus índices.
Observação: Aprenda mais sobre USER_INDEXES na lição “Gerenciando Objetos com Views do
Dicionário de Dados”.
O exemplo a seguir ilustrará o comportamento do banco de dados se o índice não for nomeado
explicitamente:
CREATE TABLE EMP_UNNAMED_INDEX
(employee_id NUMBER(6) PRIMARY KEY ,
first_name VARCHAR2(20),
last_name VARCHAR2(25));

SELECT INDEX_NAME, TABLE_NAME


FROM USER_INDEXES
WHERE TABLE_NAME = 'EMP_UNNAMED_INDEX';

Oracle Database 11g: Fundamentos de SQL II 2 - 27


Faculdade Impacta Tecnologia

CREATE INDEX com a Instrução CREATE TABLE (continuação)


Observe que o servidor Oracle fornece um nome genérico ao índice criado para a coluna PRIMARY
KEY.
É possível também usar um índice existente para a coluna PRIMARY KEY —por exemplo, quando
houver uma grande carga de dados e você quiser acelerar a operação. Você pode desativar as
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

constraints durante a execução da carga e, em seguida, ativá-las, caso em que um índice exclusivo na
chave primária ainda fará com que os dados sejam verificados durante a carga. Portanto, um índice
não-exclusivo pode ser criado na coluna designada como PRIMARY KEY e, em seguida, ser criada
uma coluna PRIMARY KEY e especificado que ela deve usar o índice existente. Os exemplos a seguir
ilustram esse processo:
Etapa 1: Crie a tabela:

CREATE TABLE NEW_EMP2


(employee_id NUMBER(6),
first_name VARCHAR2(20),
last_name VARCHAR2(25)
s a
); a
)h ฺ
m
co uide
Etapa 2: Crie o índice: i l ฺ
CREATE INDEX emp_id_idx2 ON g ma nt G
new_emp2(employee_id);
a i o@ tude
m p is S
l s a th
Etapa 3: Crie a chave primária: s e
usKEY (employee_id) USING INDEX
iciuPRIMARY
ALTER TABLE new_emp2inADD t o
emp_id_idx2; o (v se
i e n
m pa e lic
s Sa rabl
i c iu nsfe
n
Vi n-tra
no

Oracle Database 11g: Fundamentos de SQL II 2 - 28


Faculdade Impacta Tecnologia

Índices Baseados em Function


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

• Um índice com base em function é baseado em expressões.


• A expressão do índice é criada com base em colunas de
tabelas, constantes, functions SQL e functions definidas
pelo usuário.

CREATE INDEX upper_dept_name_idx


ON dept2(UPPER(department_name));

s a
SELECT * a
)h ฺ
FROM dept2 m
co uide
i l ฺ
WHERE UPPER(department_name) = 'SALES';
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
m ble
Índices Baseados emaFunction
S ra definidos com as palavras-chave UPPER(column_name)ou
s em function
Os índices comubase
i f e
i nic trans permitem pesquisas sem distinção entre maiúsculas e minúsculas. Por
LOWER(column_name)
V
n o n- o seguinte índice:
exemplo, considere
CREATE INDEX upper_last_name_idx ON emp2 (UPPER(last_name));
Isso facilita o processamento de consultas, como:
SELECT * FROM emp2 WHERE UPPER(last_name) = 'KING';
O servidor Oracle usa o índice somente quando essa function em particular é usada em uma consulta.
Por exemplo, a seguinte instrução pode usar o índice, mas sem a cláusula WHERE, o servidor Oracle
pode executar uma varredura completa da tabela:
SELECT *
FROM employees
WHERE UPPER (last_name) IS NOT NULL
ORDER BY UPPER (last_name);
Observação: O parâmetro de inicialização QUERY_REWRITE_ENABLED deve ser definido como
TRUE para que um índice com base em function seja usado.
O servidor Oracle trata índices com colunas marcadas como DESC como índices com base em
function. As colunas marcadas como DESC são classificadas em ordem decrescente.

Oracle Database 11g: Fundamentos de SQL II 2 - 29


Faculdade Impacta Tecnologia

Removendo um Índice
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

• Remova um índice do dicionário de dados usando o


comando DROP INDEX:
DROP INDEX index;

• Remova o índice UPPER_DEPT_NAME_IDX do dicionário


de dados:
DROP INDEX upper_dept_name_idx;

s a
a
)h ฺ
• Para eliminar um índice, você deve ser seu proprietário m
co uidou
e
a i l ฺ
ter o privilégio DROP ANY INDEX. m nt G
g
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Removendo um Índice
S am able
Não é possível u
i c i modificar
s eder índice
s fíndices. Para alterar um índice, você deve eliminá-lo e, em seguida, recriá-
lo. Remova
V i n tran
uma definição do dicionário de dados emitindo a instrução DROP INDEX. Para

n o n- você deve ser seu proprietário ou ter o privilégio DROP ANY INDEX.
eliminar um índice,
Na sintaxe:
index É o nome do índice
Observação: Se você eliminar uma tabela, os índices, as constraints e os triggers serão
automaticamente eliminados, mas as views e as sequências permanecerão.

Oracle Database 11g: Fundamentos de SQL II 2 - 30


Faculdade Impacta Tecnologia

DROP TABLE … PURGE


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

DROP TABLE dept80 PURGE;

s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
DROP TABLE … PURGEm
S a able
O Oracle Database
i us fornecef r recurso para eliminar tabelas. Quando você elimina uma tabela,o
eum
banco dein i c s
n imediatamente o espaço associado a ela. Em vez disso, ele renomeia a
dados nãoalibera
tabelaV
e a coloca
n - t r
em uma lixeira, de onde é possível recuperá-la mais tarde com a instrução
n o
FLASHBACK TABLE, se você perceber que eliminou a tabela por engano. Se você quiser liberar
imediatamente o espaço associado à tabela no momento da emissão da instrução DROP TABLE,
inclua a cláusula PURGE conforme mostrado no slide.
Especifique PURGE somente se você quiser eliminar a tabela e liberar o espaço associado a ela em
uma única etapa. Se você especificar PURGE, o banco de dados não colocará a tabela e seus objetos
dependentes na lixeira.
O uso dessa cláusula é equivalente a eliminar a tabela e, em seguida, expurgá-la da lixeira. Essa
cláusula elimina uma etapa no processo. Ela também oferecerá segurança aprimorada se você quiser
evitar que material confidencial apareça na lixeira.
Observação: Você não pode fazer rollback de uma instrução DROP TABLE com a cláusula PURGE,
e a tabela não poderá ser recuperada se for eliminada com a cláusula PURGE. Esse recurso não estava
disponível em releases anteriores.

Oracle Database 11g: Fundamentos de SQL II 2 - 31


Faculdade Impacta Tecnologia

Agenda da Lição

• Usando a instrução ALTER TABLE para adicionar,


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

modificar e eliminar uma coluna


• Gerenciando constraints
– Adicionando e eliminando uma constraint
– Adiando constraints
– Ativando e desativando uma constraint
• Criando índices
– Usando a instrução CREATE TABLE
a
– Criando índices baseados em function
) has
– Removendo um índice
l ฺ c om ideฺ
• Executando operações de flashback m ai t Gu
g n
• Criando e usando tabelas externasaio@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
S am able
i c ius nsfer
Vin n-tra
no

Oracle Database 11g: Fundamentos de SQL II 2 - 32


Faculdade Impacta Tecnologia

Instrução FLASHBACK TABLE


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

• Permite recuperar tabelas em um determinado momento


com uma única instrução
• Restaura dados da tabela juntamente com índices
associados e constraints
• Permite reverter a tabela e seu conteúdo em um
determinado momento ou SCN

s a
a
)h ฺ
m
co uide
i l ฺ
SCN g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Instrução FLASHBACK TABLE
S am able
O Oracle Flashback
i us Table f r recuperar tabelas em um determinado momento com uma única
epermite
i c s
anrestaurar
Vinestiver
instrução. É possível dados de tabela com índices associados e constraints enquanto o banco
de dados n - t r
on-line, desfazendo alterações somente para as tabelas especificadas.
n o
O recurso Flashback Table é semelhante a uma ferramenta de reparo personalizado. Por exemplo, se
um usuário deletar acidentalmente linhas importantes de uma tabela e quiser recuperá-las, você
poderá usar a instrução FLASHBACK TABLE para restaurar a tabela para o momento antes da
deleção e ver as linhas ausentes na tabela.
Ao utilizar a instrução FLASHBACK TABLE, você pode reverter a tabela e seu conteúdo para um
determinado momento ou um SCN.
Observação: O SCN (número de alteração do sistema) é um valor inteiro associado a cada alteração
no banco de dados. É um número incremental exclusivo no banco de dados. Sempre que você
submeter uma transação a commit, um novo SCN é registrado.

Oracle Database 11g: Fundamentos de SQL II 2 - 33


Faculdade Impacta Tecnologia

Instrução FLASHBACK TABLE


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

• Ferramenta de reparo para modificações acidentais na tabela


– Restaura uma tabela para um momento anterior
– Vantagens: Fácil de usar, disponibilidade e execução rápida
– É executada no local
• Sintaxe:

FLASHBACK TABLE[schema.]table[,
[ schema.]table ]...
TO { TIMESTAMP | SCN } expr
[ { ENABLE | DISABLE } TRIGGERS ]; s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Instrução FLASHBACK TABLE
S am ab(continuação)
le
i c s f er
ius Personalizado
Recurso de Reparo
O Oraclein
V Databasera
t n um comando SQL DDL (Data Definition Language) , FLASHBACK
fornece
TABLE, para -
nrestaurar o estado de uma tabela para um momento anterior no caso de deleção ou
noinvoluntária.
modificação O comando FLASHBACK TABLE é uma ferramenta de reparo
personalizado para restaurar dados em uma tabela, juntamente com atributos associados, como
índices ou views. Isso é feito enquanto o banco de dados está on-line, fazendo o rollback somente das
alterações subsequentes à tabela fornecida. Comparado a mecanismos de recuperação tradicionais,
esse recurso oferece vantagens significativas, como facilidade de uso, disponibilidade e restauração
rápida. Ele também tira a responsabilidade do DBA de localizar e restaurar propriedades específicas
da aplicação. O recurso de tabela flashback não trata de danos físicos causados por um disco
inválido.
Sintaxe
Você pode chamar uma operação FLASHBACK TABLE em uma ou mais tabelas, mesmo que em
esquemas diferentes. Especifique o momento para o qual você deseja reverter, fornecendo um
timestamp válido. Por padrão, os triggers do banco de dados são desativados durante a operação de
flashback para todas as tabelas envolvidas. Você pode substituir esse comportamento padrão
especificando a cláusula ENABLE TRIGGERS.
Observação: Para obter mais informações sobre a semântica da lixeira e de flashback, consulte o
Oracle Database Administrator’s Guide 11g Release 1 (11.1).
Oracle Database 11g: Fundamentos de SQL II 2 - 34
Faculdade Impacta Tecnologia

Usando a Instrução FLASHBACK TABLE


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

DROP TABLE emp2;

SELECT original_name, operation, droptime FROM


recyclebin;

… s a
) h a
FLASHBACK TABLE emp2 TO BEFORE DROP; m
co uideฺ
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Usando a Instrução FLASHBACK
S am ableTABLE
i c ius nsfer
Sintaxes e Exemplos

Vin restaura
O exemplo
- t r aa tabela EMP2 para um estado antes da instrução DROP.
onverdade uma tabela de dicionário de dados que contém informações sobre objetos
A lixeira é na
n
eliminados. As tabelas eliminadas e todos os objetos associados—como índices, constraints, tabelas
aninhadas etc.—não são removidos e ainda ocupam espaço. Eles continuam a contar cotas de espaço
do usuário até que sejam especificamente expurgados da lixeira ou até serem expurgados pelo banco
de dados em razão de restrições de espaço do tablespace.
Cada usuário pode se considerar proprietário de uma lixeira porque, a menos que ele tenha o
privilégio SYSDBA, os únicos objetos aos quais o usuário terá acesso na lixeira serão os pertencentes
a ele. Um usuário pode exibir seus objetos na lixeira usando a seguintes instrução:
SELECT * FROM RECYCLEBIN;
Quando você elimina um usuário, nenhum dos objetos pertencentes a ele é colocado na lixeira e
nenhum dos objetos da lixeira é expurgado.
Você pode expurgar a lixeira com a seguinte instrução:
PURGE RECYCLEBIN;

Oracle Database 11g: Fundamentos de SQL II 2 - 35


Faculdade Impacta Tecnologia

Agenda da Lição

• Usando a instrução ALTER TABLE para adicionar,


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

modificar e eliminar uma coluna


• Gerenciando constraints
– Adicionando e eliminando uma constraint
– Adiando constraints
– Ativando e desativando uma constraint
• Criando índices
– Usando a instrução CREATE TABLE
a
– Criando índices baseados em function
) has
– Removendo um índice
l ฺ c om ideฺ
• Executando operações de flashback m ai t Gu
g n
• Criando e usando tabelas externasaio@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
S am able
i c ius nsfer
Vin n-tra
no

Oracle Database 11g: Fundamentos de SQL II 2 - 36


Faculdade Impacta Tecnologia

Tabelas Externas
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Tabelas Externas
S am able
Uma tabela externa
i u s fetabela
é uma r somente para leitura cujos metadados são armazenados no banco de
n c tdados
dados, mas icujos
Viconsiderada
pode ser r a ssão armazenados fora do banco de dados. Essa definição de tabela externa
ncomo uma view usada para executar qualquer consulta SQL de dados externos
o
sem precisar n
que
- os dados externos sejam carregados primeiro no banco de dados. Os dados da tabela
n
externa podem ser consultados e associados diretamente e em paralelo sem requerer que os dados
externos sejam carregados primeiro no banco de dados. Você pode usar SQL, PL/SQL e Java para
consultar os dados em uma tabela externa.
A diferença principal entre as tabelas externas e as comuns é que as tabelas organizadas
externamente são somente para leitura. Não é possível executar nenhuma operação DML (Data
Manipulation Language) e nenhum índice pode ser criado. Entretanto, você pode criar uma tabela
externa e descarregar dados usando o comando CREATE TABLE AS SELECT.
O servidor Oracle oferece dois drivers de acesso principais para tabelas externas. Um, o driver de
acesso do carregador (ou ORACLE_LOADER), é usado para ler dados de arquivos externos cujo
formato possa ser interpretado pelo utilitário SQL*Loader. Observe que nem toda funcionalidade do
SQL*Loader é compatível com tabelas externas. O driver de acesso ORACLE_DATAPUMP pode ser
usado para importar e exportar dados usando um formato independente da plataforma. O driver de
acesso ORACLE_DATAPUMP grava linhas de uma instrução SELECT para serem carregadas em uma
tabela externa como parte de uma instrução CREATE TABLE ...ORGANIZATION
EXTERNAL...AS SELECT. Em seguida, você pode usar SELECT para ler dados desse arquivo de
dados. Também é possível criar uma definição de tabela externa em outro sistema e usar esse arquivo
de dados. Isso permite que os dados sejam movidos entre os bancos de dados Oracle.

Oracle Database 11g: Fundamentos de SQL II 2 - 37


Faculdade Impacta Tecnologia

Criando um Diretório para a Tabela Externa

Crie um objeto DIRECTORY que corresponda ao diretório no


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

sistema de arquivos em que reside a origem de dados externos.

CREATE OR REPLACE DIRECTORY emp_dir


AS '/…/emp_dir';

GRANT READ ON DIRECTORY emp_dir TO hr;


s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Exemplo de Criação a dem le Externa
uma Tabela
S a b
Use a instruçãouCREATE
i c i s er
s fDIRECTORY para criar um objeto de diretório. Um objeto de diretório

Vinexternos.
especifica um apelido
t r npara um diretório no sistema de arquivos do servidor no qual reside a origem
aVocê
de dados
o n - pode usar os nomes do diretório ao se referir a uma origem de dados
n
externos, em vez de codificar o nome do caminho do sistema operacional, para obter mais
flexibilidade no gerenciamento do arquivo.
Para criar diretórios, é necessário ter privilégios de sistema CREATE ANY DIRECTORY. Ao criar um
diretório, você recebe automaticamente os privilégios de objeto READ e WRITE e pode conceder
esses mesmos privilégios a outros usuários e funções. O DBA também pode conceder esses
privilégios a outros usuários e funções.
Um usuário precisa de privilégios READ para todos os diretórios usados nas tabelas externas a serem
acessadas e privilégios WRITE para os diretórios em que estão sendo usados arquivos de log, de
registros incorretos e de descarte.
Além disso, um privilégio WRITE é necessário quando a estrutura da tabela externa é usada para
descarregar dados.
A Oracle também fornece o tipo ORACLE_DATAPUMP, com o qual é possível descarregar dados (ou
seja, ler dados de uma tabela no banco de dados e inseri-los em uma tabela externa) e, em seguida,
recarregá-los no banco de dados Oracle. Essa é uma operação de uma única vez que pode ser
executada quando a tabela for criada. Depois da criação e preenchimento inicial, você pode atualizar,
inserir ou deletar qualquer linha.
Oracle Database 11g: Fundamentos de SQL II 2 - 38
Faculdade Impacta Tecnologia

Exemplo de Criação de uma Tabela Externa (continuação)


Sintaxe
CREATE [OR REPLACE] DIRECTORY AS 'path_name';
Na sintaxe:
OR REPLACE Especifique OR REPLACE ou recrie o objeto de banco de dados de diretório
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

se ele já existir. Essa cláusula pode ser usada para alterar


a definição de um diretório sem eliminar, recriar
e conceder novamente privilégios de objeto de banco de dados
sobre o diretório. Os usuários que receberam privilégios anteriormente
sobre um diretório redefinido podem continuar a acessar o diretório
sem a necessidade de nova concessão.
directory Especifique o nome do objeto de diretório a ser criado. O
tamanho máximo do nome do diretório é de 30 bytes. Você
não pode qualificar um objeto de diretório com um nome de esquema.
'path_name' Especifique o nome do caminho completo do diretório do sistema operacional
a
has
a ser acessado. O nome do caminho faz distinção entre maiúsculas e minúsculas.
)
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
( v in e t
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no

Oracle Database 11g: Fundamentos de SQL II 2 - 39


Faculdade Impacta Tecnologia

Criando uma Tabela Externa


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

CREATE TABLE <table_name>


( <col_name> <datatype>, … )
ORGANIZATION EXTERNAL
(TYPE <access_driver_type>
DEFAULT DIRECTORY <directory_name>
ACCESS PARAMETERS
(… ) )
LOCATION ('<location_specifier>') s a
REJECT LIMIT [0 | <number> | UNLIMITED]; a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Criando uma Tabela a m ble
Externa
S
s externas
Você pode criarutabelas ra usando a cláusula ORGANIZATION EXTERNAL da instrução
i
ic Na f e
s uma tabela não está sendo criada. Estão sendo criados metadados no
CREATEin
V
TABLE.
t r a nverdade,
dicionário de n
o - que você pode usar para acessar dados externos. Use a cláusula
dados
n
ORGANIZATION para especificar a ordem na qual são armazenadas as linhas de dados da tabela. Ao
especificar EXTERNAL na cláusula ORGANIZATION, você indica que a tabela é somente para
leitura, localizada fora do banco de dados. Observe que os arquivos externos já deverão existir fora
do banco de dados.
TYPE <access_driver_type> indica o driver de acesso da tabela externa. O driver de acesso
é a API (application programming interface) que interpreta os dados externos para o banco de dados.
Se você não especificar TYPE, o Oracle usará o driver de acesso padrão, ORACLE_LOADER. A outra
opção é ORACLE_DATAPUMP.
Use a cláusula DEFAULT DIRECTORY para especificar um ou mais objetos de diretório do banco de
dados Oracle que correspondam aos diretórios no sistema de arquivos em que podem residir as
origens de dados externos.
A cláusula ACCESS PARAMETERS opcional permite atribuir valores aos parâmetros do driver de
acesso específico para essa tabela externa.

Oracle Database 11g: Fundamentos de SQL II 2 - 40


Faculdade Impacta Tecnologia

Criando uma Tabela Externa (continuação)


Use a cláusula LOCATION para especificar um localizador externo para cada origem de dados
externos. Geralmente, <location_specifier> é um arquivo, mas não precisa ser.
A cláusula REJECT LIMIT permite especificar quantos erros de conversão podem ocorrer durante
uma consulta dos dados externos antes de um erro Oracle ser retornado e a consulta ser interrompida.
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

O valor padrão é 0.
A sintaxe para uso do driver de acesso ORACLE_DATAPUMP é como se segue:
CREATE TABLE extract_emps
ORGANIZATION EXTERNAL (TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY …
ACCESS PARAMETERS (… )
LOCATION (…)
PARALLEL 4
REJECT LIMIT UNLIMITED
AS a
SELECT * FROM …;
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
( v in e t
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no

Oracle Database 11g: Fundamentos de SQL II 2 - 41


Faculdade Impacta Tecnologia

Criando uma Tabela Externa Usando o


ORACLE_LOADER
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

CREATE TABLE oldemp (


fname char(25), lname CHAR(25))
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER
DEFAULT DIRECTORY emp_dir
ACCESS PARAMETERS
(RECORDS DELIMITED BY NEWLINE
NOBADFILE
NOLOGFILE
FIELDS TERMINATED BY ',' a
(fname POSITION ( 1:20) CHAR,
) has
lname POSITION (22:41) CHAR))
l ฺ c om ideฺ
LOCATION ('emp.dat'))
m ai t Gu
PARALLEL 5
@ g en
REJECT LIMIT 200;
p ai Stud
o
l s am this
i c ius o use
v in Oracle.eTodos
Copyright © 2009,
( t os direitos reservados.
s
p aio licen
Exemplo de Criação a dem le Externa Usando o Driver de Acesso
uma Tabela
ORACLE_LOADERs S a b
i c i u sfer
Suponhain
que existaaum
r n flat file com registros no seguinte formato:
V 10,jones,11-Dec-1934
t
n -
no20,smith,12-Jun-1972
Os registros são delimitados por novas linhas, e os campos terminam com uma vírgula ( , ). O nome
do arquivo é /emp_dir/emp.dat.
Para converter esse arquivo como origem de dados para uma tabela externa, cujos metadados
residirão no banco de dados, execute as seguintes etapas:
1. Crie um objeto de diretório, emp_dir, como se segue:
CREATE DIRECTORY emp_dir AS '/emp_dir' ;
2. Execute o comando CREATE TABLE mostrado no slide.
O exemplo no slide ilustra a especificação de tabela para criar uma tabela externa para o arquivo:
/emp_dir/emp.dat

Oracle Database 11g: Fundamentos de SQL II 2 - 42


Faculdade Impacta Tecnologia

Exemplo de Criação de uma Tabela Externa Usando o Driver de Acesso


ORACLE_LOADER (continuação)
No exemplo, a especificação TYPE é fornecida somente para ilustrar seu uso. ORACLE_LOADER
será o driver de acesso padrão se não estiver especificado. A opção ACCESS PARAMETERS fornece
valores aos parâmetros do driver de acesso específico, que são interpretados pelo driver, não pelo
servidor Oracle.
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

A cláusula PARALLEL permite que cinco servidores de execução paralela façam varredura
simultânea nas origens (arquivos) de dados externos durante a execução da instrução INSERT INTO
TABLE. Por exemplo, se foi especificado PARALLEL=5, mais de um servidor de execução paralela
poderá ser executado em uma origem de dados. Como as tabelas externas podem ser muito grandes,
por motivos de desempenho, é aconselhável especificar a cláusula PARALLEL ou uma dica paralela
para a consulta.
A cláusula REJECT LIMIT especifica que se ocorrerem mais de 200 erros de conversão durante
uma consulta dos dados externos, a consulta será interrompida e retornará um erro. Esses erros de
conversão podem ocorrer quando o driver de acesso tenta transformar os dados no arquivo de dados
para corresponder à definição de tabela externa. a
has
Depois de o comando CREATE TABLE ser executado com êxito, a tabela externa OLDEMP poderá
)
ser descrita e consultada como uma tabela relacional.
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
( v in e t
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no

Oracle Database 11g: Fundamentos de SQL II 2 - 43


Faculdade Impacta Tecnologia

Consultando Tabelas Externas


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

SELECT *
FROM oldemp

s a
a
)h ฺ
m
co uide
i l ฺ
OLDEMP g ma nt G
a i de
o@ tuemp.dat
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
m ble
Consultando TabelasaExternas
Uma tabela externa
S ra dados armazenados no banco de dados. Ela não descreve como os
s não descreve
i u f e
ic ansna origem externa. Em vez disso, ela descreve como a camada da tabela
dados sãoi narmazenados
V
externa deve n
o -tr os dados ao servidor. É responsabilidade do driver de acesso e da camada de
apresentar
n fazer as transformações necessárias nos dados no arquivo de dados para que
tabela externa
corresponda à definição da tabela externa.
Quando o servidor de banco de dados acessa dados em uma origem externa, ele chama o driver de
acesso apropriado para obter os dados de uma origem externa em um formato esperado pelo servidor
de banco de dados.
É importante lembrar que a descrição dos dados na origem de dados é separada da definição da
tabela externa. O arquivo de origem pode conter mais ou menos campos do que as colunas existentes
na tabela. Além disso, os tipos de dados dos campos na origem de dados podem ser diferentes das
colunas na tabela. O driver de acesso se encarrega de assegurar que os dados da origem sejam
processados a fim de corresponderem à definição da tabela externa.

Oracle Database 11g: Fundamentos de SQL II 2 - 44


Faculdade Impacta Tecnologia

Criando uma Tabela Externa Usando o


ORACLE_DATAPUMP: Exemplo
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

CREATE TABLE emp_ext


(employee_id, first_name, last_name)
ORGANIZATION EXTERNAL
(
TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY emp_dir
LOCATION
('emp1.exp','emp2.exp')
)
PARALLEL
s a
AS a
)h ฺ
SELECT employee_id, first_name, last_name m
co uide
i l ฺ
ma nt G
FROM employees;
g
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
S am abUsando
Criando uma Tabela Externa le o ORACLE_DATAPUMP: Exemplo
Você pode executars operaçõeser de descarregamento e recarregamento com tabelas externas usando o
iciuORACLE_DATAPUMP.
s f
driver dein
V
acesso
- t r an
Observação:
n o nNo contexto de tabelas externas, o carregamento de dados é a leitura dos dados de uma
tabela externa e carregamento em uma tabela no banco de dados. O descarregamento de dados é a
leitura de dados de uma tabela e inserção em uma tabela externa.
O exemplo no slide ilustra a especificação da tabela para criar uma tabela externa usando o driver de
acesso ORACLE_DATAPUMP. Os dados são preenchidos em dois arquivos: emp1.exp e
emp2.exp.
Para preencher dados lidos a partir da tabela EMPLOYEES em uma tabela externa, é necessário
executar as seguintes etapas:
1. Crie um objeto de diretório, emp_dir, como se segue:
CREATE DIRECTORY emp_dir AS '/emp_dir' ;
2. Execute o comando CREATE TABLE mostrado no slide.
Observação: O diretório emp_dir é o mesmo criado no exemplo anterior para ORACLE_LOADER.
Você pode consultar a tabela externa executando o seguinte código:
SELECT * FROM emp_ext;

Oracle Database 11g: Fundamentos de SQL II 2 - 45


Faculdade Impacta Tecnologia

Quiz

Uma constraint FOREIGN KEY impõe a seguinte ação: Quando


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

os dados na chave pai são deletados, todas as linhas na tabela


filha, que dependem dos valores deletados da chave pai,
também são deletadas.
1. Verdadeiro
2. Falso

a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c i us use
Copyright © 2009,
( v to os direitos reservados.
in Oracle.eTodos
s
p aio licen
Resposta: 2
S am able
i c ius nsfer
Vin n-tra
no

Oracle Database 11g: Fundamentos de SQL II 2 - 46


Faculdade Impacta Tecnologia

Quiz

Em todos os casos, quando você executa um comando DROP


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

TABLE, o banco de dados renomeia a tabela e a coloca em


uma lixeira, de onde ela pode ser recuperada mais tarde por
meio da instrução FLASHBACK TABLE.
1. Verdadeiro
2. Falso

a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
v in Oracle.eTodos
Copyright © 2009,
( t os direitos reservados.
s
p aio licen
Resposta: 2
S am able
i c ius nsfer
Vin n-tra
no

Oracle Database 11g: Fundamentos de SQL II 2 - 47


Faculdade Impacta Tecnologia

Resumo
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

Nesta lição, você aprendeu a:


• Adicionar constraints
• Criar índices
• Criar índices usando a instrução CREATE TABLE
• Criar índices baseados em function
• Eliminar e definir colunas como UNUSED
• Executar operações FLASHBACK
• Criar e usar tabelas externas s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Resumo
S am able
Nesta lição, você
i c i usaprendeu
s f earexecutar as seguintes tarefas para gerenciamento de objeto de esquema:
Viníndices
• Alterar n adicionar ou modificar colunas ou constraints.
tabelasapara
t r
• Criar
o n - baseados ou não em function usando a instrução CREATE INDEX.
n
• Eliminar colunas não usadas.
• Usar mecanismos de FLASHBACK para restaurar tabelas.
• Usar a cláusula ORGANIZATION EXTERNAL da instrução CREATE TABLE para criar uma
tabela externa. Uma tabela externa é uma tabela somente para leitura cujos metadados são
armazenados no banco de dados, mas cujos dados são armazenados fora do banco de dados.
• Usar tabelas externas para consultar dados sem carregá-los primeiro no banco de dados.
• Nomear índices da coluna PRIMARY KEY durante a criação da tabela com a instrução CREATE
TABLE.

Oracle Database 11g: Fundamentos de SQL II 2 - 48


Faculdade Impacta Tecnologia

Exercício 2: Visão Geral


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

Este exercício aborda os seguintes tópicos:


• Alteração de tabelas
• Adição de colunas
• Eliminação de colunas
• Criação de índices
• Criação de tabelas externas

s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s
iu o us e
i n icOracle. t os direitos reservados.
( v
Copyright © 2009,
s e Todos

p aio licen
Exercício 2: Visão Geral
S am able
Neste exercício,
i c
s usará
uvocê
icomandos f eor comando ALTER TABLE para modificar colunas e adicionar

V i n tran
constraints. O CREATE INDEX é usado para criar índices durante a criação de uma tabela,
juntamente com -o comando CREATE TABLE. Você criará tabelas externas.
non

Oracle Database 11g: Fundamentos de SQL II 2 - 49


Faculdade Impacta Tecnologia

Exercício 2
1. Crie a tabela DEPT2 com base no gráfico de instância de tabela a seguir. Informe a sintaxe na
Planilha SQL. Em seguida, execute a instrução para criar a tabela. Verifique se a tabela foi criada.

Column Name ID NAME


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

Key Type
Nulls/Unique
FK Table
FK Column
Data type NUMBER VARCHAR2
Length 7 25

s a
)h ฺ a
m
co uide
i l ฺ
g ma nt G
2. Preencha a tabela DEPT2 com dados da tabela DEPARTMENTS.
a i o@ Inclua
t u desomente as colunas
necessárias.
m p is S
l s a
3. Crie a tabela EMP2 com base no gráfico de instância th a seguir. Informe a sintaxe na
de tabela
s e
i n iciu toparauscriar a tabela. Verifique se a tabela foi criada.
Planilha SQL. Em seguida, execute a instrução
(vLAST_NAME se
Column Name ID aio e n FIRST_NAME DEPT_ID
p l i c
Key Type
S am able
c ius nsfer
Nulls/Unique
i
VFKinTable
n - tra
no
FK Column
Data type NUMBER VARCHAR2 VARCHAR2 NUMBER
Length 7 25 25 7

Oracle Database 11g: Fundamentos de SQL II 2 - 50


Faculdade Impacta Tecnologia

Exercício 2 (continuação)
4. Modifique a tabela EMP2 para permitir a inclusão de sobrenomes de funcionários mais longos.
Confirme sua modificação.
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

5. Crie a tabela EMPLOYEES2 com base na estrutura da tabela EMPLOYEES. Inclua somente as
colunas EMPLOYEE_ID, FIRST_NAME, LAST_NAME, SALARY, e DEPARTMENT_ID.
Nomeie as colunas em sua nova tabela como ID, FIRST_NAME, LAST_NAME, SALARY e
DEPT_ID, respectivamente.
6. Elimine a tabela EMP2.
7. Consulte a lixeira para saber se ela contém a tabela.
a
) has
l ฺ c om ideฺ
m ai t Gu
8. Restaure a tabela EMP2 para um estado anterior à instrução@ g en
DROP.
p ai Stud
o
l s am this
i c ius o use
( v in e t
i o e n s
a
a mp ble lic
i u s S fera
9. inic a -coluna
Elimine
V t r ansFIRST_NAME da tabela EMPLOYEES2. Confirme sua modificação
non a descrição da tabela .
verificando

10. Na tabela EMPLOYEES2, marque a coluna DEPT_ID como UNUSED. Confirme sua
modificação verificando a descrição da tabela.

Oracle Database 11g: Fundamentos de SQL II 2 - 51


Faculdade Impacta Tecnologia

Exercício 2 (continuação)
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

11. Elimine todas as colunas UNUSED da tabela EMPLOYEES2. Confirme sua modificação
verificando a descrição da tabela.
12. Adicione uma constraint PRIMARY KEY do nível de tabela à tabela EMP2 na coluna ID. A
constraint deve ser nomeada na criação. Nomeie a constraint my_emp_id_pk.
13. Crie uma constraint PRIMARY KEY para a tabela DEPT2 usando a coluna ID. A constraint
deve ser nomeada na criação. Nomeie a constraint my_dept_id_pk.
14. Adicione uma referência de chave estrangeira na tabela EMP2 que garanta que o funcionário
não foi designado a um departamento inexistente. Nomeie a constraint
a
has
my_emp_dept_id_fk.
15. Modifique a tabela EMP2. Adicione uma coluna COMMISSION do tipo de dados NUMBER,
)
l ฺ c om ideฺ
precisão 2, escala 2. Adicione uma constraint à coluna COMMISSION que garanta que o valor
da comissão seja maior que zero.
m ai t Gu
g en
16. Elimine as tabelas EMP2 e DEPT2 de modo que não possam ser restauradas. Verifique a
@
lixeira.
p ai Stud
o
l s am this
17. Crie a tabela DEPT_NAMED_INDEX com base no gráfico de instância de tabela a seguir.
Nomeie o índice para a coluna PRIMARY KEY como DEPT_PK_IDX.
Column Name Deptno iciu
s useDname
( v in e to
Primary Key i o
Yes
e n s
a lic
Data Type
a mp bNumber
l e VARCHAR2
Lengthus
S ra 4 30
i c i s f e
Vin n-tran
no
18. Crie uma tabela externa library_items_ext. Use o driver de acesso ORACLE_LOADER.
Observação: O diretório emp_dir e library_items.dat já foram criados para este
exercício. library_items.dat contém registros no seguinte formato:
2354, 2264, 13.21, 150,
2355, 2289, 46.23, 200,
2355, 2264, 50.00, 100,
a. Abra o arquivo lab_02_18.sql. Observe o exemplo de código para criar a tabela
externa library_items_ext. Em seguida, substitua <TODO1>, <TODO2>,
<TODO3> e <TODO4> conforme apropriado e salve o arquivo como
lab_02_18_soln.sql. Execute o script para criar a tabela externa.
b. Consulte a tabela library_items_ext.

Oracle Database 11g: Fundamentos de SQL II 2 - 52


Faculdade Impacta Tecnologia

Exercício 2 (continuação)
19. O departamento de RH precisa de um relatório de endereços de todos os departamentos. Crie
uma tabela externa como dept_add_ext usando o driver de acesso ORACLE_DATAPUMP.
O relatório deve mostrar ID do local, rua, cidade, estado ou província e país. Use NATURAL
JOIN para produzir os resultados.
Observação: O diretório emp_dir já foi criado para este exercício.
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

a. Abra o arquivo lab_02_19.sql. Observe o exemplo de código para criar a tabela


externa dept_add_ext. Em seguida, substitua <TODO1>, <TODO2> e <TODO3> pelo
código apropriado. Substitua <oraxx_emp4.exp> e <oraxx_emp5.exp> pelos nomes
de arquivo apropriados. Por exemplo, se você for o usuário ora21, seus nomes de arquivo
serão ora21_emp4.exp e ora21_emp5.exp. Salve o script como
lab_02_19_soln.sql.
b. Execute o script lab_02_19_soln.sql para criar a tabela externa.
c. Consulte a tabela dept_add_ext.

s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
Observação: Durante a execução da etapa anterior,
m S oraxx_emp4.exp e
p doisisarquivos
a h
oraxx_emp5.exp são criados no diretório
i u sls upadrão
s e temp_dir.
i n ic to
(v nscom
20. Crie a tabela emp_books e preencha-a
i o e os dados. Defina a chave primária como adiada e
observe o que acontece a lic
no final da e
transação.
plab_02_20_a.sql
m
a able
a. Execute o arquivo para criar a tabela emp_books. Observe que a
S
s fer
chave primária não é criada como adiável.
ic i u s
emp_books_pk

Vin n-tran
no
b. Execute o arquivo lab_02_20_b.sql para preencher os dados na tabela emp_books.
O que você observa?

Oracle Database 11g: Fundamentos de SQL II 2 - 53


Faculdade Impacta Tecnologia

Exercício 2 (continuação)
c. Defina a constraint emp_books_pk como adiada. O que você observa ?
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

d. Elimine a constraint emp_books_pk .

e. Modifique a definição de tabela emp_books para adicionar a constraint emp_books_pk


como adiável desta vez.

s a
a
)h ฺ
f. Defina a constraint emp_books_pk como adiada . m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l a th dados na tabela emp_books. O
spara preencher
g. Execute o arquivo lab_02_20_g.sql s e
que você observa?
i n iciu to us
i o (v nse
p a lice
S am able
i c ius nsfer
Vin n-tra
h. n
o
Submeta a transação a commit. O que você observa?

Oracle Database 11g: Fundamentos de SQL II 2 - 54

Anda mungkin juga menyukai