Lomadee, uma nova espécie na web. A maior plataforma de afiliados da América Latina.

segunda-feira, 24 de outubro de 2011

Curso Oracle 11g - Lesson 10 - Programação

--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

Related Posts Plugin for WordPress, Blogger...