Criando procedures SQL

setembro 30, 2007

Uma maneira muito útil de fazer uma consulta em uma tabela é a utilização de PROCEDURES SQL. A criação e utilização desta instrução é simples, veja abaixo a sintaxe:

CREATE PROC[EDURE] nome_procedure

[

@parametro tipo_parametro [=valor_padrao]

]

AS

instrucao_SQL […n]

Irei criar uma PROCEDURE que consulta todos os produtos da tabela ‘Produto’ ordenando pelo o valor do produto (Valor) em ordem decrescente.

CREATE PROCEDURE sp_produto_informar

AS

SELECT

Nome,

Descricao,

Valor

FROM

Produto

ORDER BY

Valor

DESC

A instrução ORDER BY ordena um determinado campo, porém prejudica fortemente a performance do servidor, portanto evite usar esta instrução (que muitas vezes é indispensável).

Agora adicionarei um parâmetro a consulta que será comparado no campo ‘Nome’ e o resultado também será ordenado pelo ‘Valor’ de forma decrescente.

CREATE PROCEDURE sp_produto_informar

@Nome VARCHAR(64)

AS

SELECT

Nome,

Descricao,

Valor

FROM

Produto

WHERE

Nome LIKE ‘%’ + @Nome + ‘%’

ORDER BY

Valor

DESC

Para executar esta PROCEDURE basta abrir MS SQL Server e executar o seguinte código:

EXECUTE sp_produto_informar ‘Refri’

ou

EXEC sp_produto_informar ‘Refri’

Esta consulta retornará todos os produtos cujo o nome comece com ‘Refri’ e ordená-los novamente pelo valor decrescente. Lembrando que SQL não é case-sensitive.

A partir desta sintaxe pode-se passar quantos parâmetros for necessário para fazer uma consulta mais precisa e se obter o resultado exato que se deseja. Muitos programadores utilizam a identificação daquele registro na tabela, que deve ser única, uma chave primária.

Uma PROCEDURE pode também fazer qualquer outra operação na base, como por exemplo: inserir, alterar e deletar algum registro. A instrução abaixo permite inserir algum registro na tabela através de uma PROCEDURE, passando os parâmetros necessários.

CREATE PROCEDURE sp_produto_inserir

@Nome VARCHAR(64),

@Descricao TEXT,

@Valor MONEY

AS

INSERT INTO

Produto(Nome, Descricao, Valor)

VALUES(

@Nome,

@Descricao,

@Valor

)

Os campos da tabela podem ser omitidos, contanto que os valores estejam na ordem dos campos.

Abaixo segue um exemplo de uma PROCEDURE que faz a alteração de alguns campos (Nome, Descricao e Valor):

CREATE PROCEDURE sp_produto_alterar

@ID BIGINT,

@Nome VARCHAR(64),

@Descricao TEXT,

@Valor MONEY

AS

UPDATE

Produto

SET

Nome = @Nome,

Descricao = @Descricao,

Valor = @Valor

WHERE

ID = @ID

Como havia dito, a variável @ID deve conter o chave primária para que a alteração seja única e eficiente.

Deixe suas críticas, comentários e/ou sugestões sobre o artigo. Até o próximo artigo.