--Lesson 10
--Comandos DDL
--Criação de tabela
--Exemplo 1
CREATE TABLE dept
(deptno NUMBER(2),
dname VARCHAR2(14),
loc VARCHAR2(13),
create_date DATE DEFAULT SYSDATE);
DESC DEPT;
INSERT INTO dept values (1,'RH','SJC','15-01/2011');
INSERT INTO dept values (2,'VENDAS','SP', DEFAULT); --posso passar o parametro DEFAULT, assim não preciso especificar as colunas, basta deixar em seguencia
SELECT * FROM dept;
--ROWID, localização fisica do registro
SELECT rowid, deptno FROM dept;
-------------------------------------------------------
--Exemplo 2
CREATE TABLE TABELA2
(codigo INT,
nome VARCHAR(10),
salario NUMBER(6,2));
DESC tabela2;
/*
Quanto uso o tipo INT, ele substitui pelo NUMBER(38)
Quanto uso o tipo VARCHAR, ele substitui pelo VARCHAR2
*/
Insert into tabela2 values (1, 'Laercio', 20000); --Não permite por causa da precisão (6,2) sen no maximo 6 numeros
Insert into tabela2 values (1, 'Laercio', 2000);
Insert into tabela2 values (2, 'Laercio', 9999,99);
Insert into tabela2 values (2, 'Laercio', 10000,00);
select * from tabela2;
--Exemplo 3
create table tabela3
(codigo number(1));
insert into tabela3 values (10); --não permite por causa precisão
insert into tabela3 values (9.2); --arredenda altomticamente por isso permite
select * from tabela3;
--Exemplo 4
create table tabela4
(codigo number(1,2));
desc tabela4;
insert into tabela4 values(3.45);
insert into tabela4 values(3.4);
insert into tabela4 values(3);
insert into tabela4 values(1);
insert into tabela4 values(0);
insert into tabela4 values(0.1);
Select * from tabela4; --O unico que ele aceita é zero, quando o precisão é menor do que a escala
----------------
--Trabalhar com campos tipo especifico para data e hora
create table tabela5
(data_hora timestamp,
ano_mes interval year to month);
insert into tabela5 values(sysdate, null);
insert into tabela5 values(null, );
Select * from tabela5;
--- Usando Constrant
CREATE TABLE ESTADO
(codigo number(6) constraint est_codigo_pk primary key,
nome varchar2(30) not null,
sigla char(2) not null,
constraint est_sigla_uk unique (SIGLA) --como coloquei a virgula, tenho que dizer o nome da coluna esplicitamente
);
--Obs.: boa pratica sempre colocar os nomeas para as contrains
create table cidade
(codigo number(6) constraint cid_codigo_pk primary key,
nome varchar2(80) not null,
estado number(6),
constraint cid_estado_fk foreign key (estado) references estado(codigo)
);
create table bairro
(codigo number(6) primary key, --dexando a linha somente com "Primary key", o oracle nomei automaticamente a constraint
nome varchar2(60) not null,
cidade number(6),
constraint bai_cidade_fk foreign key (cidade) references cidade(codigo) on delete cascade
);
create table ruas
( codigo number(6) primary key,
nome varchar2(80),
bairro number(6) references bairro (codigo)
);
insert into estado values (1,'são paulo', 'sp');
insert into cidade values (1,'SJCampos', 1);
insert into cidade values (2,'taubaté',1);
insert into cidade values (2,'jacarei', 1);
insert into cidade values (3,'resende',2);
insert into bairro values (1, 'vl tatetuba', 1);
insert into ruas values(1, 'saigiro nakamura',1);
select * from bairro;
delete from estado where codigo =1;
delete from cidade where codigo=1;
select * from bairro;
---Criar tabela a partir de uma subquery
Create table empregados
As
Select employee_id, first_name || ' ' || last_name as nome,
salary * 12 as salary_anual, job_id, department_name
from employees e
inner join departments d on (e.department_id = d.department_id);
desc empregados;
select * from empregados;
----Deixar uma tabela apenas leitura, para não permitir modificações
alter table empregados read only;
/*obs.: esse comando faz um commit automatico antes de bloquear a tabela para modificações*/
delete from empregados where employee_id = 9999;
alter table empregados read write; --liberar para escrita novamente
---Apagar a tabela
Drop table empregados;
select * from empregados;
Drop table estado; /*Ao tentar apagar uma tabela com Foreign Key ligada a outra tabela, não é possibel apagar a tabela, primeiro deve remover os vinculos*/
Fiquem a vontade para comentar e sugerir melhorias e/ou correção dos exemplos acima.
Nenhum comentário:
Postar um comentário