62
George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka http://www.uniriotec.br/~tanaka [email protected] MODELO RELACIONAL E LINGUAGEM SQL

George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka [email protected]

Embed Size (px)

Citation preview

Page 1: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

BANCO DE DADOS(Fundamentos e Projeto)

Asterio K. Tanakahttp://www.uniriotec.br/~tanaka

[email protected]

MODELO RELACIONAL E LINGUAGEM SQL

Page 2: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Sistemas de arquivos

BD modelo em rede BD hierárquico

BD relacional

BD/OO

LinguagensOO

Modelossemânticos

Objetoscomplexos

Informationretrieval

InteligênciaartificialHipermídia

BD “inteligente”

Evolução dos Bancos de Dados(Khoshafian 1995)

Page 3: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Categorias de Modelos de Dados• Modelos conceituais:

representam a realidade a um nível alto de abstração (ex: ER, modelos semânticos, OO)

• Modelos lógicos ou de implementação:

suportam descrições de dados que possam ser processadas por computador (ex: hierárquico, em rede, relacional, relacional-objeto, OO).

• Modelos físicos:

descrevem como os dados são armazenados no computador através de informações como tipos de arquivos, formatos e ordenação de registros, caminhos de acesso (ex: várias formas de estruturas de arquivos).

Page 4: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Modelo Relacional

• Introduzido pelo pesquisador da IBM, Edward Codd, em 1970

• Características marcantes: modelo formal por natureza, estrutura de dados simples e uniforme.

• O modelo relacional representa os dados num banco de dados como uma coleção de relações ou tabelas.

• É o modelo mais utilizado comercialmente.

Page 5: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

ESTUDANTE

Nome CPF Tel_Res Cidade Tel_Trab Idade CR

Benjamim 305612435-20 (021)373-1616 Caxias 19 3,21

Catarina 381621245-10 (021)375-4409 Niteroi 18 2,89

Ricardo 422112320-00 Santos (021)749-1253 25 3,53

Carlos 489221110-02 (011)376-9821 São Paulo (021)749-6492 28 3,93

Barbara 533691238-11 (021)839-8461 Rio de Janeiro 19 3,25

atributos

tuplas

nome da relação

• Domínio, tipo de dado, formato• Esquema, grau, atributo• Instância, tupla• Intensão, extensão• Relação = subconjunto do produto cartesiano• Super-chave, chave candidata, chave primária,

chave alternativa

Page 6: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Restrições de Integridade no Modelo Relacional

Restrições de domínio

• O valor de cada atributo A deve ser um valor atômico pertencente ao domínio dom(A), de acordo com seu tipo de dados

Restrições de chave

• Valores de chaves candidatas devem ser distintos (“unique”).

Restrição de integridade de entidade

• Nenhum valor de chave primária pode ser nulo (“not null”).

Restrição de integridade referencial

• Chave estrangeira ( “foreign key”).

Page 7: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Restrições de integridade referencial

Nome CPF Data-Nasc Endereço Sexo Salário Supervisor Dept

Nome Número

Num-Dept Localidade

Nome Número Local Dept

CPF-Emp Num-Proj Horas

CPF-Emp Nome-Dep Sexo Data-Nasc Relacionamento

EMPREGADO

DEPARTAMENTO

LOCALIZACAO

PROJETO

TRABALHO

DEPENDENTE

Gerente Num Dept Data-Inicio

GERENCIA

Page 8: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Uma instância de banco de dados relacional

Nome CPF Data-Nasc Endereço Sexo Salário Supervisor Dept

Nome

Num-Dept Localidade

Nome Núm Local Dept

CPF-Emp Num-Proj Horas

CPF-Emp Nome-Dep Sexo Data-Nasc Relacionamento

EMPREGADO

DEPARTAMENTO

LOCALIZACAO

PROJETO

TRABALHO

DEPENDENTE

JoaoFrankAliciaJaneRamonJoyceAhmadJames

123456789333445555999887777987654321666884444453453453987987987888665555

09Jan5508Dez4519Jul5820Jun3115Set5231Jul6229Mar5910Nov27

333445555888665555987654321888665555333445555333445555987654321 nulo

Santos,SPSantos,SPTatui,SPLins,SPMarilia,SPSantos,SPSantos,SPSantos,SP

MMFFMFMM

3000040000250004300038000250002500055000

55445541

PesquisaAdministracaoSede

541

333445555987654321888665555

22Mai8801Jan9219Jun91

14555

SantosCampinasLinsBauruSantos

123456789123456789666884444453453453453453453333445555333445555333445555333445555999887777999887777987987987987987987987654321987654321888665555

ProdutoXProdutoYProdutoZInformat.Reorgan.Beneficios

123102030

LinsBauruSantosCampinasSantosCampinas

555414

1231223102030101030302020

32,5 7,540,020,020,010,010,010,010,030,010,035,05,020,015,0nulo

333445555333445555333445555987654321123456789123456789123456789

AliceTeoJoyAbnerMiguelAliceBeth

FMFMMFF

05Abr7625Out7303Mai4829Fev3201Jan7831Dez7805Mai57

FilhaFilhoEsposaEsposoFilhoFilhaEsposa

Num

541

Num CPF Inicio

GERENCIA

Page 9: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Operações de Atualização sobre Relações

• Três operações básicas:

INSERIR - DELETAR - MODIFICAR

(“Insert”, “Delete”, “Update”)

• Sempre que operações de atualização são aplicadas, deve-se verificar as restrições de integridade (chave, entidade e referencial).

Page 10: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Álgebra Relacional

• Coleção de operações usadas para manipular relações inteiras. O resultado dessas operações é uma nova relação, que por sua vez pode ser manipulada pelas operações da álgebra relaciona (propriedade de fechamento da álgebra relacional)l.

• Dois grupos de operações:

– Operações da Teoria Matemática dos Conjuntos

UNIÃO - INTERSEÇÃO - DIFERENÇA - PRODUTO CARTESIANO

– Operações desenvolvidas especificamente para bancos de dados relacionais

SELEÇÃO - PROJEÇÃO - JUNÇÃO - funções agregadas

Page 11: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Álgebra Relacional

a

PRODUTO

SELEÇÃO PROJEÇÃO UNIÃO INTERSEÇÃO DIFERENÇA

b

c

x

y

a

a

x

y

b

b

x

y

c

c

x

y

a1

JOIN

a2

a3

a

a

x

y

a

b

z

y

c x

b1

b1

b2

b1

b2

b3

c1

c2

c3

a1

a2

a3

b1

b1

b2

c1

c1

c2

x

y

a

DIVISÃO

Page 12: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Operações da Teoria dos Conjuntos

UNIÃO R1 R2

INTERSEÇÃO R1 R2

DIFERENÇA R1 R2

PRODUTO CARTESIANO R1 X R2

Page 13: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Operações de Bancos de Dados Relacionais

SELEÇÃO <condição de seleção> (R)

PROJEÇÃO <lista de atributos> (R)

JUNÇÃO R1 <condição de junção> R2

Page 14: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Conjunto Completo de Operações da Álgebra Relacional

Pode ser demonstrado que o conjunto de operações da álgebra relacional { seleção, projeção, união, diferença, produto cartesiano }

{ X }

é um conjunto completo, isto é, qualquer uma das outras operações pode ser expressa como uma seqüência de operações deste conjunto.

Exemplos:

R S (R S) - ( (R - S) (S - R) )

R <condição > S <condiçao > (R X S)

Page 15: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Funções Pré-definidas

Funções de agregações matemáticas sobre coleções de valores do banco de dados.

SOMA - SUM(atributo)

MÉDIA - AVG (atributo)

MÁXIMO - MAX(atributo)

MÍNIMO- MIN(atributo)

CONTAGEM - COUNT(atributo) ou COUNT(*)

Page 16: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

SQL (Structured Query Language)

• Linguagem de alto nível declarativa

• Padrão norte-americano (ANSI 1986) e internacional (ISO 1989) para os SGBDs relacionais.

• Originário do Sistema R da IBM, embrião dos SGBDs comerciais da IBM, SQL/DS e DB2.

• Atualmente, todos os SGBDs relacionais provêm uma variação da linguagem SQL.

• Padrões: SQL-86 (ANSI) e SQL-89 (ISO)

SQL-2 ou SQL-92 (ANSI/ISO em vigor)

SQL-3 (aprovada em 2000)

Page 17: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Definição de Dados em SQL

CREATE DOMAIN <domínio> <tipo de dado primitivo>[ DEFAULT <valor default> ][ <lista de restrições de domínio> ]

DROP DOMAIN <domínio> ( CASCADE | RESTRICT )

Definição de domínios

CREATE DOMAIN CORES CHAR (8)DEFAULT ‘Branco’CONSTRAINT CORES_VALIDAS

CHECK ( VALUE IN (‘Branco’, ‘Azul’, ‘Vermelho’, ‘Verde’) )

Page 18: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Criação, Alteração, Remoção de TabelasCREATE TABLE <tabela>

‘(‘ <coluna> <tipo da coluna> [ restrição do atributo ]{ , <coluna> <tipo da coluna> [ restrição do atributo ] }[ <restrição da tabela> { , <restrição da tabela> } ] ‘)’

ALTER TABLE <tabela> <lista de alterações na tabela>

DROP TABLE <tabela> ( CASCADE | RESTRICT )

CREATE TABLE DEPARTAMENTO (Nome VARCHAR(15) NOT NULL,Numero INTEGERPRIMARY KEY);

CREATE TABLE EMPREGADO (Nome VARCHAR(30) NOT NULL,CPF CHAR(9)NOT NULL,Data-Nasc DATE,Endereço VARCHAR(30),Sexo CHAR(1),Salário INTEGER,Supervisor CHAR(9)REFERENCES EMPREGADO,Dept INTEGERREFERENCES DEPARTAMENTO,PRIMARY KEY (CPF),UNIQUE (Nome));

Page 19: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Criação, Alteração, Remoção de Tabelas

ALTER TABLE EMPREGADO

ADD COLUMN Cor_predileta CORES;

ALTER TABLE EMPREGADO

ADD FOREIGN KEY chave_dept

REFERENCES DEPARTAMENTO

ON DELETE RESTRICT

ON UPDATE CASCADE;

ALTER TABLE EMPREGADO

ADD CONSTRAINT salario_minimo

CHECK (Salario >= 10000);

Page 20: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Consultas em SQL

<comando-de-seleção> ::=

SELECT [DISTINCT] <lista de atributos>

FROM <lista de tabelas ou visões>

[WHERE <condição de seleção ou de junção>]

[GROUP BY <lista de atributos> [HAVING <condição de seleção>]]

[ORDER BY <coluna> [(ASC | DESC)] {,<coluna> [(ASC | DESC)]}

A condição de junção pode ser especificada em cláusula fora da cláusula WHERE como junções do tipo INNER JOIN, LEFT JOIN, RIGHT JOIN ou OUTER JOIN.

Page 21: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Definição de visões

CREATE VIEW <nome-de-visão> [ (lista-de-colunas) ]

AS <comando-de-seleção>

CREATE VIEW empregados_sede

AS SELECT (Nome, Endereco, Sexo, Data-nasc)

FROM EMPREGADO, DEPARTAMENTO

WHERE EMPREGADO.Dept = DEPARTAMENTO.Numero

AND DEPARTAMENTO.Nome = “Sede”;

Page 22: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Condições de junção em SQL

SELECT EMPREGADO.Nome, Sexo,Data_Nasc, Salário, DEPARTAMENTO.Nome

FROM DEPARTAMENTO INNER JOIN EMPREGADO ON DEPARTAMENTO.Número = EMPREGADO.Dept

WHERE Salário>=30000;

SELECT EMPREGADO.Nome, Sexo,Data_Nasc, Salário, DEPARTAMENTO.Nome

FROM DEPARTAMENTO, EMPREGADO WHERE DEPARTAMENTO.Número = EMPREGADO.Dept

AND Salário>=30000;

As consultas acima são equivalentes

Page 23: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

SQL como linguagem de consulta para usuários finais

A proposta inicial da SQL era prover uma interface de consulta “natural” para usuários finais através do comando SELECT. Logo se percebeu que isto só seria possível em consultas muito simples, devido à complexidade da linguagem.

Consulta: Para cada departamento com mais de 2 empregados, obtenha o nome do departamento e o número de empregados que ganham mais de 30.000.

SELECT D.Nome, COUNT(*)FROM DEPARTAMENTO AS D, EMPREGADO AS EWHERE D.Número=E.Dept AND E.Salário > 30000 AND E.Dept IN (SELECT Dept FROM EMPREGADO GROUP BY Dept HAVING COUNT(*) > 2)GROUP BY D.Nome;

Page 24: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Comandos de Manipulação de Dados

INSERT INTO <tabela> [ ( <lista de colunas> ) ]( VALUES ( <lista de valores> ) | <comando SELECT> )

UPDATE <tabela>SET <coluna> = <valor> {, <coluna> = <valor>}[ WHERE <condição de seleção> ]

DELETE FROM <tabela>[ WHERE <condição de seleção> ]

Page 25: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

INSERT INTO EMPREGADOVALUES (‘Ricardo’, ‘653298653’, 30Dez52, ‘Tupã’, ‘M’, 37000, ‘987654321’, 4).

INSERT INTO EMPREGADO (CPF,Nome,Sexo) VALUES (‘Joana’,126126126-00,‘F’)

DELETE FROM EMPREGADOWHERE CPF = ‘123456789’.

DELETE FROM EMPREGADOWHERE Dept IN (SELECT Número

FROM DEPARTAMENTOWHERE Nome = ‘Pesquisa’).

UPDATE PROJETOSET Local = ‘Bauru’, Dept = 5WHERE Número = 10.

UPDATE EMPREGADOSET Salário = Salário * 1.1WHERE Dept IN (SELECT Número

FROM DEPARTAMENTOWHERE Nome = ‘Pesquisa’).

Page 26: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Programação usando SQL

• SQL não é linguagem de programação!

• Duas abordagens para programação com SQL

• linguagem procedural hospedeira

C, C++, COBOL, FORTRAN, Java, Pascal, etc...

• extensões procedurais à SQL

Access Basic (VB) no MS Access

TRANSACT SQL no MS SQL Server e Sybase

PL/SQL no Oracle

etc ...

Page 27: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Oracle PL/SQL

O PL/SQL é uma linguagem de 3a. geração que tempor objetivo processar informações do banco de dadosOracle.

Características:

• Permite recuperar, incluir, atualizar e excluir dados de tabelas

• Permite criar variáveis e constantes

• Permite utilizar comandos condicionais e de repetição

Page 28: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

PL/SQL

Estrutura de Um Bloco PL/SQL:

DECLARE /*Opcional*/Variáveis, cursores, exceções definidas pelo usuário

BEGIN /*Mandatório*/Comandos SQL e PL/SQL

EXCEPTION /* Opcional */ Ações a serem executadas quando ocorrem erros

END; /*Mandatório*/

Page 29: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

PL/SQL

Definição de Variáveis e Constantes:

VARIÁVEISSão áreas em memórias que servem para armazenar dados, podendo

conter diversos valores ao longo da execução do programa. 

CONSTANTESTambém são áreas de memória que servem para armazenar dados, mas

que possui valor fixo e deve ser inicializado no ato da declaração e seguido da palavra "CONSTANT". 

Na definição de variáveis ou constantes, deve-se especificar o tipo de dado e o tamanho. Pode-se especificar também que uma variável não pode conter valor nulo utilizando a restrição "NOT NULL". Neste caso ela deve ser iniciada com um valor no ato da definição.

Page 30: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

TIPOS DE DADOS

CHAR

Variáveis ou constantes que armazenam valores alfanuméricos com no máximo de 255 caracteres.

Exemplo:

Pagamento CHAR(40);

VARCHAR2

Variáveis que armazenam valores alfanuméricos de tamanho variável até o tamanho máximo de 2000.

Exemplo:

Nome VARCHAR2(45);

Page 31: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

TIPOS DE DADOS

NUMBER

Variáveis ou constantes que armazenam valores numéricos com no máximo de 38 caracteres. Caso não seja informado o tamanho, o default é 38. Também pode ser definido precisão escalar.

Exemplos:

Recibo NUMBER(2);

Codigo CONSTANT NUMBER(4) :=1;

Preco NUMBER(7,2)

Page 32: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

TIPOS DE DADOS

DATE

Variáveis ou constantes que armazenam data, hora (com minutos e segundo e o século).

Exemplo:

Data_receb DATE;

BOOLEAN

Variáveis ou constantes que armazenam TRUE, FALSE ou NULL.

Exemplo:

Flag BOOLEAN;

Page 33: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

DECLARAÇÃO DE VARIÁVEIS COM TIPOS DE ATRIBUTOS

Para declarar uma variável, constante ou coluna com a mesma definição da coluna de uma tabela, o atributo %TYPE pode ser utilizado.

 

Formato

nome_tabela.nome_coluna%TYPE;

 

Exemplo:

v_CPFemp empregado.CPF%TYPE;

Page 34: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

COMANDOS DE MANIPULAÇÃO DE DADOS EM PL/SQL

INSERT, DELETE, UPDATE e SELECT. O comando SELECT tem que ter a cláusula INTO para relacionar as variáveis onde serão armazenados os valores selecionados.

Para controlar as transações com o banco de dados (iniciadas implicitamente com qualquer comando de modificação de dados), utiliza-se os comandos COMMIT, SAVEPOINT e ROLLBACK.

Para garantir que os dados a serem manipulados não serão alterados ou excluídos por outros usuários, utiliza-se o comandos LOCK TABLE ou o comando SELECT com a cláusula FOR UPDATE.

Page 35: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

COMANDOS DE CONTROLE DE SEQÜÊNCIA

• Condicional

• IF ... THEN ... ELSE ... END IF

• IF ... ELSEIF ... END IF

• Repetição

• FOR ... LOOP ... END LOOP

• WHILE ... LOOP ... END LOOP

• LOOP ... END LOOP

• Exit

• EXIT

•EXIT[WHEN condição]

Page 36: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Sintaxe de comando condicional:IF condição THENcomandos....[ELSEIF condição THEN comandos][ELSE comandos]END IF

Exemplo:DECLARE

estoque NUMBER(5);BEGIN

SELECT quantidade INTO estoqueFROM inventarioWHERE produto = ’Raquete de tenis'FOR UPDATE OF quantidade;

IF estoque > 0 THEN -- verifica quantidadeUPDATE inventario SET quantidade= quantidade- 1

WHERE produto = 'TENNIS RACKET';INSERT INTO historico_vendasVALUES (’Raquete de tenis vendida',SYSDATE);

ELSEINSERT INTO historico_vendas

VALUES (’Rquete de tenis fora sem estoque', SYSDATE);END IF;COMMITEND;/

Page 37: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Sintaxe de comandos de repetição:

FOR contador IN [REVERSE] inicial...final LOOPrelação_de_comandos

END LOOP;

WHILE condição LOOPrelação_de_comandos

END LOOP;

LOOPrelação_de_comandos

END LOOP;

Page 38: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Exemplo de comando de repetição:

-- Este bloco encontra o primeiro empregado que tenha salario acima de 40000

-- e esteja acima do empregado ‘333445555’ na cadeia de supervisão

DECLAREv_sal empregado.salario%TYPE;v_sup empregado.supervisor%TYPE;v_nome empregado.nome%TYPE;sup_inicial CONSTANT CHAR(9) := ‘333445555’;

BEGINSELECT salario, supervisor INTO v_sal, v_sup FROM empregadoWHERE CPF = sup_inicial;

WHILE v_sal < 40000 LOOPSELECT salario, supervisor, nome INTO v_sal, v_sup, v_nomeFROM empregadoWHERE CPF = v_sup;

END LOOP;INSERT INTO temp VALUES (NULL, v_sal, v_nome);COMMIT;END;/

Page 39: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

PL/SQL

Estrutura de Um Bloco PL/SQL:

DECLARE /*Opcional*/Variáveis, cursores, exceções definidas pelo usuário

BEGIN /*Mandatório*/Comandos SQL e PL/SQL

EXCEPTION /* Opcional */ Ações a serem executadas quando ocorrem erros

END; /*Mandatório*/

Page 40: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

TRATAMENTO DE ERROS (EXCEPTION HANDLERS)

Utilizando o EXCEPTION, quando ocorre um erro interno (EXCEPTION), a execução normal do bloco PL/SQL é parada e o controle é transferido para a parte do bloco PL/SQL que trata os erros, que é o EXCEPTION. Quando terminar o tratamento do erro, o controle da execução retorna o próximo comando executável do bloco PL/SQL.

Page 41: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Tratadores de EXCEPTION PRÉ-DEFINIDOS

  NO_DATA_FOUND

Quando não existirem dados para retornar no comando select.

  OTHERS

Quando ocorrem outros erros.

Sintaxe:

WHEN tratador_exception THEN

comando1;

comando2;

comandon;

Page 42: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Exemplo:

-- bloco PL/SQL que imprime dados sobre empregado que tem o maior salario

DECLARE v_nome empregado.nome%TYPE; v_endereco empregado.endereco%TYPE; v_salario empregado.salario%TYPE;

BEGIN SELECT nome, endereco, salario INTO v_nome, v_endereco, v_salario FROM empregado WHERE salario = (SELECT MAX (salario) FROM empregado); DBMS_OUTPUT.PUT_LINE (v_nome, v_endereco, v_salario );

EXCEPTION WHEN OTHERS DBMS_OUTPUT.PUT_LINE (‘Erro Detectado’);

END;

Page 43: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Exemplo:-- bloco PL/SQL que aumenta em 10% os salarios dos empregados cujos salarios-- sejam menores do que a media salarial de todos os empregados-- o programa recalcula e imprime a media salarial se esta exceder 50000

DECLARE v_salmedio NUMBER;

BEGIN SELECT AVG(salario) INTO v_salmedio FROM empregado; UPDATE empregado SET salario = salario*1.1

WHERE salario < v_salmedio; SELECT AVG(salario) INTO v_salmedio FROM empregado; IF v_salmedio > 50000 THEN

DBMS_OUTPUT.PUT_LINE (‘Salario medio = ‘ | | v_salmedio ); END IF; COMMIT;

EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE (‘Erro na atualizacao de salario‘) ROLLBACK;

END;

Page 44: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

CURSORES EM PL/SQL

O conjunto de linhas retornadas por uma consulta SELECT pode ter zero, uma ou múltiplas linhas, dependendo de quantas satisfazem a condição de seleção.

O PL/SQL necessita de uma área de trabalho para armazenar o conjunto de linhas retornadas por uma consulta SELECT . Esta área recebe um nome, e é conhecido como CURSOR.

Page 45: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

CURSORES

A) Declarando o Cursor:

CURSOR nome_cursor IS comando_select;

B) Abrindo o Cursor:

OPEN nome_cursor;

C) Buscando os dados armazenados no Cursor:

FETCH nome_cursor INTO variáveis_declaradas;

D) Fechando o Cursor:

CLOSE nome_cursor;

Page 46: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

-- exibe os CPFs de empregados cujos salarios são maiores do que os salarios de seus supervidores

DECLARE v_salario NUMBER; v_salsuper NUMBER; v_CPF CHAR (9); v_CPFsuper CHAR (9); CURSOR c_salario IS SELECT CPF, salario, supervisor FROM empregado;

BEGIN OPEN c_salario; LOOP

FETCH c_salario INTO v_CPF, v_salario, v_CPFsuper; EXIT WHEN c_salario%NOTFOUND; IF v_CPFsuper IS NOT NULL THEN

SELECT salario INTO v_salsuper FROM empregado WHERE CPF = v_CPFsuper; IF v_salario> v_salsuper THEN

DBMS_OUTPUT.PUT_LINE(v_CPF); END IF;

END IF; END LOOP; IF c_salario%ISOPEN THEN CLOSE c_salario;

EXCEPTION WHEN NO_DATA_FOUND THEN

DBMS_OUTPUT.PUT_LINE (‘Erro no CPF ‘ | | v_CPF); IF c_salario%ISOPEN THEN CLOSE c_salario;

END;

Page 47: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

-- lista todos os emrpegados, aumenta os salarios em 10%, e mostra o antigo e o novo salario

DECLARE v_CPF empregado.CPF%TYPE; v_nome empregado.nome%TYPE; v_salario empregado.salario%TYPE; CURSOR emp IS SELECT CPF, nome, salario FROM empregado;

BEGIN OPEN emp; LOOP

FETCH emp INTO v_CPF, v_nome, v_salario; EXIT WHEN emp%NOTFOUND; DBMS_OUTPUT.PUTLINE(‘CPF:’ | | v_CPF | | ‘Antigo salario :’ | | v_salario); UPDATE empregado

SET salario = salario*1.1 WHERE CPF = v_CPF;

COMMIT; DBMS_OUTPUT.PUTLINE(‘CPF:’ | | v_CPF | | ‘Novo salario :’ | | v_salario*1.1);

END LOOP; CLOSE emp;

EXCEPTION WHEN OTHERS DBMS_OUTPUT.PUT_LINE (‘Erro Detectado’);

END:

Page 48: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

• Restrições de integridade embutidas nos sistemas de informação formam um componente importante de programas de aplicação, que podem ser distribuídas por todo o sistema. Isto pode gerar incompletude e redundância dessas restrições, que podem ser especificadas diferentemente. Desta forma, existem fortes argumentos para implementação centralizada das restrições de integridade relevantes do sistema de informação no banco de dados, como procedimentos armazenados ("stored procedures"), gatilhos("triggers") e funções definidas por usuários.

TRIGGER, STORED PROCEDURE e FUNÇÕES

Page 49: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

• Uma função definida pelo usuário computa e retorna um resultado baseado num conjunto de valores de entrada. Uma vez definida e criada dentro do SGBD, torna-se disponível para ser utilizada até mesmo em sentenças SQL

Funções

Page 50: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

CREATE [OR REPLACE]FUNCTION nomefunc [ (parâmetro,...) ]RETURN tiporetornoIS resultado tiporetorno

corpo da função: [declarações](bloco PL/SQL) BEGIN

............RETURN resultado[EXCEPTION]END;

onde o parâmetro é do tipo IN

Oracle PL/SQL

Page 51: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

CREATE FUNCTION procuraid(primeiro IN CHAR(50), ultimo IN CHAR(50))RETURN INTEGER ASidcli INTEGER;BEGIN

SELECT id INTO idcli FROM clienteWHERE sobrenome=ultimo AND renome=primeiro;RETURN idcli;

EXCEPTIONWHEN NO_DATA_FOUND THEN

raise_application_error(-20130,'ID de Cliente Inválida');END procuraid;

SELECT *FROM pedidosWHERE id_cliente=procuraid('Renata','Terra');

Funções

Page 52: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

• Procedimento armazenado é um módulo de lógica procedimental mantido, administrado e executado pelo SGBD. A razão primária para ser utilizado é mover as regras de negócio da aplicação para o banco de dados. Um procedimento armazenado não é fisicamente associado a outro objeto do banco de dados, como os gatilhos de banco de dados, podendo acessar e modificar uma ou mais tabelas.

STORED PROCEDURE

Page 53: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

CREATE [OR REPLACE] PROCEDURE nomeproc [ (parâmetro,...) ]IScorpo do procedimento: [declarações](bloco PL/SQL) BEGIN

[EXCEPTION]END;

onde parâmetro: nomepar [IN | OUT | IN OUT] tipo

[ { := | DEFAULT } expressão ]

Oracle PL/SQL

Page 54: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

CREATE PROCEDURE ELIMINA_CLIENTE

(IDCLIENTE IN INTEGER)

AS ULTIMO VARCHAR2(50);

PRIMEIRO VARCHAR2(50);

BEGIN

SELECT SOBRENOME, NOME INTO ULTIMO, PRIMEIRO

FROM CLIENTE WHERE ID = IDCLIENTE;

INSERT INTO HISTORICO_CLIENTE

VALUES (IDCLIENTE, ULTIMO, PRIMEIRO);

DELETE FROM CLIENTE WHERE ID = IDCLIENTE;

EXCEPTION

WHEN NO_DATA_FOUND THEN

EXIBE_MSG_ERRO (‘ID DE CLIENTE INVÁLIDA’);

END ELIMINA_CLIENTE;

STORED PROCEDURE

Page 55: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

• Gatilhos (“triggers”) são procedimentos especiais dirigidos por eventos, armazenados e executados em um SGBD, vinculados a uma tabela. Um gatilho não pode ser invocado diretamente pelo usuário, mas apenas disparado automaticamente pelo SGBD, devido à ocorrência de um evento resultante de uma ação, normalmente, de modificação da tabela associada ao gatilho.

TRIGGER (Gatilhos)

Page 56: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Oracle PL/SQL

CREATE [OR REPLACE] TRIGGER nome_do_trigger

tempo do trigger: BEFORE ou AFTERevento disparador: DELETE ou INSERT ou UPDATE [OF coluna]nome da tabela: ON tabelatipode trigger: de comando ou de linha [FOR EACH ROW]condição: WHEN cláusulacorpo do trigger: [declarações](bloco PL/SQL) BEGIN

[EXCEPTION]END;

Page 57: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

CREATE TRIGGER DELETA_CLIENTE

BEFORE DELETE ON CLIENTE

FOR EACH ROW

BEGIN

INSERT INTO HISTORICO_CLIENTE

VALUES (:OLD.ID, :OLD.SOBRENOME, :OLD.NOME);

END DELETA_CLIENTE;

OBS: Referências a atributos em eventos

DELETE :OLD (valores deletados)

INSERT :NEW (valores inseridos

UPDATE :OLD :NEW

TRIGGER (Gatilhos)

Page 58: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

SQL Embutida em Linguagem Hospedeira(Ex: Linguagem C - EN2000, 10.5.3)

#include <stdio.h> #include <string.h> VARCHAR username[30];VARCHAR password[10];VARCHAR v_fname[15];VARCHAR v_minit[1];VARCHAR v_lname[15];VARCHAR v_address[30];char v_ssn[9];float f_salary;main () { strcpy (username.arr, "Scott"); username.len = strlen(username.arr); strcpy(password.arr,"TIGER"); password.len = strlen(password.arr); EXEC SQL WHENEVER SQLERROR DO sql_error(); EXEC SQL CONNECT :username IDENTIFIED BY :password; EXEC SQL SELECT fname, minit, lname, address, salary

INTO :v_fname, :v_minit, :v_lname, :v_address, :f_salary FROM EMPLOYEE WHERE salary = (select max (salary) from employee);

printf (" Employee first name, Middle Initial, Last Name, Address, Salary \n"); printf ("%s %s %s %s %f \n ", v_fname.arr, v_minit.arr, v_lname.arr, v_address.arr, f_salary); } sql_error() { EXEC SQL WHENEVER SQLERROR CONTINUE; printf(" Error detected \n"); }

Page 59: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

SQL Embutida em Linguagem Hospedeira(Ex: Linguagem C - EN2000, 10.5.3)

. . . /* same include statements and variable declarations as E5 main () { strcpy (username.arr, "Scott"); username.len= strlen(username.arr); strcpy(password.arr,"TIGER"); password.len = strlen(password.arr); EXEC SQL WHENEVER SQLERROR DO sql_error(); EXEC SQL CONNECT :username IDENTIFIED BY :password; EXEC SQL DECLARE EMP CURSOR FOR SELECT ssn, fname, minit, lname, salary FROM employee; EXEC SQL OPEN EMP; EXEC SQL WHENEVER NOTFOUND DO BREAK; for (;;) { EXEC SQL FETCH EMP INTO :v_ssn, :v_fname, :v_minit, :v_lname, :f_salary; printf ("Social Security Number : %d, Old Salary : %f ", v_ssn, f_salary); EXEC SQL UPDATE employee

SET salary = salary*1.1 WHERE ssn = :v_ssn;

EXEC SQL COMMIT; printf ("Social Security Number : %d New Salary : %f ", v_ssn, f_salary*1.1); } } sql_error() { EXEC SQL WHENEVER SQLERROR CONTINUE; printf(" Error detected \n"); }

Page 60: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Índices em SQL

CREATE INDEX ind-nome ON EMPREGADO (Nome);

CREATE INDEX ind-dep-nomeON EMPREGADO (Dept ASC, Nome DESC);

CREATE UNIQUE INDEX ind-nome-unicoON EMPREGADO (Nome);

CREATE INDEX ind-depON EMPREGADO (Dept) CLUSTER;

DROP INDEX ind-nome;

Page 61: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Controle de segurança em SQL

GRANT CREATETAB ON DATABASE TO usuario1;

GRANT INSERT, DELETE ON EMPREGADO, PROJETO TO usuario2;

GRANT SELECT ON empregados-sede TO usuario-3;

GRANT CONTROL ON INDEX ind-dep TO usuario1, usuario2;

GRANT ALL PRIVILEGES ON EMPREGADO TO usuario1;

REVOKE CONTROL ON INDEX ind-dep TO usuario2;

REVOKE DELETE ON EMPREGADO TO usuario2;

REVOKE ALL PRIVILEGES ON EMPREGADO TO usuario1;

Page 62: George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka tanaka tanaka@rjnet.com.br

George Hamilton

Slide Title

Asterio K. Tanaka

Controle de transações em SQL

• Uma transação é implicitamente iniciada quando ocorre uma operação que modifica o banco de dados (INSERT, UPDATE ou DELETE).

• Uma transação pode terminar normalmente (COMMIT) ou ser desfeita até o início da transação (ROLLBACK) ou até um ponto de controle (ROLLBACK TO SAVEPOINT).

INSERT ...; DELETE ...; UPDATE ...; COMMIT;

INSERT ...; DELETE ...; ROLLBACK; UPDATE ...; COMMIT;

INSERT ...; DELETE ...; SAVEPOINT sp1; UPDATE ...; ROLLBACK TO sp1; DELETE ...; SAVEPOINT sp2; UPDATE ...; ROLLBACK TO sp2; UPDATE ...; COMMIT;