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