Esse artigo faz parte da revista SQL Magazine edição 58. Clique aqui para ler todos os artigos desta edição

endendo a utilizar este recurso no SQL Server

 

Uma Stored Procedure (SP) é uma coleção de comandos em SQL para gerenciamento de banco de dados que encapsula tarefas repetitivas, aceita parâmetros de entrada e retorna um valor de status (para indicar aceitação ou falha na execução). Entre seus benefícios, pode reduzir o tráfego na rede, melhorar o desempenho do sistema, criar mecanismos de segurança, etc. Fora a questão do desempenho, Stored Procedure pode ser usada por qualquer sistema, centralizando assim qualquer problema que possa ocorrer. Sem contar que se houver qualquer tipo de alteração, basta alterar apenas em um lugar específico e todo sistema continuará a funcionar teoricamente.

A quantidade de SPs em um sistema influencia diretamente no esforço para seu desenvolvimento e, principalmente, sua manutenção, pois uma alteração pode requerer modificações em diversas SPs com características semelhantes. Neste contexto, o uso de instruções SQL dinâmicas com SP contribui para a centralização das SPs com características similares, na qual várias SPs podem ser unidas em uma única e a decisão de qual delas seria executada seria baseada em parâmetros passados pelos usuários. É importante estar atento ao fato de que a união de SPs, ou seja, SPs dentro de SPs, não é recomendado devido à dificuldade de manutenção (é uma prática fora dos padrões e práticas recomendadas na comunidade de banco de dados).

Neste artigo abordaremos a construção de Stored Procedures utilizando SQL dinâmico com o SGBD SQL Server.

 

SQL Dinâmico e Stored Procedures

SQL dinâmico é um comando PS/SQL que pode ser codificado dentro de uma string montada de acordo com os dados enviados pelo programa ou usuário, ou seja, a montagem é feita no tempo de execução gerando códigos. Por exemplo: “SELECT campo FROM tabela WHERE campo=valor”.

Esse exemplo pode ser criado dinamicamente, ou seja, na opção “WHERE” o campo pode ser escolhido de acordo com o que o usuário passou como parâmetro.

No caso desse artigo, iremos mostrar como funciona essa funcionalidade dentro de uma Stored Procedure com banco de dados SQL Server. As Stored Procedures ficam dentro do banco de dados com um PS/SQL criado e esperando ser chamada para a execução.

SQL dinâmico pode ser utilizado em muitos casos; por exemplo, o desenvolvedor pode gerar uma única Stored Procedure (SP) fazendo três funcionalidades simultaneamente: INSERT, SELECT e DELETE. A decisão de qual funcionalidade seria executada pela SP ocorreria de acordo com as opções (parâmetros) enviadas no momento da execução da SP. Esse tipo de SP reduz o esforço para criação de códigos SQL e, principalmente, facilita a organização das operações em um banco de dados, uma vez que as operações sobre uma mesma tabela poderiam estar centralizadas em um único local (em uma única SP).

Por exemplo, vamos considerar o seguinte cenário: em um banco de dados que contém uma tabela de usuário, podemos criar uma SP onde é feito apenas um SELECT em uma tabela de usuários. Porém, se for passado o número do usuário, o SELECT retorna apenas os dados de acordo com o número, e se o número for zero ou NULL, o SELECT retorna todos os usuários da tabela. Isso sim economiza o desenvolvimento de duas SP’s ou de dois “SELECTs”.

Para uma leitura mais agradável deste artigo, recomendamos que o leitor tenha um mínimo de conhecimento em:

 

·         Banco de dados SQL Server;

·         Um pouco de conhecimento sobre SP (Stored Procedure);

·         Enterprise Manager;

·         Query Analyzer.

 

Construindo o banco de dados e a tabela de exemplo

Utilizaremos o Enterprise Manager para gerar as consultas (SELECTs) e criar tabelas e stored procedures no banco de dados.

O primeiro passo para mostrar a utilização de SQL Dinâmico com Stored Procedures consiste na criação do banco de dados. Para isso, criamos um banco de dados chamado DB_Dinamico apenas clicando com o botão direito em cima da pasta DATABASES e depois em “New DataBase...” (ver Figura 1).

 

Figura 1. Tela de Criação de Bancos de Dados no Enterprise Manager

 

Caso desejássemos criar este banco de dados via ferramenta Query Analyzer, o código SQL referente a essa operação está descrito na Listagem 1.

 

Listagem 1. Criando o banco de dados BD_Dinamico via código SQL

CREATE DATABASE BD_DINAMICO

 

O passo seguinte consiste na criação da tabela. Para isso, criamos a tabela de usuário chamada TB001_USUARIO via Enterprise Manager clicando com o botão direito em cima do item Tables e depois “New Table...” ...

Quer ler esse conteúdo completo? Tenha acesso completo