DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT...

61
DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO DE DADOS Fábio Roberto Octaviano

Transcript of DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT...

Page 1: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

DO BÁSICO AO AVANÇADO PARA

MANIPULAÇÃO E OTIMIZAÇÃO DE DADOS

Fábio Roberto Octaviano

Page 2: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

Utilizando DDL para Gerenciar Tabelas

Page 3: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

Após o término do Capítulo:

Categorizar os principais objetos de um BD.

Verificar a estrutura de uma tabela.

Listar os tipos de dados existentes.

Criação de constraints em tempo de criação de tabelas.

Descrever como funcionam os esquemas de objetos.

Page 4: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

Objeto Descrição

Tabela Unidade de armazenamento básica.

Composta por linhas.

Visão Representa logicamente um subconjunto

de dados de uma ou mais tabelas.

Sequence Gera valores numéricos.

Índice Aumenta a performance de queries.

Sinônimo Dá nomes alternativos a objetos.

Page 5: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

Nomes de tabelas e colunas: ◦ Precisam começar com uma letra.

◦ Tamanho de 1 a 30 caracteres.

◦ Devem conter apenas os caracteres:

◦ A–Z, a–z, 0–9, _, $ e #

◦ Não podem ter o mesmo nome de outro objeto do mesmo usuário.

◦ Não pode ser um nome reservado do Oracle.

Page 6: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

◦ Você precisa possuir: Privilégio CREATE_TABLE.

Uma área de storage.

◦ Você especifica: O nome da tabela

Nome da coluna, tipo de dado da coluna e seu tamanho.

CREATE TABLE [schema.]table

(column datatype [DEFAULT expr][, ...]);

Page 7: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

◦ Tabelas pertencendo a outros usuários não estão no esquema do seu usuário.

◦ É preciso especificar o nome do dono do obejeto como prefixo.

USERB USERA

SELECT *

FROM userB.employees;

SELECT *

FROM userA.employees;

Page 8: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

Especifica o valor padrão de uma coluna durante uma instrução Insert.

Literais, expressões ou funções SQL são válidas.

Outro nome de coluna não é aceito.

O valor default especificado deve ser do mesmo tipo da coluna.

CREATE TABLE hire_dates

(id NUMBER(8),

hire_date DATE DEFAULT SYSDATE);

Table created.

Page 9: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

◦ Crie a tabela DEPT: ◦ :

◦ Confirme sua criação:

DESCRIBE dept

CREATE TABLE dept

(deptno NUMBER(2),

dname VARCHAR2(14),

loc VARCHAR2(13),

create_date DATE DEFAULT SYSDATE);

Table created.

Page 10: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

Data Type Description

VARCHAR2(size) Dado de caracteres de tamanho variável (1 a 4000)

CHAR(size) Dado de caracteres de tamanho fixo (1 a 2000)

NUMBER(p,s) Dado numérico de tamanho variável, onde p é a precisão (1

a 38) e s a escala (-84 a 127)

DATE Valores de data e hora (01/01/4712 AC a 31/12/9999 DC)

LONG Dado de caracteres de tamanho variável (até 2 Gb)

CLOB Dados de caracteres (up to 4 GB)

RAW and LONG RAW Dado binário (até 2 Gb)

BLOB Dado binário (até 4 GB)

BFILE Dado binário armazenado em arquivo externo (até 4 GB)

ROWID Um sistema numérico base-64 representando o endereço

único de uma linha em sua tabela.

Page 11: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

Problemas com LONG:

◦ Uma coluna LONG não é copiada quando uma tabela é criada utilizando subqueries.

◦ Uma coluna LONG não pode ser incluída em GROUP BY ou ORDER BY.

◦ Apenas uma coluna LONG pode ser utilizada por tabela.

◦ Nenhuma constraint pode ser definida sobre uma coluna do tipo LONG.

DICA: Utilize sempre CLOB ao invés de LONG!

Page 12: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

É possível utilizar tipos de dados DATETIME.

Tipo de Dado Descrição

TIMESTAMP Data com segundos fracionados

INTERVAL YEAR TO

MONTH

Armazenado como um intervalo de anos e meses

INTERVAL DAY TO

SECOND

Armazenado como um intervalo de dias, horas, minutos e segundos

Page 13: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

O tipo de dado INTERVAL YEAR TO MONTH armazena um período de tempo utilizando os campos YEAR e MONTH:

O tipo de dado INTERVAL DAY TO SECOND armazena um período de tempo em termos de dias, horas, minutos e segundos:

INTERVAL YEAR [(year_precision)] TO MONTH

INTERVAL DAY [(day_precision)]

TO SECOND [(fractional_seconds_precision)]

Page 14: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

INTERVAL YEAR TO MONTH armazena a diferença entre 2 valores datetime, e sua precisão.

Pode ser interessante em casos como:

Lembrar o valor de uma data que é 120 meses futuros.

Verificar se já se passaram 6 meses de uma data em especial.

A precisão padrão do ano é 2 casas.

Page 15: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

INTERVAL YEAR TO MONTH armazena a diferença entre 2 valores datetime, e sua precisão.

INTERVAL ‘123-2' YEAR(3) TO MONTH

Indica um intervalo de 123 anos e 2 meses.

INTERVAL ‘123' YEAR(3)

Indica um intervalo de 123 anos e 0 meses.

INTERVAL ‘300' MONTH(3)

Indica um intervalo de 300 meses.

INTERVAL ‘123' YEAR

ERRO pois a precisão padrão é de 2 casas.

Page 16: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

INTERVAL DAY TO SECOND armazena um período de tempo em termo de dias, horas, minutos e segundos.

INTERVAL '4 5:12:10.222' DAY TO SECOND(3)

Indica 4 dias, 5 horas, 12 minutos, 10 segundos e

222 milésimos de um segundo.

INTERVAL '4 5:12' DAY TO MINUTE

Indica 4 dias, 5 horas e 12 minutos.

INTERVAL '400 5' DAY(3) TO HOUR

Indica 400 dias e 5 horas.

INTERVAL '11:12:10.2222222' HOUR TO SECOND(7)

indica 11 horas, 12 minutos e 10.2222222 segundos.

Page 17: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

INTERVAL YEAR TO MONTH:

CREATE TABLE time_example2

(loan_duration INTERVAL YEAR (3) TO MONTH);

INSERT INTO time_example2 (loan_duration)

VALUES (INTERVAL '120' MONTH(3));

Imaginando SYSDATE = 26-Sep-2001:

SELECT TO_CHAR( sysdate+loan_duration, 'dd-mon-yyyy')

FROM time_example2;

Page 18: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

INTERVAL YEAR TO MONTH:

CREATE TABLE time_example3

(day_duration INTERVAL DAY (3) TO SECOND);

INSERT INTO time_example3 (day_duration)

VALUES (INTERVAL '180' DAY(3));

Imaginando SYSDATE = 26-Sep-2001:

SELECT sysdate + day_duration "Half Year"

FROM time_example3;

Page 19: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

O tipo de dado TIMESTAMP é uma extensão do tipo DATE, e armazena informações adicionais de horas, minutos, segundos e frações de segundos.

É utilizado quando a precisão de tempo é importante.

É permitido especificar o “time zone”.

TIMESTAMP[(fractional_seconds_precision)]

TIMESTAMP[(fractional_seconds_precision)]

WITH TIME ZONE

TIMESTAMP[(fractional_seconds_precision)]

WITH LOCAL TIME ZONE

Page 20: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

No exemplo, a tabela new_employees é criada com uma coluna start_date do tipo TIMESTAMP:

CREATE TABLE new_employees

(employee_id NUMBER,

first_name VARCHAR2(15),

last_name VARCHAR2(15),

...

start_date TIMESTAMP(7));

SELECT start_date FROM new_employees;

17-JUN-03 12.00.00.000000 AM

Page 21: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

TIMESTAMP WITH TIME ZONE é uma variação de TIMESTAMP e inclui a especificação do fuso horário no valor.

O TIME ZONE é a diferença do horário especificado em relação ao UTC (Universal Time Coordinate), também chamado Greenwich.

TIMESTAMP[(fractional_seconds_precision)]

WITH TIME ZONE

Page 22: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

Por exemplo,

TIMESTAMP '2003-04-15 8:00:00 -8:00'

é o mesmo que

TIMESTAMP '2003-04-15 11:00:00 -5:00'

Isto é, 8:00 a.m. Pacific Standard Time é o mesmo que 11:00 a.m. Eastern Standard Time.

Isso também pode ser representado por:

TIMESTAMP '2003-04-15 8:00:00 US/Pacific'

Page 23: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

O tipo de dado TIMESTAMP WITH LOCAL TIME ZONE é outra variação de TIMESTAMP.

A diferença em relação a TIMESTAMP WITH TIME ZONE é que o fuso horário não é armazenado como parte do dado na coluna.

Considera o TIME ZONE especificado no banco.

É apropriado para aplicações nas quais se deseja exibir datas e horas usando os fusos dos clientes.

TIMESTAMP[(fractional_seconds_precision)]

WITH LOCAL TIME ZONE

Page 24: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

Por exemplo: CREATE TABLE time_example (order_date TIMESTAMP WITH LOCAL TIME ZONE); INSERT INTO time_example VALUES('15-JAN-04

09:34:28 AM'); SELECT * FROM time_example; ORDER_DATE ---------------------------- 15-JAN-04 09.34.28.000000 AM

Page 25: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

Constraints forçam regras em nível de tabela.

Previnem a deleção de tabelas que possuam tabelas dependentes.

Existem 5 tipos válidos de constraints:

◦ NOT NULL

◦ UNIQUE

◦ PRIMARY KEY

◦ FOREIGN KEY

◦ CHECK

Page 26: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

Você pode nomear uma constraint ou o Oracle especifica um nome usando o formato SYS_Cn.

É possível criar uma constraint em:

◦ Tempo de criação de uma tabela.

◦ Após uma tabela ter sido criada.

A constraint pode ser em nível de coluna ou tabela.

É possível verificar as constraints existentes no dicionário de dados.

Page 27: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

◦ Sintaxe:

◦ Constraint em nível de Coluna:

◦ Constraint em nível de Tabela:

CREATE TABLE [schema.]table

(column datatype [DEFAULT expr]

[column_constraint],

...

[table_constraint][,...]);

column,...

[CONSTRAINT constraint_name] constraint_type

(column, ...),

column [CONSTRAINT constraint_name] constraint_type,

Page 28: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

◦ Constraint em nível de Coluna:

◦ Constraint em nível de Tabela:

CREATE TABLE employees(

employee_id NUMBER(6)

CONSTRAINT emp_emp_id_pk PRIMARY KEY,

first_name VARCHAR2(20),

...);

CREATE TABLE employees(

employee_id NUMBER(6),

first_name VARCHAR2(20),

...

job_id VARCHAR2(10) NOT NULL,

CONSTRAINT emp_emp_id_pk

PRIMARY KEY (EMPLOYEE_ID));

Page 29: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

Garante que valores nulos não são permitidos na coluna.

Constraint NOT NULL (Nenhuma linha pode conter um valor nulo para essa coluna)

Falta de constraint NOT NULL (permite valores nulos nas linhas)

Constraint NOT NULL

Page 30: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

EMPLOYEES

Constraint UNIQUE

INSERT INTO

Não permitido: já existe!

Permitido

Page 31: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

Definida em nível de tabela ou de coluna.

CREATE TABLE employees(

employee_id NUMBER(6),

last_name VARCHAR2(25) NOT NULL,

email VARCHAR2(25),

salary NUMBER(8,2),

commission_pct NUMBER(2,2),

hire_date DATE NOT NULL,

...

CONSTRAINT emp_email_uk UNIQUE(email));

Page 32: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

DEPARTMENTS PRIMARY KEY

INSERT INTO Não permitido (valor nulo)

Não permitido (50 já existe)

Page 33: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

DEPARTMENTS

EMPLOYEES

FOREIGN

KEY

INSERT INTO Não permitido (9 não existe)

Permitido

PRIMARY

KEY …

Page 34: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

CREATE TABLE employees(

employee_id NUMBER(6),

last_name VARCHAR2(25) NOT NULL,

email VARCHAR2(25),

salary NUMBER(8,2),

commission_pct NUMBER(2,2),

hire_date DATE NOT NULL,

...

department_id NUMBER(4),

CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)

REFERENCES departments(department_id),

CONSTRAINT emp_email_uk UNIQUE(email));

Definida em nível de tabela ou de coluna.

Page 35: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

◦ FOREIGN KEY: define a coluna na tabela filha.

◦ REFERENCES: identifica a tebela e coluna na tabela pai.

◦ ON DELETE CASCADE: remove as linhas dependentes na tabela filha quando uma linha é removida da tabela pai.

◦ ON DELETE SET NULL: converte valores dependentes na tabela filha em NULL.

◦ ON DELETE RESTRICT/NO ACTION: não permite remover a linha da tabela pai.

Page 36: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

◦ Define a condição que cada linha precisa satisfazer.

◦ Expressões não permitidas:

Referências a pseudo-colunas: CURRVAL, NEXTVAL, LEVEL e ROWNUM.

Chamadas às funções SYSDATE, UID, USER e USERENV.

Consultas que se refiram a outros valores em outras linhas.

..., salary NUMBER(2)

CONSTRAINT emp_salary_min

CHECK (salary > 0),...

Page 37: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

CREATE TABLE employees

( employee_id NUMBER(6)

CONSTRAINT emp_employee_id PRIMARY KEY

, first_name VARCHAR2(20)

, last_name VARCHAR2(25)

CONSTRAINT emp_last_name_nn NOT NULL

, email VARCHAR2(25)

CONSTRAINT emp_email_nn NOT NULL

CONSTRAINT emp_email_uk UNIQUE

, phone_number VARCHAR2(20)

, hire_date DATE

CONSTRAINT emp_hire_date_nn NOT NULL

, job_id VARCHAR2(10)

CONSTRAINT emp_job_nn NOT NULL

, salary NUMBER(8,2)

CONSTRAINT emp_salary_ck CHECK (salary>0)

, commission_pct NUMBER(2,2)

, manager_id NUMBER(6)

, department_id NUMBER(4)

CONSTRAINT emp_dept_fk REFERENCES

departments (department_id));

Page 38: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

UPDATE employees

*

ERROR at line 1:

ORA-02291: integrity constraint (HR.EMP_DEPT_FK)

violated - parent key not found

UPDATE employees

SET department_id = 55

WHERE department_id = 110;

Page 39: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

Você não pode apagar uma linha que contenha uma primary key que é usada como uma foreign key em outra tabela.

DELETE FROM departments

WHERE department_id = 60;

DELETE FROM departments

*

ERROR at line 1:

ORA-02292: integrity constraint (HR.EMP_DEPT_FK)

violated - child record found

Page 40: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

Cria uma tabela e insere as linhas por meio de subconsulta.

Número de colunas da tabela precisa ser igual ao da subconsulta.

Permite definir colunas com nomes de colunas e valores default.

Somente o tipo de dado e a constraint NOT NULL de uma coluna são passados para a nova tabela.

CREATE TABLE table

[(column, column...)]

AS subquery;

Page 41: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

CREATE TABLE dept80

AS

SELECT employee_id, last_name,

salary*12 ANNSAL,

hire_date

FROM employees

WHERE department_id = 80;

Table created.

DESCRIBE dept80

Page 42: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

Use o comando ALTER TABLE para:

Adicionar uma nova coluna.

Modificar uma coluna existente.

Definir uma valor default para uma nova coluna.

Eliminar uma coluna.

Page 43: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

Use o comando ALTER TABLE para adicionar, modificar ou remover colunas:

ALTER TABLE table

ADD (column datatype [DEFAULT expr]

[, column datatype]...);

ALTER TABLE table

MODIFY (column datatype [DEFAULT expr]

[, column datatype]...);

ALTER TABLE table

DROP (column);

Page 44: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

Adicionando uma coluna:

A coluna é inserida sempre no final da tabela:

ALTER TABLE dept80

ADD (job_id VARCHAR2(9));

Table altered.

Page 45: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

Modificando uma coluna:

É possível modificar o tipo, tamanho e valor DEFAULT de uma coluna.

Uma alteração no valor DEFAULT da coluna afeta apenas inserções subseqüentes na tabela.

ALTER TABLE dept80

MODIFY (last_name VARCHAR2(30));

Table altered.

Page 46: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

Removendo uma coluna:

ALTER TABLE dept80

DROP COLUMN job_id;

Table altered.

Page 47: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

A opção SET UNUSED marca uma ou mais colunas como não-utilizável, para remoção futura.

A opção DROP UNUSED COLUMNS remove as colunas marcadas como UNUSED.

ALTER TABLE <table_name>

SET UNUSED(<column_name>);

ALTER TABLE <table_name>

SET UNUSED COLUMN <column_name>;

OR

ALTER TABLE <table_name>

DROP UNUSED COLUMNS;

Page 48: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

Todos os dados e estrutura da tabela são apagados.

Quaisquer transações pendentes são commitadas.

Todos os índices são apagados.

Todas as constraints são apagadas.

NÃO é possível fazer rollback do comando DROP TABLE.

A tabela e suas constraints são enviadas à lixeira.

Continua a ocupar espaço no banco de dados.

DROP TABLE dept80;

Table dropped.

Page 49: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

Todos os dados e estrutura da tabela são apagados.

Quaisquer transações pendentes são commitadas.

Todos os índices são apagados.

Todas as constraints são apagadas.

NÃO é possível fazer rollback do comando DROP TABLE PURGE.

NÃO envia o objeto para a lixeira e não há mais como recuerá-lo.

Libera a área de armazenamento no banco.

DROP TABLE dept80 PURGE;

Table dropped.

Page 50: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

Ferramenta de reparo para modificações acidentais em tabelas:

Restaura uma tabela para um ponto anterior.

Fácil uso, disponibilidade e rápida execução.

Sintaxe:

FLASHBACK TABLE[schema.]table[,

[ schema.]table ]...

TO { TIMESTAMP | SCN } expr

[ { ENABLE | DISABLE } TRIGGERS ];

Page 51: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

Exemplo:

DROP TABLE emp2;

Table dropped

FLASHBACK TABLE emp2 TO BEFORE DROP;

Flashback complete

SELECT original_name, operation, droptime,

FROM recyclebin;

Page 52: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

Objetivos:

◦ Criação de novas tabelas.

◦ Criação de uma tabela por meio da sintaxe

CREATE TABLE AS.

◦ Verificação da existência de tabelas.

◦ Remoção de tabelas.

Page 53: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

1. Crie a tabela DEPT com base na tabela abaixo. Salve o script. Execute o script e confirme que a tabela foi devidamente criada.

Column Name ID NAME

Key Type Primary key

Nulls/Unique

FK Table

FK Column

Data type NUMBER VARCHAR2

Length 7 25

Page 54: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

1. Solução:

CREATE TABLE dept

(id NUMBER(7) CONSTRAINT department_id_pk PRIMARY KEY,

name VARCHAR2(25));

DESCRIBE dept

Page 55: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

2. Popule a tabela DEPT com dados da tabela DEPARTMENTS. Inclua apenas as colunas necessárias.

INSERT INTO dept

SELECT department_id, department_name

FROM departments;

Page 56: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

3. Crie a tabela EMP com base na tabela abaixo. Salve o script e execute-o. Confirme que a tabela foi criada corretamente.

Column Name ID LAST_NAME FIRST_NAME DEPT_ID

Key Type

Nulls/Unique

FK Table DEPT

FK Column ID

Data type NUMBER VARCHAR2 VARCHAR2 NUMBER

Length 7 25 25 7

Page 57: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

3. Solução:

CREATE TABLE emp

(id NUMBER(7),

last_name VARCHAR2(25),

first_name VARCHAR2(25),

dept_id NUMBER(7)

CONSTRAINT emp_dept_id_FK REFERENCES dept (id)

);

DESCRIBE emp

Page 58: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

4. Crie a tabela EMPLOYEES2 com base na estrutura da tabela EMPLOYEES. Inclua apenas o EMPLOYEE_ID, FIRST_NAME, LAST_NAME, SALARY e DEPT_ID, respectivamente.

CREATE TABLE employees2 AS

SELECT employee_id id, first_name, last_name, salary, department_id dept_id

FROM employees;

Page 59: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

5. Apague a tabela EMP.

DROP TABLE emp;

Page 60: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

6. Consulte a lixeira e depois recupere a tabela EMP eliminada no exercício 5.

SELECT original_name, operation, droptime

FROM recyclebin;

FLASHBACK TABLE emp TO BEFORE DROP;

DESC emp

Page 61: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E ... TABLE employees ( employee_id NUMBER(6) CONSTRAINT emp_employee_id PRIMARY KEY , first_name VARCHAR2(20) , last_name VARCHAR2(25) CONSTRAINT

7. Apague a tabela EMP de maneira que não possa ser recuperada. Depois, consulte a lixeira para confirmar.

DROP TABLE emp PURGE;

SELECT original_name, operation, droptime

FROM recyclebin;