para criar uma procedure bastar iniciar com o seguinte comando:
CREATE PROCEDURE [PROC_TESTE]
AS
END
CREATE PROCEDURE [PROC_TESTE] (@var1 datetype, @var2 datetype)
AS
END
essa é a forma mais simples de criar uma storage procedure, mas nesse caso a SP não irá fazer nada porque não tem nenhum comando para realizar, vamos adicionar algumas coisas interessantes. Para fazer uma declaração de variáveis você deve declarar da seguinte forma:
CREATE PROCEDURE [PROC_TESTE] (@var1 datetype, @var2 datetype)
AS
declare @vt1 int
declare @vt2 date
declare @err_instrucao varchar(255)
BEGIN
END
Você pode colocar N variáveis de acordo a sua necessidade, não tem um limite pra isso mas lembre-se que todas as variáveis devem estar devidamente declaradas e com os tipos certos (varchar, int, date, text, char e outros).
As variáveis colocadas no início da chamada da SP já estão setadas com os devidos valores, mas as variáveis que foram declaradas durante precisam receber os seus valores, para isso existe duas maneiras de fazer isso.
1-
SET @vt2 = GETDATE()
2 -
SELECT @2 = DT_NASC FROM TB1
Eu costumo usar o Transaction Isolation para isolar as todas as transações quer forem feitas e bloquear que outras transações façam alterações nas linhas. Também uso o Begin Tran para definir uma transação e validar se tudo está sendo feito corretamente fazendo um Commit, caso contrário posso definir que todos os comandos executados possam dar um Rollback.
CREATE PROCEDURE [PROC_TESTE] (@var1 datetype, @var2 datetype)
A instrução "if (@@error <> 0 ) goto err_instrucao" serve para validar se o comando anterior foi executado com sucesso, você pode colar esse comando após cada comando de Insert, Update e Delete, se o comando for executado com sucesso retorna 0 caso contrário vai retornar outro código de erro.
Adicionei a função "raiserror (@err_update,16,1)" essa função serve para apresentar o erro personalizado conforme a sua mensagem que você definir para ficar mais fácil. Analisando a estrutura você verá que tem um rollback transaciton que irá desfazer a transação se der algum erro. Gosto de colocar um "return" para o caso de estar trabalhando em conjunto com outras aplicações que precisam saber se deu certo ou não a SP, isso fica mais fácil de controlar.
Particularmente eu gosto de trabalhar desta maneira na criação de SP, para garantir que as transações sejam executadas da melhor forma e prevendo possíveis erros.
Se você tem alguma sugestão ou outro método de fazer compartilhe com os leitores.
As variáveis colocadas no início da chamada da SP já estão setadas com os devidos valores, mas as variáveis que foram declaradas durante precisam receber os seus valores, para isso existe duas maneiras de fazer isso.
1-
SET @vt2 = GETDATE()
SELECT @2 = DT_NASC FROM TB1
Eu costumo usar o Transaction Isolation para isolar as todas as transações quer forem feitas e bloquear que outras transações façam alterações nas linhas. Também uso o Begin Tran para definir uma transação e validar se tudo está sendo feito corretamente fazendo um Commit, caso contrário posso definir que todos os comandos executados possam dar um Rollback.
CREATE PROCEDURE [PROC_TESTE] (@var1 datetype, @var2 datetype)
AS
declare @vt1 int
declare @vt2 date
declare @err_instrucao varchar(255)
BEGIN
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
begin transaction
SET @err_instrucao = 'motivo do erro'
UPDATE TB_TESTE SET [num_cpf] = '00000000000' where [cod_teste] = 2
if (@@error <> 0 ) goto err_instrucao
commit transaction
END
A instrução "if (@@error <> 0 ) goto err_instrucao" serve para validar se o comando anterior foi executado com sucesso, você pode colar esse comando após cada comando de Insert, Update e Delete, se o comando for executado com sucesso retorna 0 caso contrário vai retornar outro código de erro.
CREATE PROCEDURE [PROC_TESTE] (@var1 datetype, @var2 datetype)
AS
declare @vt1 int
declare @vt2 date
declare @err_instrucao varchar(255)
BEGIN
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
begin transaction
SET @err_instrucao = 'motivo do erro'
UPDATE TB_TESTE SET [num_cpf] = '00000000000' where [cod_teste] = 2
if (@@error <> 0 ) goto err_instrucao
commit transaction
return 0
err_instrucao:
raiserror (@err_update,16,1)
rollback transaction
return 1
END
Adicionei a função "raiserror (@err_update,16,1)" essa função serve para apresentar o erro personalizado conforme a sua mensagem que você definir para ficar mais fácil. Analisando a estrutura você verá que tem um rollback transaciton que irá desfazer a transação se der algum erro. Gosto de colocar um "return" para o caso de estar trabalhando em conjunto com outras aplicações que precisam saber se deu certo ou não a SP, isso fica mais fácil de controlar.
Particularmente eu gosto de trabalhar desta maneira na criação de SP, para garantir que as transações sejam executadas da melhor forma e prevendo possíveis erros.
Se você tem alguma sugestão ou outro método de fazer compartilhe com os leitores.
Nenhum comentário:
Postar um comentário