A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

MODELO RELACIONAL E LINGUAGEM SQL

Apresentações semelhantes


Apresentação em tema: "MODELO RELACIONAL E LINGUAGEM SQL"— Transcrição da apresentação:

1 MODELO RELACIONAL E LINGUAGEM SQL
BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka MODELO RELACIONAL E LINGUAGEM SQL

2 Evolução dos Bancos de Dados
(Khoshafian 1995) Sistemas de arquivos BD modelo em rede BD hierárquico BD relacional BD/OO Linguagens OO Modelos semânticos Objetos complexos Information retrieval Inteligência artificial Hipermídia BD “inteligente”

3 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).

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

5 Domínio, tipo de dado, formato Esquema, grau, atributo
atributos nome da relação ESTUDANTE Nome CPF Tel_Res Cidade Tel_Trab Idade CR Benjamim (021) Caxias 19 3,21 Catarina (021) Niteroi 18 2,89 Ricardo Santos (021) 25 3,53 Carlos (011) São Paulo (021) 28 3,93 Barbara (021) Rio de Janeiro 19 3,25 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 tuplas

6 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”).

7 Restrições de integridade referencial
EMPREGADO Nome CPF Data-Nasc Endereço Sexo Salário Supervisor Dept DEPARTAMENTO Nome Número LOCALIZACAO GERENCIA Num-Dept Localidade Gerente Num Dept Data-Inicio PROJETO Nome Número Local Dept TRABALHO CPF-Emp Num-Proj Horas DEPENDENTE CPF-Emp Nome-Dep Sexo Data-Nasc Relacionamento

8 Uma instância de banco de dados relacional
EMPREGADO Nome CPF Data-Nasc Endereço Sexo Salário Supervisor Dept LOCALIZACAO Joao Frank Alicia Jane Ramon Joyce Ahmad James 09Jan55 08Dez45 19Jul58 20Jun31 15Set52 31Jul62 29Mar59 10Nov27 Santos,SP Tatui,SP Lins,SP Marilia,SP M F 30000 40000 25000 43000 38000 55000 nulo 5 4 1 Num-Dept Localidade 1 4 5 Santos Campinas Lins Bauru GERENCIA Num CPF Inicio PROJETO 5 4 1 22Mai88 01Jan92 19Jun91 TRABALHO Nome Núm Local Dept CPF-Emp Num-Proj Horas ProdutoX ProdutoY ProdutoZ Informat. Reorgan. Beneficios 1 2 3 10 20 30 Lins Bauru Santos Campinas 5 4 1 DEPARTAMENTO 1 2 3 10 20 30 32,5 7,5 40,0 20,0 10,0 30,0 35,0 5,0 15,0 nulo Num Nome 5 4 1 Pesquisa Administracao Sede DEPENDENTE CPF-Emp Nome-Dep Sexo Data-Nasc Relacionamento Alice Teo Joy Abner Miguel Beth F M 05Abr76 25Out73 03Mai48 29Fev32 01Jan78 31Dez78 05Mai57 Filha Filho Esposa Esposo

9 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).

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

11 Álgebra Relacional

12 Operações da Teoria dos Conjuntos
UNIÃO R1  R2 INTERSEÇÃO R1 R2 DIFERENÇA R1 R2 PRODUTO CARTESIANO R1 X R2

13 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

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

15 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(*)

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

17 Definição de Dados em SQL
Definição de domínios CREATE DOMAIN <domínio> <tipo de dado primitivo> [ DEFAULT <valor default> ] [ <lista de restrições de domínio> ] DROP DOMAIN <domínio> ( CASCADE | RESTRICT ) CREATE DOMAIN CORES CHAR (8) DEFAULT ‘Branco’ CONSTRAINT CORES_VALIDAS CHECK ( VALUE IN (‘Branco’, ‘Azul’, ‘Vermelho’, ‘Verde’) )

18 Criação, Alteração, Remoção de Tabelas
CREATE 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 INTEGER PRIMARY 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 INTEGER REFERENCES DEPARTAMENTO, PRIMARY KEY (CPF), UNIQUE (Nome));

19 Criação, Alteração, Remoção de Tabelas
ALTER TABLE EMPREGADO ADD COLUMN Cor_predileta CORES; ADD FOREIGN KEY chave_dept REFERENCES DEPARTAMENTO ON DELETE RESTRICT ON UPDATE CASCADE; ADD CONSTRAINT salario_minimo CHECK (Salario >= 10000);

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

21 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”;

22 Condições de junção em SQL
SELECT EMPREGADO.Nome, Sexo,Data_Nasc, Salário, DEPARTAMENTO.Nome FROM DEPARTAMENTO, EMPREGADO WHERE DEPARTAMENTO.Número = EMPREGADO.Dept AND Salário>=30000; 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; As consultas acima são equivalentes

23 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 SELECT D.Nome, COUNT(*) FROM DEPARTAMENTO AS D, EMPREGADO AS E WHERE D.Número=E.Dept AND E.Salário > AND E.Dept IN (SELECT Dept FROM EMPREGADO GROUP BY Dept HAVING COUNT(*) > 2) GROUP BY D.Nome;

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

25 INSERT INTO EMPREGADO VALUES (‘Ricardo’, ‘ ’, 30Dez52, ‘Tupã’, ‘M’, 37000, ‘ ’, 4). INSERT INTO EMPREGADO (CPF,Nome,Sexo) VALUES (‘Joana’, ,‘F’) DELETE FROM EMPREGADO WHERE CPF = ‘ ’. WHERE Dept IN (SELECT Número FROM DEPARTAMENTO WHERE Nome = ‘Pesquisa’). UPDATE PROJETO SET Local = ‘Bauru’, Dept = 5 WHERE Número = 10. UPDATE EMPREGADO SET Salário = Salário * 1.1 WHERE Dept IN (SELECT Número

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

27 Oracle PL/SQL O PL/SQL é uma linguagem de 3a. geração que tem
por objetivo processar informações do banco de dados Oracle. 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

28 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*/

29 PL/SQL Definição de Variáveis e Constantes:
São áreas em memórias que servem para armazenar dados, podendo conter diversos valores ao longo da execução do programa. CONSTANTES També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.

30 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. Nome VARCHAR2(45);

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

32 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. Flag BOOLEAN;

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

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

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

36 Sintaxe de comando condicional:
IF condição THEN comandos.... [ELSEIF condição THEN comandos] [ELSE comandos] END IF Exemplo: DECLARE estoque NUMBER(5); BEGIN SELECT quantidade INTO estoque FROM inventario WHERE produto = ’Raquete de tenis' FOR UPDATE OF quantidade; IF estoque > 0 THEN -- verifica quantidade UPDATE inventario SET quantidade= quantidade- 1 WHERE produto = 'TENNIS RACKET'; INSERT INTO historico_vendas VALUES (’Raquete de tenis vendida',SYSDATE); ELSE VALUES (’Rquete de tenis fora sem estoque', SYSDATE); END IF; COMMIT END; /

37 Sintaxe de comandos de repetição:
FOR contador IN [REVERSE] inicial...final LOOP relação_de_comandos END LOOP; WHILE condição LOOP LOOP

38 Exemplo de comando de repetição:
-- Este bloco encontra o primeiro empregado que tenha salario acima de 40000 -- e esteja acima do empregado ‘ ’ na cadeia de supervisão DECLARE v_sal empregado.salario%TYPE; v_sup empregado.supervisor%TYPE; v_nome empregado.nome%TYPE; sup_inicial CONSTANT CHAR(9) := ‘ ’; BEGIN SELECT salario, supervisor INTO v_sal, v_sup FROM empregado WHERE CPF = sup_inicial; WHILE v_sal < LOOP SELECT salario, supervisor, nome INTO v_sal, v_sup, v_nome WHERE CPF = v_sup; END LOOP; INSERT INTO temp VALUES (NULL, v_sal, v_nome); COMMIT; END; /

39 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*/

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

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

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

43 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; IF v_salmedio > 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;

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

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

46 -- 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 LOOP; IF c_salario%ISOPEN THEN CLOSE c_salario; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE (‘Erro no CPF ‘ | | v_CPF); END;

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

48 TRIGGER, STORED PROCEDURE e FUNÇÕES
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.

49 Funções 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

50 Oracle PL/SQL CREATE [OR REPLACE]FUNCTION nomefunc [ (parâmetro,...) ]
RETURN tiporetorno IS resultado tiporetorno corpo da função: [declarações] (bloco PL/SQL) BEGIN RETURN resultado [EXCEPTION] END; onde o parâmetro é do tipo IN

51 Funções CREATE FUNCTION procuraid(primeiro IN CHAR(50), ultimo IN CHAR(50)) RETURN INTEGER AS idcli INTEGER; BEGIN SELECT id INTO idcli FROM cliente WHERE sobrenome=ultimo AND renome=primeiro; RETURN idcli; EXCEPTION WHEN NO_DATA_FOUND THEN raise_application_error(-20130,'ID de Cliente Inválida'); END procuraid; SELECT * FROM pedidos WHERE id_cliente=procuraid('Renata','Terra');

52 STORED PROCEDURE 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.

53 Oracle PL/SQL CREATE [OR REPLACE] PROCEDURE nomeproc [ (parâmetro,...) ] IS corpo do procedimento: [declarações] (bloco PL/SQL) BEGIN [EXCEPTION] END; onde parâmetro: nomepar [IN | OUT | IN OUT] tipo [ { := | DEFAULT } expressão ]

54 STORED PROCEDURE 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;

55 TRIGGER (Gatilhos) 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.

56 Oracle PL/SQL CREATE [OR REPLACE] TRIGGER nome_do_trigger
tempo do trigger: BEFORE ou AFTER evento disparador: DELETE ou INSERT ou UPDATE [OF coluna] nome da tabela: ON tabela tipode trigger: de comando ou de linha [FOR EACH ROW] condição: WHEN cláusula corpo do trigger: [declarações] (bloco PL/SQL) BEGIN [EXCEPTION] END;

57 TRIGGER (Gatilhos) 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

58 SQL Embutida em Linguagem Hospedeira (Ex: Linguagem C - EN2000, 10. 5
#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");

59 SQL Embutida em Linguagem Hospedeira (Ex: Linguagem C - EN2000, 10. 5
. . . /* 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");

60 Índices em SQL CREATE INDEX ind-nome ON EMPREGADO (Nome);
CREATE INDEX ind-dep-nome ON EMPREGADO (Dept ASC, Nome DESC); CREATE UNIQUE INDEX ind-nome-unico CREATE INDEX ind-dep ON EMPREGADO (Dept) CLUSTER; DROP INDEX ind-nome;

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

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


Carregar ppt "MODELO RELACIONAL E LINGUAGEM SQL"

Apresentações semelhantes


Anúncios Google