Short Scripts – Setembro 2020

Olá boa tarde, como vai?

Seja bem-vindo, em mais um post da sessão Short Scripts, o terceio post desta sessão em 2020 e o de número 42 em seu total.

Que bom poder te encontrar aqui neste feriado….. Espero que você e seus familiares se encontrem bem neste momento terrível que estamos vivendo em todo Mundo.

Mantendo a tradição estou retornando com mais um conjunto dos “curtos ou pequenos” scripts catalogados e armazenados em minha biblioteca pessoal de códigos relacionados ao Microsoft SQL Server e sua fantástica linguagem de desenvolvimento Transact-SQL.

Como promessa é dívida e deve ser cumprida “ou melhor” compartilhada, vou pagar a minha mais uma vez hoje, feita no encerramento do post anterior publicado no mês de Maio, se por acaso você ainda não acessou o mesmo, calma, fique tranquilo, tudo vai dar certo, no encerramento deste post você terá a sua disposição a relação das últimas cinco publicações relacionadas aos Short Scripts.

Vamos caminhar mais um pouco então……..

O post de hoje

Para este post, vou compartilhar um conjunto de scripts que utilizo em algumas das minhas aulas de Banco de Dados, relacionados a criação e desenvolvimento de User Defined Functions (Funções Definidas pelo Usuário) no Microsoft SQL Server.

Vale ressaltar que as UDFs são tratadadas como um elemento de código preparado que pode aceitar parâmetros, processar uma lógica e retornar dados em um banco de dados SQL Server.

Da mesma forma que as Stored Procedures (Procedimentos Armazenados), as Funções Definidas pelo Usuário desempenham um papel muito importante no SQL Server.

Em conjunto com o uso de forma de execução da User Defined Function, os exemplos de código aqui compartilhados se relacionam com os seguintes assuntos:

◦ Cláusula Values;
◦ Cláusula Where;
◦ Comando Alter Function;
◦ Comando Begin;
◦ Comando Create Function;
◦ Comando Create Table;
◦ Comando Declare;
◦ Comando Drop Function;
◦ Comando Else;
◦ Comando Eng;
◦ Comando Insert;
◦ Comando Return;
◦ Comando Returns;
◦ Comando Select;
◦ Constraint Not Null;
◦ Constraint Null;
◦ Constraint Primary Key;
◦ Data Type Float;
◦ Data Type Int;
◦ Data Type SmallInt;
◦ Data Type Varchar();
◦ Diretiva Set; e
◦ Operador Lógico Condicional IF.

Chegou a hora, mãos nos teclados, a seguir apresento os códigos e exemplos selecionados para o Short Script – Setembro 2020. Vale ressaltar que todos os scripts publicados nesta sessão foram devidamente testados, mas isso não significa que você pode fazer uso dos mesmo em seu ambiente de produção, tenha todo cuidado possível para evitar maiores problemas.

Fique à vontade para compartilhar, comentar e melhorar cada um destes códigos.


Short Scripts

— Exemplo 1 — Criando e Alterando uma User Defined Function —

— Criando a Function F_Triangulo —
Create Function F_Triangulo(@Base Smallint, @Altura Smallint)
Returns INT
AS
Begin
Declare @Area int

Set @Area = (@Base * @Altura)/2

Return @Area
End
Go

— Executando a Função —
Select dbo.F_Triangulo(10,50)

Select dbo.F_Triangulo(10,50) AS [Area do Triângulo]
Go

— Alterando a Função —
Alter Function F_Triangulo(@Base Smallint, @Altura Smallint)
Returns INT
AS
Begin
Return((@Base * @Altura)/2)
End
Go

— Executando a Função —
Select dbo.F_Triangulo(4,25) As ‘Área do Triângulo’
Go

— Exemplo 2 — Criando uma Calculadora através de uma UDF —

— Criando a Function: F_Calculadora —
Create Function F_Calculadora (@vValor1 Float, @vValor2 Float,
@vOperador Char(1))
Returns Float
As
Begin

Declare @Total Float

If @vOperador = ‘+’
Set @Total = @vValor1+@vValor2
Else If @vOperador = ‘-‘
Set @Total = @vValor1-@vValor2
Else If @vOperador = ‘*’
Set @Total = @vValor1*@vValor2
Else If @vOperador = ‘/’
Set @Total = @vValor1/@vValor2
Else
Set @Total = Null

Return(@Total)

End
Go

— Executando a Function —
Select dbo.F_Calculadora(10,20,’+’) As Resultado
Go

— Exemplo 3 — Criando Funções Multi-Statement Table Value —

— Criando as Tabelas Produtos e Pedidos —
Create Table Produtos
(Codigo Int Primary Key,
Descricao Varchar(10) Not Null)
Go

Create Table Pedidos
(Codigo Int Primary key,
CodProduto Int Not Null,
Valor Int)
Go

— Inserindos os Dados —
Insert Into Produtos
Values(1,’A’),
(2,’B’),
(3,’C’)

Insert Into Pedidos Values (1,1,10),
(2,1,20),
(3,2,30),
(4,2,40),
(5,1,10)
Go

— Criando a Função Multi-Statement – F_RetornarProdutosXPedidos —
Create Function F_RetornarProdutosXPedidos (@CodProduto Int)
Returns @Resultado Table
(Codigo int,
Descricao varchar(10),
Valor Int)
As
Begin

Insert @Resultado

Select Pe.Codigo, Pr.Descricao, Pe.Valor
from Pedidos Pe Inner Join Produtos Pr
On Pe.CodProduto = Pr.Codigo
Where Pe.CodProduto = @CodProduto

Return

End

— Execuntando a Função F_RetornarProdutosXPedidos —
Select * from F_RetornarProdutosXPedidos(2)
Go

— Executando a Função F_RetornarProdutosXPedidos em conjunto com Junção —
Select * from Produtos P Inner Join F_RetornarProdutosXPedidos(1) F
On P.Codigo = F.Codigo
Go

— Exemplo 4 — Criando as Tradicionais Funções InLine e Scalar —

— Criando Function – InLine – Table Value —
Create Function F_ConsultarProdutos (@Descricao VarChar(100))
Returns Table
As
Return(
Select * from Produtos
Where Descricao = @Descricao
)
Go

— Executando —
Select * from F_ConsultarProdutos (‘Luvas’)
Go

— Criando Function – Scalar —
Create Function F_SomarValores (@Numero Int, @Numero2 Int)
Returns Int
As
Begin
Declare @Total Int

Set @Total=@Numero+@Numero2

Return (@Total)
End
Go

— Executando —
Select dbo.F_SomarValores (10)
Go

— Exemplo 5 — Criando UDFs com Operadores de Análise Condicional —

— Criando a Tabela Funcionarios —
Create Table Funcionarios
(Codigo Int Identity(1,1) Not Null,
Nome Char(10) Not Null,
Idade TinyInt Not Null,
Salario Decimal(10,2) Null)
Go

— Inserindo os dados na tabela Funcionarios —
Insert Funcionarios
Values (‘Antonio’,38,1000), (‘Bras’,34,200), (‘Carlos’,21,450), (‘Carla’,16,820)
Go

— Criando a Function F_SalarioPremio —
Create Function F_SalarioPremio (@CodigoFuncionario Int)
Returns Decimal(10,2)
As
Begin

Declare @Salario Decimal(10,2), @Idade Tinyint

Select @Salario = Salario, @Idade = Idade From Funcionario
Where Codigo = @CodigoFuncionario

If @Idade <= 30
Set @Salario = @Salario * 1.1
Else
Set @Salario = @Salario * 1.2

Return @Salario

End
Go

— Executando a Função F_SalarioPremio —
Select dbo.F_SalarioPremio(4) As ‘Salário Prêmio’
Go

— Criando a Function F_SalarioComBonus —
Create Function F_SalarioComBonus(@CodFunc INT)
Returns Decimal(10,2)
AS
Begin
Declare @ValorSalario Decimal(10,2)

Select @ValorSalario=Salario From Funcionario
Where Codigo = @CodFunc

Return (@ValorSalario+1000)
End
Go

— Executando —
Select dbo.F_SalarioComBonus(2) As ‘Salário com Bônus….’
Go

— Excluir a função atual —
Drop Function F_SalarioComBonus
Go

— Criando a Função InLine – F_FuncPremio —
Create Function F_Premio(@Nome Varchar(10))
Returns Table
AS
Return (Select Salario+1000 As ‘Premio’
From Funcionario
Where Nome = ‘Carla’)
Go

— Executando a Função F_Premio —
Select Premio As ‘Salario + R$ 1.000’ From dbo.F_Premio(‘Carla’)
Go


Muito bem, missão mais que cumprida!

Uma nova relação de short scripts acaba de ser compartilhada, mesmo sendo denominados shorts entre aspas “curtos ou pequenos”, posso garantir que todos estes exemplos são de grande importância, apresentam um valor e conhecimento do mais alto nível.

Chegamos ao final de mais um Short Scripts, espero que este material possa lhe ajudar, ilustrando o uso de alguns recursos e funcionalidades do Microsoft SQL Server.

Acredito que você tenha observado que estes códigos são conhecidos em meu blog, todos estão relacionados aos posts dedicados ao Microsoft SQL Server publicados no decorrer dos últimos anos.

Boa parte deste material é fruto de um trabalho dedicado exclusivamente a colaboração com a comunidade, visando sempre encontrar algo que possa ser a solução de um determinado problema, bem como, a demonstração de como se pode fazer uso de um determinado recurso.

Links

Caso você queira acessar os últimos posts desta sessão, não perca tempo acesse os links listados abaixo:

https://pedrogalvaojunior.wordpress.com/2020/05/25/short-scripts-maio-2020/

https://pedrogalvaojunior.wordpress.com/2020/02/05/8295/

https://pedrogalvaojunior.wordpress.com/2019/11/15/short-scripts-novembro-2019/

https://pedrogalvaojunior.wordpress.com/2019/09/11/short-scripts-setembro-2019/

https://pedrogalvaojunior.wordpress.com/2019/06/08/short-scripts-junho-2019/

Agradecimento

Obrigado mais uma vez por sua visita, fico honrado com sua ilustre presença, desejo e espero que você possa ter encontrado algo que lhe ajudou.

Volte sempre, nos encontraremos mais uma vez na sessão Short Scripts no próximo post.

Um ótimo feriado, boa semana e saúde.

Até mais.