Marcelo Henrique dos Santos

Documentos relacionados
Marcelo Henrique dos Santos

Marcelo Henrique dos Santos

Marcelo Henrique dos Santos

BCD29008 Banco de dados

Agenda. Linguagem de Consulta SQL. 1. Introdução Histórico. 1. Introdução BD Relacionais

SQL (Structured Query Language)

SQL (Structured Query Language)

SQL (Structured Query Language)

Banco de Dados. SQL Structured Query Language

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE INTRODUÇÃO A SQL

SQL. Prof. Roger Cristhian Gomes

DDL DML DCL DTL Tipos Numéricos: INT FLOAT DOUBLE Tipos String: CHAR VARCHAR BINARY BLOB TEXT Tipos Data e Hora: DATE TIME TIMESTAMP YEAR

Linguagem de pesquisa declarativa para banco de dados relacional; 1ª Versão - Desenvolvida pela IBM no laboratório de pesquisa de San José;

Banco de Dados. Professora: Luciana Faria

SQL. Prof. Msc Denival A. dos Santos

Introdução ao PostgreSQL

Banco de Dados I Introdução SQL

Bancos (Bases) de Dados

SQL. SQL (Structured Query Language) Comando CREATE TABLE. SQL é uma linguagem de consulta que possibilita:

Comandos de Manipulação

SQL (Tópicos) Structured Query Language

Objetos Persistentes. Objetos Persistentes: são objetos que requerem armazenamento persistente.

Oracle Database 10g: Fundamentos de SQL e PL/SQL

SQL Linguagem de Manipulação de Dados SQL DML SQL DML. Exemplo Modelo Relacional. Exemplo ME-R SQL DML CONTINUAÇÃO...

SQL Básica DDL. Prof. Marcos A. Schreiner. 21 de outubro de Curso de Licenciatura em Computação

mod._1_teoria_sistemas de bancos de dados.doc

Rápida revisão do Modelo Relacional

SQL BÁSICO. Luiz Antônio Vivacqua Corrêa Meyer

Visões ... Esquema Externo n. Esquema Externo 1. Esquema Lógico. Usuários finais/aplicações

BANCO DE DADOS PARA NINJAS

Sistemas de Informação e Bases de Dados 2012/2013. Linguagem SQL

AULA 8. Ambientes Visuais 8.1. OBJETIVO DA AULA SQL (Structured Query Language)

Oracle Database: Fundamentos de SQL e PL/SQL

Atualização e Inserção de Dados. SQL Avançado. Pedro F. Carvalho OCP Oracle g

A linguagem SQL

A U L A 3 S U B G R U P O S D M L E D Q L : I N S E R I N D O E P E S Q U I S A N D O D A D O S E M U M A T A B E L A

SQL DML. Frederico D. Bortoloti

UNIVERSIDADE FEDERAL DA GRANDE DOURADOS PRÓ-REITORIA DE GRADUAÇÃO PROGRAD FACULDADE DE CIÊNCIAS EXATAS E TECNOLOGIA CURSO DE SISTEMAS DE INFORMAÇÃO

Preparação. Linguagem de Manipulação de Dados (DML) Estudo Dirigido 10/12/2013

Subsistema de Integridade Semântica

SQL Linguagem de Definição de Dados

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

IMPLEMENTAÇÃO DE BANCO DE DADOS

Princípio dos anos 70 IBM desenvolve a linguagem Sequel para o System R. Renomeada para SQL (Structured Query Language)

SQL (STRUCTUREDQUERY LANGUAGE)

Aula de SQL Comandos DDL. André Luiz de Oliveira Eduardo Raul Hruschka

Avisos. Sumário. Atividade em lab Aula 29. Atividade em lab Aula 29. Programando com SQL Triggers EXERCÍCIO LAB SP. Vista da segunda prova

BD II (SI 587) Procedimentos Armazenados

MySql. Introdução a MySQL. Andréa Garcia Trindade

Triggers(Gatilhos) Tiago Alves de Oliveira

Princípio dos anos 70 IBM desenvolve a linguagem Sequel para o System R. Renomeada para SQL (Structured Query Language)

Laboratório de Banco de Dados. Prof. Luiz Vivacqua.

BANCO DE DADOS GERENCIAL 1 A U L A 2

PROGRAMA. 3.SQL Básico. 3.1 Criação de tabelas 3.2 Queries simples 3.3 Subqueries 3.4 Agregação. Prof. Dr. Marcos Tsuzuki

Banco de Dados II. PL/SQL - Procedures -Cursor - Funções. Segurança: Introdução; Controle de Acesso; Criptografia; Recursos de SQL.

SQL Básica. Andre Noel

Introdução ao Banco de Dados. Banco de Dados

Banco de dados. Conteúdo: DDL Prof. Patrícia Lucas

Aula 6 BD1 Modelo Relacional. Profa. Elaine Faria UFU

ANÁLISE E PROJETO DE BANCO DE DADOS

Subsistema de Integridade Semântica

S Q L Asserções, Visões e Técnicas de Programação. Daniel Bordignon Cassanelli Fernando Luiz Grando Pedro Patitucci Finamore

Banco de Dados. Diego Silveira Costa Nascimento. 20 de março de Instituto Federal do Rio Grande do Norte

Banco de Dados I Linguagem SQL Parte 2. Autor: Prof. Cláudio Baptista Adaptado por: Prof. Ricardo Antonello

Programando em SQL. Triggers, Stored Procedures e funções. Profa. Késsia Marchi

Linguagem de Consulta Estruturada SQL- DML

Laboratório de Banco de Dados II Aula 04. Prof. Érick de Souza Carvalho

Fundamentos de SQL. Curso: Técnico em Redes de Computadores Disciplina: Tecnologias e Linguagem de Banco de dados Professor: Rodrigo da Rocha

Sumário. SQL - Criação de Tabelas. Structured Query Language. SQL Versões. André Restivo. October 18, 2010

Sumário: 1) Trabalhando com Constraints: - NOT NULL - UNIQUE - PRIMARY KEY - FOREIGN KEY - DEFAULT

f. Exemplo: verificar condição de aprovação de alunos

Funções Definidas pelo Usuário

SQL CREATE DATABASE. MySQL, SQL Server, Access, Oracle, Sybase, DB2, e outras base de dados utilizam o SQL.

Banco de Dados I. Prof. Diego Buchinger. Profa. Rebeca Schroeder Freitas Prof. Fabiano Baldo.

Linguagem de Consulta Estruturada (SQL)

Banco de Dados. Prof. Dr. Joel da Silva SQL - Introdução

SQL (STRUCTUREDQUERY LANGUAGE)

O modelo relacional encontra-se padronizado pela indústria de informática. Ele é chamado de

IEC Banco de Dados I Aula 11 Técnicas de Programação SQL

Manipulação de Dados com SQL

Revisão Banco de Dados

BANCO DE DADOS. Para a criação de um banco de dados, através de scripts SQL, deve-se usar a seguinte sintaxe: CREATE DATABASE <nome_banco_de_dados>

FACULDADE INGÁ Unidade de Ensino Superior Ingá Ltda Ciência da Computação TRIGGERS. Prof. Erinaldo Sanches Nascimento


Básico da Linguagem SQL. Definição de Esquemas em SQL. SQL(Structured Query Language)

SQL (Structured Query Language)

Introdução às funções e procedimentos. SQL suporta funções e procedimentos úteis com tipos de dados específicos

Bases de Dados. DDL Data Definition Language

Banco de Dados I. Aula 16 - Prof. Bruno Moreno 04/11/2011

SQL Linguagem de Definição de Dados. Laboratório de Bases de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Introdução à Banco de Dados. Nathalia Sautchuk Patrício

Linguagem SQL Restrições, Triggers e Views

GBC043 Sistemas de Banco de Dados

SQL Básica DML. Prof. Marcos A. Schreiner. 22 de outubro de Curso de Licenciatura em Computação

A linguagem SQL

Discussão exercício aula 18. SQL Linguagem de Manipulação de Dados. Discussão exercício aula 18. Discussão exercício aula 18 SQL.

Tabelas. Banco de Dados I MySQL

Transcrição:

Mestrado em Educação (em andamento) MBA em Negócios em Mídias Digitais MBA em Marketing e Vendas Especialista em games Bacharel em Sistema de Informação Email: marcelosantos@outlook.com http://www.marcelohsantos.com

SQL (Structure Query Language)

SQL Linguagem para: Definição de dados: criação das estruturas Data Definition Language (DDL) Manipulação de dados: atualização e consultas Data Manipulation Language (DML) 3

Histórico Linguagem SQUEL desenvolvida pela IBM para um banco de dados experimental R Baseada no padrão ANSI e ISO: SQL-86 SQL-89 SQL-92 SQL:1999 SQL:2003 A maioria dos SGBD comerciais suportam o SQL-92, e algumas das caracteristicas das últimas versões 4

Mais SQL SQL é considerada a razão principal para o sucesso dos bancos de dados relacionais comerciais Tornou-se a linguagem padrão para bases relacionais Funciona entre diferentes produtos Embedded SQL: Java, C/C++, Cobol Fácil uso para o usuário 5

Permite especificar: SQL COMO LINGUAGEM DE DEFINIÇÃO DE DADOS O esquema de cada relação O domínio dos valores associados a cada atributo Restrições de integridade O conjunto de índices Visões Permissão de acesso às relações 6

DDL (Data Definition Language)

Criando uma base de dados Criação de um BD SQL padrão não oferece tal comando BDs são criados via ferramentas do SGBD alguns SGBDs (SQL Server, DB2, MySQL) oferecem este comando create database nome_bd drop database nome_bd 8

Criando Esquemas em SQL Comandos para definição de esquemas create table define a estrutura da tabela, suas restrições de integridade e cria uma tabela vazia alter table modifica a definição de uma tabela: atributos chave não podem ser removidos de uma tabela atributos NOT NULL não podem ser inseridos em uma tabela drop table remove uma tabela com todas as suas tuplas 9

Criação de Tabelas CREATE TABLE Colunas são especificadas primeiro, sob a forma: Depois Chaves, integridade referencial e restrições de integridade CREATE TABLE <nome_da_tabela> (C 1 D 1, C 2 D 2,..., C n D n,... PRIMARY KEY <lista_de_colunas>, FOREIGN KEY <nome_da_coluna> REFERENCES <nome_tab_ref>(<nome_da_coluna_ref>)); cada C i é uma coluna no esquema da tabela D i é o tipo de dado no domínio da coluna 10 C i

Criando Esquemas em SQL CREATE TABLE Ambulatorios ( nroa int, andar numeric(3) NOT NULL, PRIMARY KEY(nroa) ) CREATE TABLE Medicos ( codm int, nome varchar(40) NOT NULL, especialidade char(20), CPF numeric(11) UNIQUE, cidade varchar(30), nroa int, PRIMARY KEY(codm), FOREIGN KEY(nroa) REFERENCES Ambulatorios ) 11

Tipos de dados (Transact-SQL) https://msdn.microsoft.com/ptbr/library/ms187752(v=sql.120).aspx 12

Create Table Exemplo: create table produto (codigo integer not null, descricao varchar(30), tipo varchar (20) PRIMARY KEY codigo) Codigo Descricao tipo 13

Alterando Tabelas ALTER TABLE nome_tabela ADD [COLUMN] nome_atributo_1 tipo_1 [{RIs}] [{, nome_atributo_n tipo_n [{RIs}]}] MODIFY [COLUMN] nome_atributo_1 tipo_1 [{RIs}] [{, nome_atributo_n tipo_n [{RIs}]}] DROP COLUMN nome_atributo_1 [{, nome_atributo_n }] ADD CONSTRAINT nome_ri_1 def_ri_1 [{, nome_ri_n def_ri_n}] DROP CONSTRAINT nome_ri_1 [{, nome_ri_n}] [ADD DROP] [PRIMARY KEY... FOREIGN KEY...] 14

Domínios

Restrições NOT NULL Restrição aplicada em colunas cujos valores não podem ser nulos Valor Default Usado para inicializar o valor de uma coluna DEFAULT <valor> logo após a restrição: create table produto (codigo integer not null, descricao varchar(30), tipo varchar (20) PRIMARY KEY codigo) 16

Tipos de Domínios em SQL char (n). Character de tamanho n definido pelo usuário varchar (n). int Smallint numeric (p,d) real, double precision float(n) 17

SQL (Structure Query Language)

SQL Linguagem para: Definição de dados: criação das estruturas Data Definition Language (DDL) Manipulação de dados: atualização e consultas Data Manipulation Language (DML) 19

Manipulação de Dados Define operações de manipulação de dados I (INSERT) A (UPDATE) E (DELETE) C (SELECT) Instruções declarativas manipulação de conjuntos especifica-se o que fazer e não como fazer 20

Inserções, Alterações e Exclusões

SQL Insert Inserção de dados INSERT INTO nome_tabela [(lista_atributos)] VALUES (lista_valores_atributos) [, (lista_valores_atributos)] Exemplos INSERT INTO Ambulatorios VALUES (1, 1, 30) INSERT INTO Medicos (codm, nome, idade, especialidade, CPF, cidade) VALUES (4, Carlos, 28, ortopedia, 11000110000, Joinville ); 22

Inserção de dados SQL Inserção a partir de outra tabela Permite inserir em uma tabela a partir de outra tabela A nova tabela terá os mesmos atributos, com os mesmos domínios Exemplos INSERT into cliente as SELECT * from funcionario 23

SQL Update Alteração de dados UPDATE nome_tabela SET nome_atributo_1 = Valor [{, nome_atributo_n = Valor}] [WHERE condição] Exemplos UPDATE Medico SET cidade = Florianopolis UPDATE Ambulatorios SET capacidade = capacidade + 5, andar = 3 WHERE nroa = 2 24

SQL DML Exclusão de dados DELETE FROM nome_tabela [WHERE condição] Exemplos DELETE FROM Ambulatorios DELETE FROM Medicos WHERE especialidade = cardiologia or cidade < > Florianopolis 25

Consultas: SELECT

Estrutura Básica Uma consulta em SQL tem a seguinte forma: select A 1, A 2,..., A n from r 1, r 2,..., r m where P A i representa um atributo R i representa uma tabela P é um predicado Esta consulta é equivalente a uma expressão da Algebra Relacional ( P( r1 r2 r A1, A2,, An m O resultado de uma consulta SQL é sempre uma tabela )) 27

Estrutura Básica: resumindo. SELECT lista de atributos desejados FROM uma ou mais tabelas WHERE com restrições sobre atributos Exemplo: encontre o nome e o salário dos funcionarios da relação funcionário SELECT nome, salario FROM funcionario 28

Distinct O SQL permite duplicatas em relações e resultados em consultas Para eliminar duplatas, usa-se a cláusula DISTINCT depois do SELECT Exemplo: SELECT distinct nome FROM funcionario 29

A cláusula * O asterisco na cláusula SELECT denota TODOS OS ATRIBUTOS SELECT * FROM funcionario Expressões artitméticas podem ser usadas na cláusula SELECT +,,, / Exemplo: SELECT nome, salario + 200 FROM funcionario 30

A cláusula FROM Equivale a operação de Produto Cartesiano da Álgebra Lista as relações envolvidas na consulta Exemplo: SELECT FROM funcionario, departamento 31

A cláusula FROM Quando mais de uma tabela é utilizada é necessário dar um apelido para elas que deve ser utilizado para diferenciar atributos iguais Exemplo: SELECT f. FROM funcionario f, departamento d WHERE f.coddepto = d.coddepto 32

A cláusula WHERE A cláusula where especifica as condições que o resultado precisa satisfazer Corresponde ao predicado de seleção da álgebra Exemplo: SELECT nome, salario FROM funcionario WHERE salario > 2000 operadores AND, OR e NOT podem ser usados Exemplo: SELECT nome, salario FROM funcionario WHERE salario > 2000 AND idade < 30 33

Renomeando atributos Renomeação de atributos old-name as new-name Exemplo: SELECT nome as nomecliente, (salario+200) as comissao FROM funcionario 34

Operações com Strings O SQL permite comparar strings com o operador like Pode ser combinado com outros caracteres % compara substrings Exemplo I: encontre o nome dos funcionarios cujos nomes iniciam com Pedro select nome from funcionario where nome like 'Pedro%' 35

Operações com Strings Exemplo II: encontre o nome dos funcionarios cujos nomes contém Pedro no nome select nome from funcionario where nome like %Pedro%' 36

Operações de Conjunto Envolvem ao menos 2 tabelas Interseção e União: elimina automaticamente repetições Relações precisam ser compatíveis (mesmo número de atributos) Union ALL e intersects ALL preserva duplicatas 37

Operações de Conjunto n Encontre os clientes que tenham empréstimos e contas (select nome from conta) intersect (select nome from emprestimo) (select nome from conta) union (select nome from emprestimo) 38

Ordenando tuplas com Order By Exemplo: Liste em ordem alfabética os funcionarios que trabalham no departamento financeiro select distinct funcionario.nome from funcionario, departamento where funcionario.coddepto=departamento.coddepto AND departamento.nome= financeiro order by funcionario.nome Order by pode ser em ordem descendente Exemplo: order by nome desc 39

Funções de Agregação Operam sobre múltiplos valores de uma coluna da tabela e retornam um valor avg: média min: valor mínimo max: valor máximo sum: soma de valores count: número de valores 40

Exemplos: Funções de Agregação n Encontre o número de tuplas da relação CLIENTE select count(*) FROM cliente n Encontre a soma dos salários dos funcionários select SUM(salario) FROM funcionario 41

Funções de Agregação e Group By Encontre o total de funcionários de cada departamento select d.nome, count(f.*) as numerofuncionarios FROM funcionario f, departamento d WHERE f.coddepto=d.coddepto GROUP BY d.nome Nota: Atributos na cláusula SELECT que estão FORA da função de agregação precisam aparecer na lista de atributos do GROUP BY 42

Funções de Agregação e Having A função HAVING é utilizada para aplicar condições sobre grupos e não sobre uma única tupla Exemplo: Quais são os departamentos onde a soma dos salários dos funcionários ultrapassa 50.000 select d.nome, sum(f.salario) from funcionario f, departamento d where f.coddepto=d.coddepto group by d.nome having um (salario) > 50.000 Nota: predicados da cláusula having são aplicados depois que os grupos foram gerados, mas a condição do where é aplicada antes da formação dos grupos 43

Consultas Aninhadas Uma subconsulta select-from-where está aninhada dentro de outra consulta Exemplo: Selecione os clientes que são funcionários select nomecliente From cliente Where nomecliente in (select nomefuncionario from funcionario) 44

Valores nulos Consulta sobre valores inexistentes Exemplo: Encontre os funcionarios que não possuem carteira de habilitação select nome from funcionario where carteirahabilitacao is null OBS: cuidado que valores nulos em operações matemáticas podem dar problemas 45

SQL e Álgebra Relacional Álgebra nome ( (Médicos X = Médicos.codm = Consultas.codm ( codm ( data = 06/11/13 (Consultas))) ) ) ( CPF (Funcionários)) ( CPF (Pacientes)) ( CPF (Médicos)) ( CPF (Pacientes)) SQL Select nome From Médicos Where codm in (select codm from Consultas where data = 06/11/13 ) Select CPF From Funcionários Where CPF not in (select CPF from Pacientes) Select CPF From Médicos Where CPF in (select CPF from Pacientes) 46

Visões e Autorização de Acesso

Visões Na aula anterior aprendemos consultas SQL. Hoje nos vamos ver visões, que são uma outra forma de fazer consultas em SQL Dois objetivos principais das visões: Simplificar consultas Autorização de acesso (segurança)

Conceito Visão: é um meio de prover ao usuário um modelo personalizado do banco de dados. É uma relação que não armazena dados, composta dinamicamente por uma consulta que é previamente analisada e otimizada.

Visão Um SGBD pode dar suporte a um grande número de visões sobre qualquer conjunto de relações O SGBD armazena a definição da visão, mas ela é instanciada quando uma consulta sobre ela for executada Toda visão pode ser consultada mas nem toda visão pode ser atualizada

Criação e consultas em visões

Em SQL uma visão é definida como; Create view nomedavisao <expressão de consulta>, Onde <expressao de consulta> é qualquer expressão de consulta válida em SQL Projeto (codproj, tipo, descricao) ProjetoEmpregado (codproj, codemp, datainicial, datafinal) Empregado (codemp, nome, categoria, salario) Esta visão terá os atributos especificados na consulta Create view valtoescalao as select codemp, nome, salario from empregado where salario>10000 Tabela base

Visão sobre uma relação Outra forma Create view valtoescalao (a, b, c) as select codemp, nome, salario from empregado where salario>10000 Esta visão terá os atributos a, b, c, que serão instanciados com os respectivos valores recuperados pela consulta (codemp, nome, salario)

Visão com várias relações Projetos do alto escalão ( visão com várias tabelas) Projeto (codproj, tipo, descricao) ProjetoEmpregado (codproj, codemp, datainicial, datafinal) Empregado (codemp, nome, categoria, salario) Create view vprojetoaltoescalao as select e.codemp, e.nome, e.salario, p.descricao from empregado e, projeto p, projetoempregado pe where e.salario>10000 AND e.codemp=pe.codemp AND pe.codproj=p.codproj

Visão: recursividade (visão sobre visão) Projetos do alto escalãoo (visão sobre visão) Projeto (codproj, tipo, descricao) ProjetoEmpregado (codproj, codemp, datainicial, datafinal) Empregado (codemp, nome, categoria, salario) valtoescalao (codemp, nome, salario) Create view vprojetosaltoescalao as select e.codemp, a.nome, a.salario, p.descricao from altoescalao a, projeto p, projetoempregado pe where a.codemp=pe.codemp AND pe.codproj=p.codproj

Consultas em Visões Consultas SQL podem ser especificadas sobre a visão select nome from vprojetosaltoescalao Where descricao = Projeto A Uma visão está sempre atualizada: Ao modificar tuplas nas tabelas envolvidas na visão, a visão vai automaticamente refletir as alterações A visão não é realizada quando é criada mas quando executamos uma consulta sobre ela.

Consultas em Visões Quando uma visão não é mais necessária podemos eliminá-la, usando o comando drop view DROP VIEW nomedavisao

Autorização de Acesso

Autorização de Acesso Objetivo proteção contra acessos mal intencionados controlar quais dados um usuário/grupo de usuários pode ter acesso controlar quais operações um usuário/grupo de usuários pode realizar sobre estes dados

Autorização de Acesso: Exemplos Exemplo 1: Em um sistema bancário, um funcionário precisa saber os dados dos clientes, mas apenas os que tem conta poupança na agência 1899-6 Cliente (#codcli, nome, endereco, codcidade) Agencia (#codagencia, nome, descricao) Poupança (# numconta, # codagencia, # codcli, saldo) Exemplo 2: um funcionário de uma empresa deve ter acesso aos nomes dos funcionários e aos seus projetos, mas não de ter acesso ao salário dos funcionários Empregado (#codemp, nome, categoria, salario) Projeto (#codproj, tipo, descricao) ProjetoEmpregado (# codproj, # codemp, datainicial, datafinal)

Autorização de Acesso Um usuário do Banco de dados pode ter diversas formas de autorização a partes do BD: O DBA é o superusuário do BD, que pode tudo alguns privilégios são exclusivos dele, como a recuperação do BD, a configuração de parâmetros do SGBD, etc. concede/retira (revoga) privilégios de acesso aos outros usuários

Autorização de Acesso Duas formas principais de acesso: Nível de conta (usuário): o administrador do BD pode dar permissões aos usuários para criar esquemas, modificar e criar tabelas e selecionar dados O DBA estabelece permissões da conta, independente das relações do BD

Autorização de Acesso Nível de relação/visão: o DBA pode controlar o privilégio de acesso de cada usuário a relações ou visões específicas do BD definidas para SQL Para cada usuário podem ser dadas permissões de leitura(seleção), modificação e referência

Autorização de Acesso Autorização de leitura: permite apenas recuperar dados de uma relação permissão select Autorização de modificação: privilégios para insert, delete e update Para insert e update é possível restringir os atributos Autorização de referência: uma conta (de usuário) pode fazer referência a uma relação ao especificar restrições de integridade Pode ser por atributo

Autorização de Acesso em SQL Lista basica: alter, delete, index, insert, select e update Sintaxe: grant <lista de privilégios> on <nome da relação ou visão> to <lista de usuários> Exemplo: grant select on cliente to U1, U2, U3 grant update (saldo) on deposito to U1, U2

Autorização de Acesso: Exemplos Exemplo 1: Em um sistema bancário, um funcionário precisa saber os dados dos clientes, mas apenas os que tem conta poupança na agência 1899-6 Cliente (codcli, nome, endereco, codcidade) Agencia (codagencia, nome, descricao) Poupança ( numconta, # codagencia, # codcli, saldo) Solução: usar views Create view vclientepoupancaagencia as select c.codcli, c.nome, p.numconta from cliente c, poupanca p where c.codcli=p.cod_cli and p.codagencia= 1899-6 grant select on vclientepoupancaagencia to U10

Autorização de Acesso: Exemplos Exemplo 2: um funcionário de uma empresa deve ter acesso aos nomes dos funcionários e aos seus projetos, mas não de ter acesso ao salário dos funcionários Create view vempregadoprojeto as select e.codemp, e.nome, p.tipo, p.descricao, j.datainicial, j.datafinal from empregado e, projeto p, projetoempregado j where e.codemp=j.codemp and j.codproj=p.codproj grant select on vempregadoprojeto to U50 Empregado (codemp, nome, categoria, salario) Projeto (#codproj, tipo, descricao) ProjetoEmpregado (# codproj, # codemp, datainicial, datafinal)

Autorização de Acesso Roles (Papéis): são interessantes quando um grupo de usuários tem as mesmas restrições de acesso: ex: vários caixas de um banco (várias agências) tem permissão para creditar e debitar valores na conta dos clientes. Ao invés de dar permissão de inclusão, alteração e exclusão para cada um dos caixas que tem este direito, cria-se o papel movimentação Create role movimentaçao E dá-se a permissão ao papel Grant insert, update, delete ON TABELA to movimentaçao Vincula todos os usuarios ao papel GRANT movimentação TO A, B, C, C

Exemplo Completo Suponha que o DBA crie 4 contas U1, U2, U3 e U4. 1) Somente U1 deve criar relações no banco (privilégio de conta) grant createtab to U1 2) com essa autorização o usuário U1 pode criar relações e terá TODOS os privilégios sobre elas Suponha que U1 criou as relações Empregado (codemp, nome, categoria, salario) Projeto (#codproj, tipo, descricao) ProjetoEmpregado (# codproj, # codemp, datainicial, datafinal)

Exemplo Completo 3) Suponha que U1 quer dar ao usuário U2 permissão para incluir e remover tuplas em Empregado e Projeto grant INSERT, DELETE ON EMPREGADO,PROJETO TO U2 4) Suponha que U1 quer dar ao usuário U3 permissão para recuperar tuplas em Empregado e seja capaz de PROPAGAR este privilégio grant SELECT ON EMPREGADO TO U3 WITH GRANT OPTION Empregado (codemp, nome, categoria, salario) Projeto (#codproj, tipo, descricao)

Exemplo Completo 4) Agora U3 pode conceder privilégio de seleção para U4 sobre a relação Empregado grant SELECT ON EMPREGADO TO U4 Obs: U4 não pode propagar este privilégio 5) Suponha que U1 queira revogar a permissão de U3 REVOKE SELECT ON EMPEGADO FROM U3 Empregado (codemp, nome, categoria, salario) Projeto (#codproj, tipo, descricao)

Exemplo Completo 6)Suponha que U1 queira dar ao usuário U3 permissão apenas para consultar empregados que trabalhem no projeto AATOM. Create view vempregadoprojeto as select e.codemp, e.nome, e.categoria, e.salario from empregado e, projeto p, projetoempregado j where e.codemp=j.codemp and j.codproj=p.codproj and p.descricao= AATOM grant SELECT ON vemrpegadoprojeto TO U3 Empregado (codemp, nome, categoria, salario) Projeto (codproj, tipo, descricao) ProjetoEmpregado (# codproj, # codemp, datainicial, datafinal)

grant all to {listausuários public}

GRANT { { CREATE CONNECT TEMPORARY TEMP } [,...] ALL [ PRIVILEGES ] } ON DATABASE dbname [,...] TO { username GROUP groupname PUBLIC } [,...] [ WITH GRANT OPTION ] Lista de Permissões no PostgreSQL GRANT { { SELECT INSERT UPDATE DELETE REFERENCES TRIGGER } [,...] ALL [ PRIVILEGES ] } ON [ TABLE ] tablename [,...] TO { username GROUP groupname PUBLIC } [,...] [ WITH GRANT OPTION ] GRANT { { USAGE SELECT UPDATE } [,...] ALL [ PRIVILEGES ] } ON SEQUENCE sequencename [,...] TO { username GROUP groupname PUBLIC } [,...] [ WITH GRANT OPTION ]

Procedures

Stored Procedures É um conjunto de comandos SQL definidos pelo usuário que ficam armazenados num BD como um procedimento/função, para eventuais processamentos. São processamentos de tarefas da aplicação que residem no SGBD ao invés de no código da aplicação (cliente).

Stored Procedures Vantagens: 1.Desempenho Ex.: Seja a consulta SELECT codigop, nome, COUNT(*) FROM Projeto p, Alocacao a WHERE p.codproj = a.codigop GROUP BY p.codproj, p.nome

Stored Procedures Se vários usuários realizarem esta consulta o tráfego de rede será alto. se criarmos uma stored procedure para executar esta consulta, os usuários necessitarão apenas de um comando para executar a consulta anterior: EXEC nomeprocedimento; Outro ponto é a compilação, a consulta anterior seria compilada a cada chamada, enquanto o procedimento contendo a consulta seria compilado uma única vez

Stored Procedures - Vantagens 2. Facilita o gerenciamento do BD, pois a consulta é escrita em um único lugar, portanto a manutenção desta torna-se mais eficaz e segura.

Stored Procedures - Vantagens 3. Segurança: podemos usar stored procedures para limitar o acesso de alguns usuários ao BD. Desta forma, a maneira em que o BD pode ser modificado é estritamente definida.

Stored Procedures: SQL/PSM SQL/PSM - Persistent Stored Modules: parte do padrão SQL relativo às Stored Procedures No momento cada SGBD oferece sua própria linguagem (Oracle PL/SQL, Microsoft Transact/SQL, etc) Em PSM, definimos módulos que são coleções de definições de funções ou procedimentos, declarações de tabelas temporárias, dentre outros.

Stored Procedures - SQL/PSM Criando Funções e Procedimentos CREATE PROCEDURE <NOME> (<parâmetros>) declarações locais corpo do procedimento CREATE FUNCTION <NOME> RETURNS <tipo> declarações locais corpo da função obs.: parâmetros são do tipo modo-nome-tipo (onde modo indica IN, OUT ou INOUT) Parâmetros em funções devem ter modo IN

Stored Procedures - SQL/PSM Exemplo: CREATE PROCEDURE MudaEndereco ( IN endantigo VARCHAR(255), IN endnovo VARCHAR(255) ) UPDATE Empregado SET endereco = endnovo WHERE endereco = endantigo;

Stored Procedures - SQL/PSM Alguns Comandos: 1) Chamada a um procedimento: CALL <nome procedure> (<lista argumentos>); Obs.: CALL é aplicado apenas a Procedures (não a Function) Esta chamada pode ser realizada de vários lugares: - Programa com SQL embutido EXEC SQL CALL calcula(:x, 3); - Como comando em outro procedimento ou função PSM: CALL calcula (10);

Stored Procedures - SQL/PSM 2) Comando de Retorno (usado apenas em funções) RETURN <expressão>; (OBS este comando não encerra a função) ) Declaração de variáveis locais: DECLARE <nome> <tipo>;

Stored Procedures - SQL/PSM 3) Comando de atribuição SET <variável> = <expressão>; 4) Grupo de comandos: delimitados por BEGIN e END 5) Labels: colocamos labels em comandos precedendo estes pelo nome do label e dois pontos.

Stored Procedures - SQL/PSM 6) Comandos condicionais 7) Laços IF <condição> THEN LOOP <comandos> <Comandos> ELSEIF <condição> THEN END LOOP; <comandos> ELSE <comandos> END IF;

Stored Procedures - SQL/PSM Exemplo: Função sobre o esquema Filmes que recebe um ano e nome de estúdio e retorna TRUE se aquele estúdio produziu apenas um filme preto e branco naquele ano ou nada produziu. CREATE FUNCTION PretoeBranco( a int, studio char[15]) RETURNS BOOLEAN IF not exists ( select * from Filme where ano = a and nomestudio = studio) THEN RETURN TRUE; -- não faz a função retornar agora ELSEIF 1 <= (select count(*) from Filme where ano = a and nomestudio = nome and NOT emcores) THEN RETURN TRUE; ELSE RETURN FALSE; END IF;

Stored Procedures - SQL/PSM Exemplo: Procedimento que calcula a média e variância de um estúdio CREATE PROCEDURE MeanVar ( IN s char[15], OUT mean REAL, OUT variance REAL) DECLARE NotFound FOR SQLSTATE 02000 ; DECLARE filmecursor CURSOR FOR select duracao from Filme where nomestudio = s; DECLARE novaduracao INTEGER; DECLARE contafilmes INTEGER; BEGIN SET mean = 0.0; SET variance = 0.0; SET contafilmes = 0; OPEN filmecursor; filmeloop: LOOP FETCH filmecursor INTO novaduracao; IF NotFound THEN LEAVE filmecurdor END IF; SET contafilmes = contafilmes + 1; SET mean = mean + novaduracao; SET variance = variance + novaduracao * novaduracao; END LOOP; SET mean = mean / contafilmes; SET variance = variance/contafilmes - mean * mean; CLOSE filmecursor; END;

Stored Procedures - SQL/PSM For-Loops usado para fazer iterator num cursor FOR <nome laço> AS <nome cursor> CURSOR FOR <query> DO <comandos> END FOR; Veja exemplo no próximo slide! - WHILE <condição> DO <comandos> END WHILE; - REPEAT <comandos> UNTIL <condição> END REPEAT;

Stored Procedures - SQL/PSM Exemplo: Mesmo procedimento de média e variância de estúdios, usando FOR-Loops CREATE PROCEDURE MeanVar ( IN s char[15], OUT mean REAL, OUT variance REAL) DECLARE contafilmes INTEGER; BEGIN SET mean = 0.0; SET variance = 0.0; SET contafilmes = 0; FOR filmeloop AS filmecursor CURSOR FOR select duracao from Filme where nomestudio = s; DO SET contafilmes = contafilmes + 1; SET mean = mean + novaduracao; SET variance = variance + novaduracao * novaduracao; END FOR; SET mean = mean / contafilmes; SET variance = variance/contafilmes - mean * mean; END; OBS.Veja que não é necessário OPEN, FETCH e CLOSE do cursor

Stored Procedures - SQL/PSM Exceções em PSM: É possível testar o SQLSTATE para verificar a ocorrência de erros e tomar uma decisão, quando erros ocorram. Isto é feito através do EXCEPTION HANDLER que é associado a blocos BEGIN END (o handler aparece dentro do bloco) Os componentes do handler são: 1) Lista de exceções a serem tratadas 2) Código a ser executado quando exceção ocorrer 3) Indicação para onde ir depois que o handler concluir SINTAXE: DECLARE <onde ir> HANDLER FOR <condições> <comando> As escolhas de <onde ir> são: - CONTINUE - EXIT (sai do bloco BEGIN.. END) - UNDO

Exemplo de exceções em PSM: Stored Procedures - SQL/PSM CREATE FUNCTION getsalario (mat integer) RETURNS FLOAT DECLARE NotFound CONDITION FOR SQLSTATE 02000 ; DECLARE TooMany CONDITION FOR SQLSTATE 21000 ; BEGIN DECLARE EXIT HANDLER FOR NotFound, TooMany RETURN NULL; RETURN ( select salario from Empregado where where matricula = mat); END;

BIBLIOGRAFIA Elmasri & Navathe Fundamentos de Bancos de Dados Carlos Alberto Heuser Projeto de Banco de Dados Korth e Silberchatz Sistema de Bancos de Dados PROGRAMAÇÃO ORIENTADA A EVENTOS 94

BIBLIOGRAFIA Baptista, Cláudio. Banco de Dados II / Capítulo 1: SQL-PSM. Bacharelado em Ciência da Computação UFCG/DSC. HEUSER, C.A. Projeto de Banco de Dados. 6ª Edição. Porto Alegre. Capítulos 2 e 3 Korth, H. F.; Sudarshan, S; Silberschatz, A. Sistema de Banco de Dados. 5a ed. Editora Campus, 2006. - Capítulo 6 PROGRAMAÇÃO ORIENTADA A EVENTOS 95

BIBLIOGRAFIA HEUSER, C.A. Projeto de Banco de Dados. 6ª Edição. Porto Alegre. Capítulos 2 e 3 Korth, H. F.; Sudarshan, S; Silberschatz, A. Sistema de Banco de Dados. 5a ed. Editora Campus, 2006. - Capítulo 6 Elmasri, R.; Navathe S. B. Sistemas de Banco de Dados. 4 ed. Editora Addison-Wesley. 2005. - Capítulo 3 PROGRAMAÇÃO ORIENTADA A EVENTOS 96

BIBLIOGRAFIA Elmasri, R.; Navathe S. B. Sistemas de Banco de Dados. 4 ed. Editora Addison-Wesley. 2005. - Capítulo 3 PROGRAMAÇÃO ORIENTADA A EVENTOS 97