Views e Stored Procedures

Propaganda
View,
Stored Procedure e
Function
Prof. André Luiz Montevecchi
[email protected]
View
• Representa logicamente subconjuntos de dados de uma
ou mais tabelas, ou, até mesmo, de outras views.
• Não contém dados próprios, mas é como uma janela
através da qual os dados das tabelas podem ser vistos
ou alterados.
• É armazenada como uma instrução SELECT no dicionário
de dados
View
• As views permitem que usuários façam consultas simples
para recuperar resultados de consultas complexas.
• Pode ser usada para recuperar os dados de várias
tabelas.
• As views fornecem acesso aos dados a grupos de
usuários de acordo com seus critérios em particular.
View
• Uma consulta pode ser embutida na instrução CREATE
VIEW.
• CREATE VIEW nome-da-visão
[(nome-de-coluna-simples [,nome-de-colunasimples]*)]
AS Consulta
• Os dados da view são recuperados da mesma forma que
os dados de uma tabela. Podem ser exibidos o conteúdo
de toda a view ou somente ver linhas e colunas
específicas. Ex: Select * from nome_view
View Simples e Complexa
• A diferença básica está relacionada às operações DML
(insert, update, delete).
• View simples:
– Apresenta os dados a partir de uma única tabela
– Não contém funções ou grupos de dados
– Pode executar a DML através da view
• View complexa:
– Apresenta os dados a partir do join de várias tabelas
– Contém funções ou dados agrupados
– Nem sempre executa a DML através da view
View Simples e Complexa
•
View simples:
CREATE VIEW SAMP.PROJ_COMBO (NUM_PROJ, PROJ_DATA_FIM,
PROJ_EQUIPE, PROJ_CHEFE) AS
SELECT NUM_PROJ, PROJ_DATA_FIM, PROJ_EQUIPE,
PROJ_CHEFE FROM SAMP.PROJETO
UNION ALL
SELECT NUM_PROJ, EMSTDATE, EMPTIME, NUM_EMP FROM
SAMP.ATIV_EMP WHERE NUM_EMP IS NOT NULL
,
•
View complexas:
CREATE VIEW SAMP.DEPT_SUM_VU (NAME, MINSAL, MAXSAL,
AVGSAL) AS
SELECT D.DNAME, MIN(E.SAL), MAX(E.SAL), AVG(E.SAL) FROM
SAMP.EMP E, SAMP.DEPT D
WHERE E.DEPTNO = D.DEPTNO
GROUP BY D.DNAME;
View
• Não poderá ser removido uma linha da View se ela contiver:
– Funções de grupo
– Cláusula GROUP BY
– A palavra-chave DISTINCT
– A palavra-chave da pseudocoluna ROWNUM
• Não poderá ser modificado dados em uma View se ela contiver:
– Uma das condições acima
– Colunas definidas por expressões (Ex: SAL * 12)
• Não poderá ser adicionado dados em uma View se ela contiver:
– Uma das condições acima
– Houver colunas NOT NULL na tabela base que não foi levada
para a view.
View
• É possível executar verificações de integridade
referencial pelas views.
• Essas restrições podem ser impostas no nível de banco
de dados.
• A view poderá ser usada para proteger a integridade dos
dados, mas o uso é muito restrito.
• A cláusula WITH CHECK OPTION especifica que
INSERTS e UPDATES executados pela view não tem
permissão de criar linhas que a view não possa
selecionar. É garantido que a DML na view continue no
domínio da view.
View
CREATE VIEW EMPVU20
AS
SELECT *
FROM SAMP.EMP E
WHERE E.DEPTNO = 20
WITH CHECK OPTION ;
• Qualquer tentativa de alteração do número do departamento para
qualquer linha na view falhará porque ela violará a restrição WITH
CHECK OPTION.
UPDATE EMPVU20
SET DEPTNO = 10
WHERE EMPNO = 7788
ERRO: Violação na cláusula WITH
CHECK OPTION na View
View
• Para remover uma view basta usar a instrução:
DROP VIEW NOME_VIEW;
Ex: DROP VIEW EMPVU10;
• A instrução remove a definição da view no banco de
dados, sem eliminar outras views ou tabelas bases que
ela referencia.
• As views ou outras aplicações baseadas em views
deletadas tornam-se inválidas.
Exercício
• Escreva uma VIEW para visualizar o
nome do dentista e o nome do convênio o
qual ele está relacionado.
Procedimentos (Procedures)
•
Os procedimentos e funções assemelham-se muito
com os procedimentos e funções em linguagens como
C e Pascal.
•
Podem ser chamados a partir de outro bloco SQL.
•
São criados, compilados e depois armazenados como
objetos no banco de dados.
•
Promovem a reutilização do código.
Procedimentos (Procedures)
• Somente poderão executar o comando CREATE STORED
PROCEDURE, usuários que são membros da role de
servidor sysadmin ou das roles de Banco de Dados
db_owner e db_ddladmin;
• Em um Stored Procedure, podemos incluir qualquer
comando T-SQL, com exceção dos seguintes: CREATE
PROCEDURE, CREATE RULE, CREATE TRIGGER E
CREATE VIEW;
• Em um Stored Procedure podemos referenciar tabelas,
Views, outras Stored Procedures e tabelas temporárias.
Procedimentos (Procedures)
A estrutura da instrução p/ criação de uma procedure é:
CREATE PROCEDURE procedure_name
[(parameter1 datatype1,
parameter2 datatype2, ...)]
AS
[local_variable_declarations; …]
-- SQL statements
Procedimentos (Procedures)
• Maneiras de chamar um procedimento:
• EXEC SP_DENTISTA ‘nome’;
• EXECUTE SP_DENTISTA ‘nome’;
• Eliminando um procedimento:
• DROP PROCEDURE nome_do_procedimento;
Funções (Functions)
• São blocos nomeados que retornam um valor;
• Uma diferença básica entre um procedimento e uma
função é que o procedimento é uma instrução T-SQL por
si própria, enquanto uma chamada de função é chamada
como parte de uma expressão.
Funções (Functions)
• A estrutura da instrução para criação de uma função é:
• CREATE FUNCTION function_name
( [ { @parameter_name [AS]
scalar_parameter_data_type [ = default ] } [ ,...n ] ] )
• RETURNS scalar_return_data_type
• [ WITH < function_option> [ [,] ...n] ]
• [ AS ]
• BEGIN
function_body
RETURN scalar_expression
Funções (Functions)
• Maneiras de chamar uma função:
• SELECT F_SOMA (2,3);
• Eliminando uma função:
• DROP FUNCTION nome_da_função;
Exercício
• Escreva uma função para somar dois
números inteiros.
Exercício 2
• Escreva uma função que receba um
número inteiro e retorne o número ao
quadrado!
Download