Neste artigo veremos os conceitos, sintaxes e exemplos práticos sobre os comandos utilizados para programar no SQL Server.
Introdução – O uso da programação no SQL
Server envolve a criação e uso de variáveis, o uso de elementos de controle de
fluxo e também o uso de Stored Procedures (que serão abordados no próximo
artigo do curso). Assim conseguimos incluir uma determinada lógica em nossas
querys.
Variáveis de Usuário – Uma variável local do
Transact SQL é um objeto nos scripts e batches que mantém um valor de
dado. Através do comando DECLARE, podemos criar variáveis locais, sendo
feito isso no corpo de uma procedure ou batch.
Podemos ver abaixo, na Listagem 01, dois exemplos
de declarações de variáveis, ambos estão corretos, depende do programador qual
irá utilizar.
Listagem 01 – Declaração de Variáveis
Locais
1
2
3
4
5
6
7
8
9
10
11
|
--Exemplo 1
DECLARE @IdUsuario
AS INT, @Nome AS VARCHAR(50), @Idade AS SMALLINT --Exemplo 2
DECLARE @IdUsuario
AS INT DECLARE @Nome AS
VARCHAR(50) DECLARE @Idade AS
SMALLINT |
Em ambos os exemplos temos o uso do caractere coringa
@ antes da variável. Este é um padrão para declarar variáveis e deve ser
seguido pelos programadores. Podemos notar ainda que cada variável declarada tem
seu datatype atribuído.
Obs.:
Lembrando que o AS é um alias e seu uso é
opcional.
É possível atribuir valores para cada uma das variáveis.
Para isso, usamos o comando SET ou o SELECT, como vemos no exemplo
da Listagem 02.
Listagem 02 – Atribuindo valores para as variáveis
declaradas
1
2
3
4
5
|
DECLARE @IdUsuario
AS INT, @Nome AS VARCHAR(50), @Idade AS SMALLINT SET @IdUsuario = 1
SELECT @Nome =
ColunaNome FROM Tabela @Idade = ColunaIdade FROM
Tabela |
Seja com SET ou SELECT,
conseguimos atribuir valor as variáveis, depende da necessidade de cada
desenvolvedor.
Controle de Fluxo – Assim como muitas linguagens de
programação utilizam operadores de condição, o SQL não poderia ficar de fora.
Ele trabalha com esses elementos, também denominado de controle de fluxo,
permitindo assim ao desenvolvedor criar lógicas para as mais variadas situações
e regras de negócio de seu sistema. Os elementos de controle de fluxo que iremos
ver são, nessa ordem, BEGIN/END, IF/ELSE,
CASE/WHEN/THEN/END, WHILE e o TRY...CATCH.
BEGIN/END – Os elementos BEGIN e END tem o objetivo de
iniciar e finalizar, respectivamente, um bloco de comandos, de maneira que este
possa ser posteriormente executado. Podemos aninhar blocos de comando utilizando
estes elementos.
Caso seja
executado um bloco de comandos logo após a realização de um teste de condição,
os elementos BEGIN e END, são usados logo após um comando
IF ou WHILE. Veremos mais a frente exemplos com o uso destes
elementos.
IF/ELSE – Os
elementos IF e ELSE são usados para testar condições quando um
comando Transact-SQL é executado. O IF e ELSE funcionam
similarmente aos comandos de mesmo nome usados em linguagens como C# por
exemplo, para testar condições de execução de
comandos.
Confira abaixo a sintaxe do IF e ELSE no
SQL:
IF Expressao_Booleana
{ comando_sql | bloco_comando }
[ ELSE
{ comando_sql | bloco_comando } ]
Sendo que o argumento Expressao_Booleana pode
retornar TRUE ou FALSE. Se na expressão booleana houver um comando
SELECT, ele deve ser colocado entre parênteses. Já o comando_sql |
bloco_comando representa um comando Transact-SQL ou um agrupamento de
comandos.
Na Listagem 03 temos um exemplo com os elementos
BEGIN/END em conjunto com IF/ELSE.
Listagem 03 – Exemplo com IF/ELSE e
BEGIN/END
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
IF @IdUsuario >
0 BEGIN SELECT IdUsuario FROM Clientes WHERE IdUsuario = @IdUsuario END ELSE
BEGIN SELECT TOP 1 @IdUsuario = IdUsuario FROM Clientes END |
CASE/WHEN/THEN/END
–
O elemento CASE é utilizado para conferir uma lista de condições e,
então, retornar uma entre várias expressões de resultado possíveis. CASE,
que é usado em conjunto com o comando SELECT, é útil quando a intenção é
a de evitar que sejam criados comandos IF aninhados. Ele é considerado
como uma alternativa ao IF. Dois formatos podem ser
designados ao comando CASE: a função simples e a função
pesquisada. Com a primeira, o resultado é obtido por meio da comparação
de uma expressão com uma série de expressões simples. Na segunda função, é
obtido um resultado específico a partir de um conjunto de expressões
booleanas.
Na Listagem 04 pode ser
visto um exemplo prático de uso do CASE.
Listagem 04 – Exemplo de uso do elemento CASE em um
SELECT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
SELECT IdProduto,
Nome, Tipo = CASE WHEN 'A' THEN 'Produto
Nacional' WHEN 'B' THEN 'Produto dos Estados
Unidos' WHEN 'C' THEN 'Produto da
China' ELSE 'Produto de outros
países' END AS [Tipo do Produto] FROM
Produtos |
WHILE – Assim como
o IF/ELSE, o comando WHILE funciona da mesma forma que nas
linguagens de programação: ele faz com que um comando ou bloco de comandos SQL
seja executado repetidamente, ou seja, é criado um loop o comando ou bloco de
comandos, que será executado enquanto a condição especificada for
verdadeira.
A Listagem 05 nos dá um exemplo prático do uso do
WHILE.
Listagem 05 – Exemplo de uso do comando
WHILE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
DECLARE @Contador
AS SMALLINT SET @Contador = 1
WHILE @Contador
<= 10 BEGIN SELECT @Contador SET @Contador = @Contador + 1 END |
No exemplo
acima inicializamos a variável @Contador e atribuímos a ela o valor
1. Logo após é especificado um loop onde dentro dele a variável será
incrementada em 1 a cada “passada” do laço. Esse incremento será feito
até que o valor da variável chegue a 10.
Utilizando os comandos BREAK e CONTINUE,
que serão apresentados a seguir, é possível controlar de dentro do loop a
execução dos comandos do WHILE.
WHILE com BREAK – Podemos usar o WHILE
com BREAK quando desejamos interromper o loop em um determinado ponto. O
BREAK também pode ser usado para finalizar a execução de um loop dentro
de um comando IF/ELSE.
Vemos na Listagem 06 um exemplo com o uso do
BREAK.
Listagem 06 – Exemplo do comando BREAK em conjunto com o
WHILE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
DECLARE @Contador
AS SMALLINT SET @Contador = 1
WHILE @Contador
<= 10 BEGIN SELECT @Contador IF @Contador = 5 BREAK SET @Contador = @Contador + 1 END |
Com a execução do código acima será exibido em tela os
números de 1 a 5. Ao chegar ao número 5, o loop será
interrompido pelo BREAK.
WHILE com CONTINUE
– Com o CONTINUE é
possível reiniciar a execução de um loop executado pelo WHILE e
interrompido pelo BREAK. Da mesma forma que o BREAK, o
CONTINUE geralmente é iniciado por uma condição explicitada pelo
IF. Havendo comandos após o CONTINUE, eles serão
ignorados.
Podemos ver um exemplo com o CONTINUE na
Listagem 07.
Listagem 07 – Exemplo do comando CONTINUE em conjunto com
o WHILE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
DECLARE @Contador
AS SMALLINT SET @Contador = 1
WHILE @Contador
<= 10 BEGIN SELECT @Contador IF @Contador <= 5 BEGIN SET @Contador =
@Contador + 1 CONTINUE
END BREAK END |
Fonte de
Consulta:
Apostila de SQL Server, da Impacta
Tecnologia.
Fonte de pesquisa devmedia.com.br
Nenhum comentário:
Postar um comentário