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

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

George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka

Apresentações semelhantes


Apresentação em tema: "George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka"— Transcrição da apresentação:

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

2 George Hamilton Slide Title Asterio K. Tanaka 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 Evolução dos Bancos de Dados (Khoshafian 1995)

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

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

5 George Hamilton Slide Title Asterio K. Tanaka ESTUDANTE NomeCPFTel_ResCidadeTel_TrabIdadeCR Benjamim (021) Caxias193,21 Catarina (021) Niteroi182,89 Ricardo Santos(021) ,53 Carlos (011) São Paulo(021) ,93 Barbara (021) Rio de Janeiro193,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

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

7 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

8 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 Joao Frank Alicia Jane Ramon Joyce Ahmad James Jan55 08Dez45 19Jul58 20Jun31 15Set52 31Jul62 29Mar59 10Nov nulo Santos,SP Tatui,SP Lins,SP Marilia,SP Santos,SP MMFFMFMMMMFFMFMM Pesquisa Administracao Sede Mai88 01Jan92 19Jun Santos Campinas Lins Bauru Santos ProdutoX ProdutoY ProdutoZ Informat. Reorgan. Beneficios Lins Bauru Santos Campinas Santos Campinas ,5 7,5 40,0 20,0 10,0 30,0 10,0 35,0 5,0 20,0 15,0 nulo Alice Teo Joy Abner Miguel Alice Beth FMFMMFFFMFMMFF 05Abr76 25Out73 03Mai48 29Fev32 01Jan78 31Dez78 05Mai57 Filha Filho Esposa Esposo Filho Filha Esposa Num CPFInicio GERENCIA

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

10 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

11 George Hamilton Slide Title Asterio K. Tanaka Álgebra Relacional

12 George Hamilton Slide Title Asterio K. Tanaka Operações da Teoria dos Conjuntos UNIÃO R 1 R 2 INTERSEÇÃOR 1 R 2 DIFERENÇAR 1 R 2 PRODUTO CARTESIANOR 1 X R 2

13 George Hamilton Slide Title Asterio K. Tanaka Operações de Bancos de Dados Relacionais SELEÇÃO (R) PROJEÇÃO (R) JUNÇÃOR 1 R 2

14 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 S (R X S)

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

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

17 George Hamilton Slide Title Asterio K. Tanaka Definição de Dados em SQL CREATE DOMAIN [ DEFAULT ] [ ] DROP DOMAIN ( CASCADE | RESTRICT ) Definição de domínios CREATE DOMAIN CORES CHAR (8) DEFAULT Branco CONSTRAINT CORES_VALIDAS CHECK ( VALUE IN (Branco, Azul, Vermelho, Verde) )

18 George Hamilton Slide Title Asterio K. Tanaka Criação, Alteração, Remoção de Tabelas CREATE TABLE ( [ restrição do atributo ] {, [ restrição do atributo ] } [ {, } ] ) ALTER TABLE DROP TABLE ( 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 ));

19 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);

20 George Hamilton Slide Title Asterio K. Tanaka Consultas em SQL ::= SELECT [DISTINCT] FROM [WHERE ] [GROUP BY [HAVING ]] [ORDER BY [(ASC | DESC)] {, [(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 George Hamilton Slide Title Asterio K. Tanaka Definição de visões CREATE VIEW [ (lista-de-colunas) ] AS CREATE VIEW empregados_sede AS SELECT (Nome, Endereco, Sexo, Data-nasc) FROM EMPREGADO, DEPARTAMENTO WHERE EMPREGADO.Dept = DEPARTAMENTO.Numero AND DEPARTAMENTO.Nome = Sede;

22 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

23 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 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 George Hamilton Slide Title Asterio K. Tanaka Comandos de Manipulação de Dados INSERT INTO [ ( ) ] ( VALUES ( ) | ) UPDATE SET = {, = } [ WHERE ] DELETE FROM [ WHERE ]

25 George Hamilton Slide Title Asterio K. Tanaka INSERT INTOEMPREGADO VALUES(Ricardo, , 30Dez52, Tupã, M, 37000, , 4). INSERT INTO EMPREGADO (CPF,Nome,Sexo) VALUES (Joana, ,F) DELETE FROMEMPREGADO WHERE CPF = DELETE FROMEMPREGADO WHERE Dept IN (SELECTNúmero FROM DEPARTAMENTO WHERENome = Pesquisa). UPDATEPROJETO SETLocal = Bauru, Dept = 5 WHERENúmero = 10. UPDATEEMPREGADO SETSalário = Salário * 1.1 WHEREDept IN (SELECTNúmero FROM DEPARTAMENTO WHERENome = Pesquisa).

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

27 George Hamilton Slide Title Asterio K. Tanaka 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 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*/

29 George Hamilton Slide Title Asterio K. Tanaka PL/SQL Definição de Variáveis e Constantes: VARIÁVEIS 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 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 Exemplo: Nome VARCHAR2(45);

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

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

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

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

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

36 George Hamilton Slide Title Asterio K. Tanaka 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 INSERT INTO historico_vendas VALUES (Rquete de tenis fora sem estoque', SYSDATE); END IF; COMMIT END; /

37 George Hamilton Slide Title Asterio K. Tanaka Sintaxe de comandos de repetição: FOR contador IN [REVERSE] inicial...final LOOP relação_de_comandos END LOOP; WHILE condição LOOP relação_de_comandos END LOOP; LOOP relação_de_comandos END LOOP;

38 George Hamilton Slide Title Asterio K. Tanaka Exemplo de comando de repetição: -- Este bloco encontra o primeiro empregado que tenha salario acima de e esteja acima do empregado na cadeia de supervisão DECLARE v_salempregado.salario%TYPE; v_supempregado.supervisor%TYPE; v_nomeempregado.nome%TYPE; sup_inicial CONSTANT CHAR(9) := ; BEGIN SELECT salario, supervisor INTO v_sal, v_sup FROM empregado WHERE CPF = sup_inicial; WHILEv_sal < LOOP SELECT salario, supervisor, nome INTO v_sal, v_sup, v_nome FROM empregado WHERE CPF = v_sup; END LOOP; INSERT INTO temp VALUES (NULL, v_sal, v_nome); COMMIT; END; /

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

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

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

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

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

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

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

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

48 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

49 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

50 George Hamilton Slide Title Asterio K. Tanaka 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 Oracle PL/SQL

51 George Hamilton Slide Title Asterio K. Tanaka 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'); Funções

52 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

53 George Hamilton Slide Title Asterio K. Tanaka 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 ] Oracle PL/SQL

54 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

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

56 George Hamilton Slide Title Asterio K. Tanaka 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 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)

58 George Hamilton Slide Title Asterio K. Tanaka SQL Embutida em Linguagem Hospedeira (Ex: Linguagem C - EN2000, ) #include 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 George Hamilton Slide Title Asterio K. Tanaka SQL Embutida em Linguagem Hospedeira (Ex: Linguagem C - EN2000, )... /* 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 George Hamilton Slide Title Asterio K. Tanaka Í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 ON EMPREGADO (Nome); CREATE INDEX ind-dep ON EMPREGADO (Dept) CLUSTER; DROP INDEX ind-nome;

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

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


Carregar ppt "George Hamilton Slide Title Asterio K. Tanaka BANCO DE DADOS (Fundamentos e Projeto) Asterio K. Tanaka"

Apresentações semelhantes


Anúncios Google