Last active
August 29, 2015 14:05
-
-
Save edgarsandi/4ed4c1deebd3c2fc8cfd to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Edgar Rodrigues Sandi | |
@EdgarSandi | |
Oracle PL/SQL | |
6 aulas | |
05/08 | |
07/08 | |
12/08 | |
14/08 | |
19/08 | |
21/08 | |
E-mails do pessoal!!! | |
"Thamires Cardoso Santoro - Aluno Oracle PLSQL Agosto 2014" <[email protected]>, | |
"Fabiano Dias Leite - Aluno Oracle PLSQL Agosto 2014" <[email protected]>, | |
"Paulo Roberto de Oliveira Leite - Aluno Oracle PLSQL Agosto 2014" <[email protected]>, | |
"Denise Inacio Armindo - Aluno Oracle PLSQL Agosto 2014" <[email protected]>, | |
"Alexandre Winkel dos Santos - Aluno Oracle PLSQL Agosto 2014" <[email protected]>, | |
"William Ferreira Carvalho - Aluno Oracle PLSQL Agosto 2014" <[email protected]>, | |
"Eder Mitsunori Yamasaki - Aluno Oracle PLSQL Agosto 2014" <[email protected]>, | |
"Rogério Pereira Goulart - Aluno Oracle PLSQL Agosto 2014" <[email protected]>, | |
------------------------ AULA 1 --------------------------- | |
-- PL/SQL - Program Language | |
-- Programação no Banco de Dados | |
-- PL/PGSQL = PostgreSQL | |
-- Transaction SQL = SQLServer | |
-- PL/SQL = MySQL | |
-- regras de negócios | |
-- procedures | |
-- packages | |
-- triggers | |
-- functions | |
-- blocos anônimos | |
-- Escopo básico | |
-- bloco anônimo | |
[DECLARE] -- optional | |
-- declaração das variáveis | |
BEGIN | |
-- Programação | |
[EXCEPT] -- optional | |
-- Tratamento de erros | |
END; | |
-- enviar texto para o console | |
dbms_output.put_line('Algum texto'); | |
BEGIN | |
dbms_output.put_line('Hello world'); | |
END; | |
-- comentário de linha | |
/* | |
comentário | |
de | |
bloco | |
*/ | |
-- Variáveis | |
-- Exemplo de uso de variáveis | |
DECLARE | |
-- nome tipo; | |
vNome varchar(20); | |
BEGIN | |
vNome := 'Edgar'; | |
dbms_output.put_line('Olá ' || vNome || ' tudo bem?'); | |
END; | |
-- Padrões para nome de variáveis | |
-- Nomes de variáveis com no máximo 30 caracteres | |
-- Use no nome da variável algo que descreva muito bem do que se trata | |
-- Iniciar com letra | |
-- Não usar palavras reservadas do oracle | |
-- Não usar caracteres especiais (ç, ^, ~ ...) | |
-- _ e o # podem ser utilizados | |
-- Quando o nome for composto utilize o CamelCase -> lowerCamelCase | |
-- CamelCase -> lowerCamelCase | |
-- StudlyCaps -> UpperCamelCase | |
-- quantidadeDeProdutoPorAluno | |
-- Utilização das aspas simples e aspas duplas | |
-- "" => identificação de objetos (tables, procedures...) | |
-- '' => identificação de textos | |
-- exemplo 2 | |
DECLARE | |
x number; | |
vNomeCompleto constant varchar(50) := 'José da Silva'; | |
y2 date; | |
t4 char(2) not null := 'SP'; | |
vIdade positiveN := 0; | |
BEGIN | |
x := 3; | |
-- vNomeCompleto := 'Maria da Glória'; | |
-- t4 := null; | |
-- vIdade := -29; | |
dbms_output.put_line(vNomeCompleto); | |
dbms_output.put_line(vIdade); | |
END; | |
-- number => number(38,0) | |
-- number(3) => number(3,0) | |
-- number(10,2) => number(10,2) => 99999999,99 | |
-- varchar e char | |
-- tabela -> 2000 caracteres | |
-- PL/SQL -> 32.767 caracteres | |
-- LOB -> >Long Object Binary | |
-- LONG -> Long Object (texto) | |
-- Transações | |
START TRANSACTION - BEGIN TRANSACTION - BEGIN | |
COMMIT | |
ROLLBACK | |
-- ACID | |
-- Atomicidade | |
-- Poder gerenciar comandos garantindo que UM ou TODOS os comandos serão executados | |
-- são executados ou nenhum será executado | |
-- impossibilita que dados sejam inseridos parcialmente | |
-- Consistência | |
-- Poder manipular informações pelas transações para que nenhum: | |
-- dados seja disponibilizado em estado inconsistente | |
-- As alterações só estarão disponíveis depois do COMMIT | |
-- Isolamento | |
-- Garante que apenas a própria transação que está trabalhando com os dados | |
-- tenha acesso à eles | |
-- Durabilidade | |
-- Garante a permanência dos dados após a execução da transação, | |
-- mesmo que ocorra alguma falha no sistema | |
<inicia transação> | |
<insere produtos> | |
<deu erro>? -> SIM ROLLBACK | |
| | |
NÃO | |
COMMIT | |
DECLARE | |
<variaveis> | |
BEGIN | |
id = sequencia.nextval | |
START TRANSACTION; | |
<insere produtos> values(id); | |
COMMIT; | |
EXCEPT | |
ROLLBACK; | |
END; | |
-- boolean => true ou false | |
-- Operadores de condição | |
if then / elsif endif; | |
DECLARE | |
a boolean := true; | |
b boolean := false; | |
c boolean := null; | |
vTeste boolean; | |
BEGIN | |
vTeste := (b AND NOT c) OR NOT(a = b) AND (c IS NULL); | |
IF vTeste = true THEN | |
dbms_output.put_line('vTeste = true'); | |
ELSIF vTeste = false THEN | |
dbms_output.put_line('vTeste = false'); | |
ELSIF vTeste IS NULL THEN | |
dbms_output.put_line('vTeste IS NULL'); | |
END IF; | |
END; | |
-- DRY - Don't Repeat Yourself | |
-- KISS - Keep It Simple Stupid! | |
DECLARE | |
a boolean := true; | |
vResult varchar(5) := 'false'; | |
BEGIN | |
if a then | |
vResult := 'true'; | |
end if; | |
dbms_output.put_line('a = ' || vResult); | |
END; | |
if then | |
else | |
end if; | |
if then | |
elsif | |
else | |
end if; | |
-- Lab01 | |
-- Dado um código, nome e um sexo | |
-- Responda: | |
-- Olá aluno <nome>, seu código é <codigo> | |
-- Olá aluna <nome>, seu código é <codigo> | |
DECLARE | |
vCodigo number := 1; | |
vNome varchar(20) := 'Joao'; | |
vSexo char(1) := 'M'; | |
vTratamento char(5) := 'aluna'; | |
BEGIN | |
IF (vSexo = 'M') THEN | |
vTratamento := 'aluno'; | |
END IF; | |
dbms_output.put_line('Olá ' || vTratamento || ' ' | |
|| vNome || ' , seu código é ' || vCodigo); | |
END; | |
-- melhorado (com dialogbox ou "Macro substituição") | |
DECLARE | |
vCodigo number; | |
vNome varchar(20); | |
vSexo char(1); | |
vTratamento char(5) := 'aluna'; | |
BEGIN | |
vCodigo := '&vCodigo'; | |
vNome := '&vNome'; | |
vSexo := '&vSexo'; | |
IF (vSexo = 'M') THEN | |
vTratamento := 'aluno'; | |
END IF; | |
dbms_output.put_line('Olá ' || vTratamento || ' ' | |
|| vNome || ' , seu código é ' || vCodigo); | |
END; | |
------------------------ AULA 2 --------------------------- | |
-- Lab02.: Calculadora | |
-- dados dois inteiros e a operação matemática ('+', '-', '/', '*') | |
-- executar a operação e mostrar o valor saída dbms | |
DECLARE | |
vNum1 number; | |
vNum2 number; | |
vOp char(1); | |
vResult number(3); | |
BEGIN | |
vNum1 := &num1; | |
vOp := '&op'; | |
vNum2 := &num2; | |
IF vOp = '+' THEN | |
vResult := vNum1 + vNum2; | |
ELSIF vOp = '-' THEN | |
vResult := vNum1 - vNum2; | |
ELSIF vOp = '*' THEN | |
vResult := vNum1 * vNum2; | |
ELSIF vOp = '/' THEN | |
vResult := vNum1 / vNum2; | |
ELSE | |
dbms_output.put_line('Operação inválida'); | |
END IF; | |
dbms_output.put_line('Resultado: ' || vResult); | |
END; | |
-- Lab03.: Conversor de temperatura | |
-- Dada a fórmula em fahrenheit converta para celsius | |
-- fórmula: ºC = (ºF -32) / 1,8 | |
DECLARE | |
vF number(3); | |
vResult number(3); | |
BEGIN | |
vF := &vF; | |
vResult := (vF - 32) / 1.8; | |
dbms_output.put_line('Em Celsius: ' || vResult); | |
END; | |
-- Escopo de variáveis | |
DECLARE | |
x1 number := 5; | |
BEGIN | |
DECLARE | |
x2 number := 7; | |
BEGIN | |
DECLARE | |
x3 number := 9; | |
BEGIN | |
dbms_output.put_line(x3); | |
END; | |
dbms_output.put_line(x2); | |
END; | |
dbms_output.put_line(x1); | |
END; | |
-- Quiz | |
DECLARE | |
x1 number := 5; | |
BEGIN | |
x1 := x1 + 3; | |
dbms_output.put_line('ETAPA 1 = ' || x1); -- ? 8 | |
DECLARE | |
x2 number := 7; | |
BEGIN | |
x1 := x1 + x2; | |
dbms_output.put_line('ETAPA 2 = ' || x1); -- ? 15 | |
DECLARE | |
x1 number := 9; | |
BEGIN | |
x1 := x1 + x2 - 3; | |
dbms_output.put_line('ETAPA 3 = ' || x1); -- ? 13 | |
END; | |
x1 := x1 - 1; | |
dbms_output.put_line('ETAPA 4 = ' || x1); -- ? 14 | |
END; | |
dbms_output.put_line('ETAPA 5 = ' || x1); -- ? 14 | |
END; | |
-- CASE | |
-- escopo: | |
CASE <variavel> | |
WHEN <valor1> THEN | |
<alguma coisa> | |
WHEN <valor2> THEN | |
<alguma coisa> | |
WHEN <valor3> THEN | |
<alguma coisa> | |
WHEN <valor4> THEN | |
<alguma coisa> | |
ELSE | |
<alguma coisa> | |
END CASE; | |
-- Exemplo1: | |
DECLARE | |
vPartido varchar(10) := 'PSOL'; | |
BEGIN | |
CASE vPartido | |
WHEN 'PT' THEN | |
dbms_output.put_line('PT'); | |
WHEN 'PSDB' THEN | |
dbms_output.put_line('PSDB'); | |
WHEN 'PMDB' THEN | |
dbms_output.put_line('PMDB'); | |
WHEN 'PSOL' THEN | |
dbms_output.put_line('PSOL'); | |
ELSE | |
dbms_output.put_line('ND'); | |
END CASE; | |
END; | |
-- Exemplo2: | |
BEGIN | |
CASE 'A' | |
WHEN UPPER('a') THEN | |
dbms_output.put_line('A'); | |
END CASE; | |
END; | |
-- LOOP | |
-- escopo | |
LOOP | |
EXIT WHEN <condição> | |
END LOOP; | |
-- Exemplo: | |
DECLARE | |
x number := 1; | |
BEGIN | |
dbms_output.put_line('Início do LOOP'); | |
LOOP | |
EXIT WHEN x > 5; | |
dbms_output.put_line('x = ' || x); | |
x := x + 1; | |
END LOOP; | |
dbms_output.put_line('Término do LOOP'); | |
END; | |
-- WHILE | |
-- escopo | |
WHILE <condicao> LOOP | |
<comandos> | |
END LOOP; | |
-- exemplo | |
DECLARE | |
x number := 1; | |
BEGIN | |
dbms_output.put_line('Início do WHILE'); | |
WHILE x <= 5 LOOP | |
-- IF x > 3 THEN EXIT; END IF; | |
-- ou ... | |
-- EXIT WHEN x > 3; -- não faz parte da sintaxe - usado | |
-- para quebrar o fluxo do while | |
dbms_output.put_line('x = ' || x); | |
x := x + 1; | |
END LOOP; | |
dbms_output.put_line('Término do WHILE'); | |
END; | |
-- FOR | |
FOR x IN 1 .. 10 LOOP | |
<comandos> | |
END LOOP; | |
-- exemplo INCREMENTAL | |
BEGIN | |
dbms_output.put_line('Início do Loop'); | |
FOR x IN 1 .. 10 LOOP | |
dbms_output.put_line('x = ' || x); | |
END LOOP; | |
dbms_output.put_line('Final do Loop'); | |
END; | |
-- exemplo DECREMENTAL | |
BEGIN | |
dbms_output.put_line('Início do Loop'); | |
FOR x IN REVERSE 1 .. 10 LOOP | |
dbms_output.put_line('x = ' || x); | |
END LOOP; | |
dbms_output.put_line('Final do Loop'); | |
END; | |
-- Lab4: -- WHILE | |
-- Se você guardar R$ 120,00 por mês na poupança, | |
-- quando você terá 1 milhão de reais? | |
-- rendimento: 0.5% => 0.005 => 1.005 | |
-- fórmula: total = (total + deposito) * rendimento | |
WHILE <condicao> LOOP | |
<comandos> | |
END LOOP; | |
DECLARE | |
vSaldo number(10,2) := 0; | |
vMensal number(8,2) := 120.00; | |
vRendimento number(6,3) := 1.005; | |
vMeses number := 0; | |
BEGIN | |
WHILE vSaldo <= 1000000 LOOP | |
vMeses := vMeses + 1; | |
vSaldo := (vSaldo + vMensal) * vRendimento; | |
END LOOP; | |
dbms_output.put_line('No final de: ' || vMeses | |
|| ' meses ou em ' || TRUNC(vMeses/12) | |
|| ' anos você terá ' || vSaldo); | |
END; | |
-- 752 meses | |
-- 1.002.137,13 | |
-- 1.002.290 | |
-- ROUND | |
-- TRUNC | |
-- Lab5: -- FOR | |
-- Quanto você terá na poupança aplicando R$ 50.00 por | |
-- mês durante 3 anos? | |
-- rendimento 0.5% | |
FOR x IN 1 .. 10 LOOP | |
<comandos> | |
END LOOP; | |
-- Lab4: | |
DECLARE | |
vSaldo number(10,2) := 0; | |
vMensal number(8,2) := 50.00; | |
vRendimento number(6,3) := 1.005; | |
vMeses number := 36; | |
BEGIN | |
FOR vMes IN 1 .. vMeses LOOP | |
vSaldo := (vSaldo + vMensal) * vRendimento; | |
dbms_output.put_line(vMes || ' --> ' || vSaldo); | |
END LOOP; | |
dbms_output.put_line('No final de: ' || vMeses | |
|| ' meses ou em ' || TRUNC(vMeses/12) | |
|| ' anos você terá ' || vSaldo); | |
END; | |
-- 36 meses | |
-- 1976,64 | |
-- SQL -- dentro PL/SQL | |
CREATE TABLE tb_cidades( | |
cd_cidade NUMBER(4) PRIMARY KEY, | |
nm_cidade VARCHAR2(50) NOT NULL, | |
tx_uf CHAR(2) NOT NULL | |
); | |
INSERT INTO tb_cidades (cd_cidade, nm_cidade, tx_uf) | |
VALUES (1, 'São Paulo', 'SP'); | |
INSERT INTO tb_cidades (cd_cidade, nm_cidade, tx_uf) | |
VALUES (2, 'São José dos Campos', 'SP'); | |
-- SEQUENCES | |
-- escopo | |
CREATE SEQUENCE seq_<nome>; | |
CREATE SEQUENCE seq_cidade; | |
CREATE SEQUENCE | |
"ALUNO"."SEQ_CIDADE" | |
MINVALUE 1 MAXVALUE 9999999999999999999999999999 | |
INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER | |
NOCYCLE ; | |
-- valor atual -> current value -> currval | |
-- proximo valor -> next value -> nextval | |
SELECT seq_cidade.nextval FROM dual; | |
SELECT seq_cidade.currval FROM dual; | |
INSERT INTO tb_cidades (cd_cidade, nm_cidade, tx_uf) | |
VALUES (1, 'São Paulo', 'SP'); | |
INSERT INTO tb_cidades (cd_cidade, nm_cidade, tx_uf) | |
VALUES (2, 'São José dos Campos', 'SP'); | |
-- Caso você faça igual ao Alexandre... | |
ALTER SEQUENCE seq_cidade INCREMENT BY 1; | |
DROP SEQUENCE seq_cidade; | |
-- adicionando registros com o sequence | |
INSERT INTO tb_cidades (cd_cidade, nm_cidade, tx_uf) | |
VALUES (seq_cidade.nextval, 'Jacareí', 'SP'); | |
INSERT INTO tb_cidades (cd_cidade, nm_cidade, tx_uf) | |
VALUES (seq_cidade.nextval, 'Caçapava', 'SP'); | |
SELECT * FROM tb_cidades; | |
-- SQL ANSI'92 | |
-- DML - Data Manipulation Language | |
-- UPDATE, INSERT, DELETE | |
-- DQL - Data Query Language | |
-- SELECT, SHOW | |
-- DDL - Data Definition Language | |
-- CREATE, ALTER, DROP, DESC, TRUNCATE | |
-- DCL - Data Control Language | |
-- GRANT, REVOKE | |
-- DML no PL/SQL | |
DECLARE | |
vCidade varchar2(50) := 'Taubaté'; | |
vUF char(2) := 'SP'; | |
vCod number(5); | |
BEGIN | |
INSERT INTO tb_cidades (cd_cidade, nm_cidade, tx_uf) | |
VALUES (seq_cidade.nextval, vCidade, vUF) | |
RETURNING cd_cidade INTO vCod; | |
dbms_output.put_line('A cidade foi cadastrada com o id: ' | |
|| vCod); | |
END; | |
------------------------ AULA 3 --------------------------- | |
-- TYPE | |
-- Usando o TYPE para capturar o tipo de dado de uma coluna | |
DESC tb_cidades; | |
SELECT * FROM tb_cidades; | |
%type | |
<tabela>.<coluna>%type; | |
DECLARE | |
vCidade tb_cidades.nm_cidade%type := 'Arujá'; | |
vUF tb_cidades.tx_uf%type := 'SP'; | |
vCod number(5); | |
BEGIN | |
INSERT INTO tb_cidades (cd_cidade, nm_cidade, tx_uf) | |
VALUES (seq_cidade.nextval, vCidade, vUF) | |
RETURNING cd_cidade INTO vCod; | |
dbms_output.put_line('A cidade foi cadastrada com o id: ' | |
|| vCod); | |
END; | |
-- ROWTYPE | |
DECLARE | |
vReg tb_cidades%rowtype; | |
vCod number(5); | |
BEGIN | |
vReg.nm_cidade := 'Guarulhos'; | |
vReg.tx_uf := 'SP'; | |
INSERT INTO tb_cidades (cd_cidade, nm_cidade, tx_uf) | |
VALUES (seq_cidade.nextval, vReg.nm_cidade, vReg.tx_uf) | |
RETURNING cd_cidade INTO vCod; | |
dbms_output.put_line('A cidade foi cadastrada com o id: ' | |
|| vCod); | |
END; | |
-- SUBTYPE | |
DECLARE | |
SUBTYPE tipo_telefone IS tb_usuarios%rowtype; | |
vTelefone1 tipo_telefone; | |
vTelefone2 tipo_telefone; | |
vTelefone3 tipo_telefone; | |
BEGIN | |
vTelefone1 := '(34) 5345-3345'; | |
END; | |
-- TYPE - DDL - criando tipos de dados no Oracle | |
-- escopo: | |
CREATE OR REPLACE TYPE <nome> | |
AS OBJECT ( | |
<coluna> <tipo>, | |
<coluna> <tipo> | |
); | |
CREATE OR REPLACE TYPE full_name_type | |
AS OBJECT ( | |
first_name varchar(80), | |
last_name varchar(80) | |
); | |
CREATE OR REPLACE TYPE full_mailing_address_type | |
AS OBJECT( | |
street varchar(80), | |
city varchar(80), | |
state char(2), | |
zip char(9) | |
); | |
-- utilizando o TYPE | |
CREATE TABLE customer( | |
full_name full_name_type, | |
full_address full_mailing_address_type | |
); | |
-- inserindo registros com o TYPE | |
INSERT INTO customer(full_name, full_address) | |
VALUES( | |
full_name_type('Edgar', 'Sandi'), | |
full_mailing_address_type('Av. Nelson Dávila','SJC', 'SP','12220-000') | |
); | |
-- SELECT registros com o TYPE | |
SELECT c.full_name.first_name, c.full_address.street | |
FROM customer c; | |
-- DQL (SELECT) dentro do PL/SQL | |
-- O SELECT dentro do PL/SQL possui limitações | |
-- Ele não pode retornar mais do que 1 registro | |
-- Ele não pode retornar um registro completo | |
DECLARE | |
vCidade varchar(50) := ''; | |
BEGIN | |
SELECT nm_cidade INTO vCidade | |
FROM tb_cidades | |
WHERE cd_cidade = 1; | |
dbms_output.put_line('Cidade encontrada: ' || vCidade); | |
END; | |
[NA VM] | |
-> dispositivos -> adaptadores de rede | |
-- trocar de NAT para placa em modo bridge | |
-> aplicativos -> sistema -> terminal | |
su - [enter] | |
season | |
mv /etc/sysconfig/network-scripts/ifcfg-eth0 | |
/etc/sysconfig/network-scripts/ifcfg-eth1 | |
no arquivo: | |
/etc/sysconfig/network-scripts/ifcfg-eth1 | |
trocar: | |
DEVICE=eth0 | |
BOOTPROTO=none | |
para: | |
DEVICE=eth1 | |
BOOTPROTO=dhcp | |
comente as linhas: | |
#HWADDR=08:00:27:9D:05:D6 | |
#IPADDR=10.0.2.15 | |
#NETMASK=255.255.255.0 | |
#BROADCAST=10.0.2.255 | |
#GATEWAY=10.0.2.2 | |
service network restart | |
-- senha expirou? | |
sqlplus / as sysdba | |
SELECT profile from DBA_USERS where username = 'ALUNO'; | |
ALTER profile DEFAULT limit password_life_time UNLIMITED; | |
ALTER USER ALUNO IDENTIFIED BY "season"; | |
DECLARE | |
vCidade varchar(50) := ''; | |
BEGIN | |
SELECT nm_cidade INTO vCidade | |
FROM tb_cidades | |
WHERE cd_cidade = 1; | |
dbms_output.put_line('Cidade encontrada: ' || vCidade); | |
END; | |
-- Lab6 | |
-- Através de uma consulta (passando o cd_aluno) cd_aluno := 1 | |
-- As inscricoes de um aluno | |
-- Resposta: "O aluno" / "A aluna" realizou x inscricoes | |
tb_alunos, tb_inscricoes, tb_turmas, tb_cursos, tb_categorias, | |
tb_instrutores e tb_salas | |
-- DUMP - INICIAL | |
-- criar tabelas | |
-- tb_categorias | |
CREATE TABLE tb_categorias( | |
cd_categoria number(3) PRIMARY KEY NOT NULL, | |
nm_categoria varchar2(50) NOT NULL | |
); | |
-- tb_instrutores | |
CREATE TABLE tb_instrutores( | |
cd_instrutor number(3) PRIMARY KEY NOT NULL, | |
nm_instrutor varchar2(50) NOT NULL | |
); | |
-- tb_salas | |
CREATE TABLE tb_salas( | |
cd_sala char(3) PRIMARY KEY NOT NULL, | |
nm_sala varchar2(50) NOT NULL, | |
vl_capacidade number(3) NOT NULL | |
); | |
-- tb_cursos | |
CREATE TABLE tb_cursos( | |
cd_curso NUMBER(5) PRIMARY KEY NOT NULL, | |
nm_curso varchar2(50) NOT NULL, | |
vl_ch NUMBER(4), | |
cd_categoria number(3) | |
); | |
-- tb_turmas | |
CREATE TABLE tb_turmas( | |
cd_turma NUMBER(6) PRIMARY KEY NOT NULL, | |
dt_inicio DATE NOT NULL, | |
dt_fim DATE NOT NULL, | |
tx_periodo char(1) NOT NULL, -- M ou T ou N | |
cd_instrutor NUMBER(3), | |
cd_curso NUMBER(5), | |
cd_sala CHAR(3) | |
); | |
-- tb_alunos | |
CREATE TABLE tb_alunos( | |
cd_aluno NUMBER(5) PRIMARY KEY, | |
nm_aluno VARCHAR2(50) NOT NULL, | |
tx_sexo CHAR(1) NOT NULL, -- M ou F | |
dt_nascimento DATE | |
); | |
-- tb_inscricoes | |
CREATE TABLE tb_inscricoes( | |
cd_aluno NUMBER(5) NOT NULL, | |
cd_turma NUMBER(6) NOT NULL, | |
dt_inscricao DATE NOT NULL, | |
vl_inscricao NUMBER(10,2) NOT NULL, -- 99999999,99 | |
PRIMARY KEY(cd_aluno, cd_turma) | |
); | |
-- Criar constraints | |
-- tb_cursos x tb_categorias | |
ALTER TABLE tb_cursos | |
ADD CONSTRAINT fk_cursos__categorias | |
FOREIGN KEY (cd_categoria) | |
REFERENCES tb_categorias(cd_categoria); | |
-- tb_turmas x tb_cursos | |
ALTER TABLE tb_turmas | |
ADD CONSTRAINT fk_turmas__cursos | |
FOREIGN KEY (cd_curso) | |
REFERENCES tb_cursos(cd_curso); | |
-- tb_turmas x tb_instrutores | |
ALTER TABLE tb_turmas | |
ADD CONSTRAINT fk_turmas__instrutores | |
FOREIGN KEY (cd_instrutor) | |
REFERENCES tb_instrutores(cd_instrutor); | |
-- tb_turmas x tb_salas | |
ALTER TABLE tb_turmas | |
ADD CONSTRAINT fk_turmas__salas | |
FOREIGN KEY (cd_sala) | |
REFERENCES tb_salas(cd_sala); | |
-- tb_inscricoes x tb_turmas | |
ALTER TABLE tb_inscricoes | |
ADD CONSTRAINT fk_inscricoes__turmas | |
FOREIGN KEY (cd_turma) | |
REFERENCES tb_turmas(cd_turma); | |
-- tb_inscricoes x tb_alunos | |
ALTER TABLE tb_inscricoes | |
ADD CONSTRAINT fk_inscricoes__alunos | |
FOREIGN KEY (cd_aluno) | |
REFERENCES tb_alunos(cd_aluno); | |
-- Inserir registros | |
ALTER SESSION SET NLS_DATE_FORMAT='DD/MM/YYYY'; | |
INSERT ALL | |
INTO tb_categorias (cd_categoria, nm_categoria) VALUES (1,'Banco de dados') | |
INTO tb_categorias (cd_categoria, nm_categoria) VALUES (2,'Programação') | |
INTO tb_categorias (cd_categoria, nm_categoria) VALUES (3,'Design') | |
SELECT * FROM dual; | |
INSERT INTO tb_cursos (cd_curso, nm_curso, vl_ch, cd_categoria) | |
VALUES(1,'Oracle Essencial',24,1); | |
INSERT INTO tb_cursos (cd_curso, nm_curso, vl_ch, cd_categoria) | |
VALUES(2,'PHP',40,2); | |
INSERT INTO tb_cursos (cd_curso, nm_curso, vl_ch, cd_categoria) | |
VALUES(3,'Oracle PL/SQL',24,3); | |
INSERT INTO tb_instrutores (cd_instrutor, nm_instrutor) VALUES (1,'Ronaldo'); | |
INSERT INTO tb_instrutores (cd_instrutor, nm_instrutor) VALUES (2,'João'); | |
INSERT INTO tb_instrutores (cd_instrutor, nm_instrutor) VALUES (3,'Pedro'); | |
INSERT INTO tb_salas (cd_sala, nm_sala, vl_capacidade) VALUES ('S01','Sala 01',8); | |
INSERT INTO tb_salas (cd_sala, nm_sala, vl_capacidade) VALUES ('S02','Sala 02',12); | |
INSERT INTO tb_alunos (cd_aluno, nm_aluno, tx_sexo, dt_nascimento) | |
VALUES (1,'Marisa','F','27/03/1979'); | |
INSERT INTO tb_alunos (cd_aluno, nm_aluno, tx_sexo, dt_nascimento) | |
VALUES (2,'Rosana','F','27/03/1979'); | |
INSERT INTO tb_alunos (cd_aluno, nm_aluno, tx_sexo, dt_nascimento) | |
VALUES (3,'Carlos','M','15/06/1960'); | |
INSERT INTO tb_alunos (cd_aluno, nm_aluno, tx_sexo, dt_nascimento) | |
VALUES (4,'Fabio','M','20/09/1985'); | |
INSERT INTO tb_alunos (cd_aluno, nm_aluno, tx_sexo, dt_nascimento) | |
VALUES (5,'Fabiana','F','11/10/1986'); | |
INSERT INTO tb_alunos (cd_aluno, nm_aluno, tx_sexo, dt_nascimento) | |
VALUES (6,'Ana','F','11/12/1975'); | |
INSERT INTO tb_alunos (cd_aluno, nm_aluno, tx_sexo, dt_nascimento) | |
VALUES (7,'Clara','F','11/12/2000'); | |
INSERT INTO tb_alunos (cd_aluno, nm_aluno, tx_sexo, dt_nascimento) | |
VALUES (8,'Henrique','M','10/07/1996'); | |
INSERT INTO tb_alunos (cd_aluno, nm_aluno, tx_sexo, dt_nascimento) | |
VALUES (9,'Claudia','F','01/07/1993'); | |
INSERT INTO tb_alunos (cd_aluno, nm_aluno, tx_sexo, dt_nascimento) | |
VALUES (10,'Marta','F','08/04/1997'); | |
INSERT INTO tb_turmas (cd_turma, dt_inicio, dt_fim, tx_periodo, cd_instrutor, | |
cd_curso, cd_sala) | |
VALUES (1,'01/07/2008','10/10/2008','M',1,1,'S01'); | |
INSERT INTO tb_turmas (cd_turma, dt_inicio, dt_fim, tx_periodo, cd_instrutor, | |
cd_curso, cd_sala) | |
VALUES (2,'01/05/2008','10/6/2008','T',2,1,'S02'); | |
INSERT INTO tb_turmas (cd_turma, dt_inicio, dt_fim, tx_periodo, cd_instrutor, | |
cd_curso, cd_sala) | |
VALUES (3,'01/06/2008','10/8/2008','N',1,2,'S01'); | |
INSERT INTO tb_turmas (cd_turma, dt_inicio, dt_fim, tx_periodo, cd_instrutor, | |
cd_curso, cd_sala) | |
VALUES (4,'05/10/2008','09/11/2008','N',2,3,'S01'); | |
INSERT INTO tb_turmas (cd_turma, dt_inicio, dt_fim, tx_periodo, cd_instrutor, | |
cd_curso, cd_sala) | |
VALUES (5,'05/10/2008','09/11/2008','M',1,3,'S02'); | |
INSERT INTO tb_inscricoes (cd_aluno, cd_turma, dt_inscricao, vl_inscricao) | |
VALUES (1,1,'10/05/2008',500); | |
INSERT INTO tb_inscricoes (cd_aluno, cd_turma, dt_inscricao, vl_inscricao) | |
VALUES (2,3,'10/06/2008',800); | |
INSERT INTO tb_inscricoes (cd_aluno, cd_turma, dt_inscricao, vl_inscricao) | |
VALUES (3,4,'10/07/2008',900); | |
INSERT INTO tb_inscricoes (cd_aluno, cd_turma, dt_inscricao, vl_inscricao) | |
VALUES (4,2,'10/05/2008',500); | |
INSERT INTO tb_inscricoes (cd_aluno, cd_turma, dt_inscricao, vl_inscricao) | |
VALUES (4,3,'10/06/2008',600); | |
INSERT INTO tb_inscricoes (cd_aluno, cd_turma, dt_inscricao, vl_inscricao) | |
VALUES (5,5,'10/04/2008',700); | |
INSERT INTO tb_inscricoes (cd_aluno, cd_turma, dt_inscricao, vl_inscricao) | |
VALUES (6,1,'10/03/2008',1000.50); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment