Enviado por Do utilizador6341

04 Stored Procedures

Propaganda
Tópicos Especiais em
Sistemas de Bancos de Dados
Prof. M.Sc. Marcelo Fermann Guimarães
mscfermann @ gmail.com
17 março 2020
Agenda
- Stored Procedures / Functions
- APS – Atividade Prática
Supervisionada
Stored Prodecure (sp)
• Uma stored procedure (sp) é uma coleção de
comandos nomeada que é salva no BD.
• Vantagens de utilizar sp:
– Facilitar a manutenção e a alteração das aplicações
– Ocultar a complexidade de acesso ao BD
– Poder receber parâmetros de entrada e retornar
resultados
– Reduzir o tráfego de rede gerado pela aplicação
– Facilitar e centralizar o gerenciamento de permissões
– Melhorar a velocidade de execução
• Escrever uma sp que imprima “Hello world”
CREATE PROCEDURE sp_Teste AS
BEGIN
SELECT ‘o famoso Hello World’
END
• Para Executar a sp: EXEC sp_Teste
• SP com variável interna: comando DECLARE
CREATE PROCEDURE sp_Teste1 AS
DECLARE @msg varchar (100)
BEGIN
SELECT @msg = ‘o famoso Hello World’
PRINT @msg
END
• Para Executar a sp: EXEC sp_Teste1
SP com Parâmetros de Entrada
• Os parâmetros são sempre declarados como @
e devem ter o tipo de dados definido.
CREATE PROCEDURE sp_Emprestimo_Ano
@ano int
AS
BEGIN
select nome_cli as 'Nome do Cliente',
convert(char, data_emp,103) as 'Data do Emprestimo',
convert(char, data_dev_prev, 103) as 'Data da Devolução Prevista',
convert(char, data_dev_efet, 103) as 'Data da Devolução Efetiva'
from Cliente, Emp_dev
where datepart(yy, data_emp) = @ano and
cliente.CPF_cli = Emp_dev.CPF_cli
END
EXEC sp_Emprestimo_Ano 2017
SP com Parâmetros de Saída
Para definir um parâmetro de saída basta colocar
a palavra OUTPUT após a definição do tipo de
parâmetro.
CREATE PROCEDURE sp_MediaPrecoEstado
@estado char(2),
@media float OUTPUT
AS
BEGIN
SET @media = (Select AVG(preco) as Media
from fita, Fornecedor_Fita, Fornecedor
where UF_forn = @estado AND
Fornecedor_Fita.cod_fita = fita.cod_fita AND
Fornecedor_Fita.CNPJ_forn = Fornecedor.CNPJ_forn)
END
PARA EXECUTAR:
declare @resultado float
exec sp_MediaPrecoEstado 'PR', @Resultado OUTPUT
Print (@Resultado)
• STORED PROCEDURES (SP) - Exercício:
»Considerando o BD TrabNovela:
– Criar uma StoredProcedure que retorne 0 caso a
inclusão de um registro na Tabela
NovelaPersonagem foi correta ou 9 caso o registro
já exista:
CREATE PROCEDURE sp_IncluiNovelaPersonagem
@codNovela int, @codPersonagem int, @retorno int OUTPUT
• FUNCTION:
»Objetivo
– O usuário pode criar suas próprias funções para
auxiliar na busca da informação. As user functions
podem receber um ou mais parâmetros, e não
aceitam parâmetro de output.
– As funções de usuário podem ser de três tipos:
- Scalar
- Multi-statement Table-valued
- In-Line Table-valued
• FUNCTION:
Scalar: são bem parecidas com as bult-in functions,
que existem no banco de dados como a Getdate().
Este tipo de função retorna apenas um parâmetro.
Ex.: retorna o endereço mais o código postal.
CREATE Function sc_RetornaSupplier(@Supplier smallint)
RETURNS Nchar(40)
AS
BEGIN
DECLARE @Retorno Nchar(40)
SET @Retorno=(SELECT Address + " *** " + PostalCode FROM Suppliers
WHERE SupplierID=@Supplier)
RETURN @Retorno
END
• FUNCTION:
Scalar: Modo de usar:
SELECT ProductID , productName,
dbo.sc_RetornaSupplier(SupplierID) as MinhaFuncao
FROM Products
• FUNCTION:
Multi-statement Table-valued
É utilizada para lógicas mais complexas que
costumam conter condicional. Outra diferença
considerável também é que este tipo de função
retorna uma tabela.
É possível definir chave primária, identity, etc, no
retorno da tabela, deixando bem claro que este tipo
de função retorna dados confiáveis e íntegros.
– Ex. Lista várias situações dos produtos em estoque.
• FUNCTION: Multi-statement Table-valued
CREATE Function ms_RetornaProducts(@Valor decimal(18,2)=NULL,
@Descontinuado bit=NULL)
RETURNS @TabelaProduto table(Codigo INT PRIMARY KEY, Nome varchar(50),
Estoque varchar(50), obs varchar(50))
AS
BEGIN
IF @Valor IS NOT NULL
INSERT INTO @TabelaProduto
SELECT ProductID,ProductName,unitsInStock,
case when unitsInstock<10
then "Estoque baixo"
else "Estoque ok"
end
FROM dbo.Products WHERE unitPrice>@Valor
….
• FUNCTION: Multi-statement Table-valued
CREATE Function ms_RetornaProducts(@Valor decimal(18,2)=NULL,
@Descontinuado bit=NULL)
….
ELSE IF @Descontinuado=1
INSERT INTO @TabelaProduto
SELECT ProductID,ProductName,"Sem estoque",
case when unitsInstock<5
then "Possui estoque"
else "limpar estoque"
end
FROM dbo.Products
WHERE Discontinued=@Descontinuado
RETURN
END
• FUNCTION: Multi-statement Table-valued
CREATE Function ms_RetornaProducts(@Valor decimal(18,2)=NULL,
@Descontinuado bit=NULL)
Modo de usar:
SELECT * FROM dbo.ms_RetornaProducts(18.00, null)
Retorno:
• FUNCTION: Multi-statement Table-valued
CREATE Function ms_RetornaProducts(@Valor decimal(18,2)=NULL,
@Descontinuado bit=NULL)
Modo de usar para ver os descontinuados:
SELECT * FROM dbo.ms_RetornaProducts(null,1)
Retorno:
• FUNCTION: Multi-statement Table-valued
CREATE Function ms_RetornaProducts(@Valor decimal(18,2)=NULL,
@Descontinuado bit=NULL)
É possível ainda tratar esta função como uma tabela propriamente dita. Por
exemplo, selecionando campos e filtrando retorno:
SELECT codigo,obs
FROM dbo.ms_RetornaProducts(5.00,null)
WHERE Nome LIKE "%queso%"
Retorno:
• FUNCTION:
In-Line Table-valued
Muito utilizadas para parametrizar views. Este tipo de
função não requer BEGIN, END na criação do seu corpo.
O retorno deste tipo de função também é uma tabela,
mas costuma-se criar o esquema em momento de
execução.
Exemplo:
CREATE Function il_RetornaCustomers(@Regiao nvarchar(30))
RETURNS table
AS
RETURN (SELECT CustomerID as Codigo, CompanyName as Nome
FROM Customers WHERE
Region=@Regiao)
• FUNCTION: In-Line Table-valued
Modo de usar:
SELECT * FROM dbo.il_RetornaCustomers("WA")
Retorno:
Tópicos Especiais em
Sistemas de Bancos de Dados
• Links:
– Youtube Professor Drausio
https://www.youtube.com/watch?v=0r84pdFbulQ
Aprenda como Criar Funções no SQL Server
21 min.
https://www.youtube.com/watch?v=D3uah62lpfo
Criar Stored Procedure de Consultar (Básica)
38 min.
– Thiago Pastorello Gervazoni – Linha de Código
http://www.linhadecodigo.com.br/artigo/687/sql-server-funcoes-de
-usuario-user-functions.aspx
Tópicos Especiais em
Sistemas de Bancos de Dados
• Trabalho 2:
– Em duplas
– Entrega em 24/03/2020 – terça-feira
– Entrega via MOODLE AVA
Perguntas
Download