Como criar PROCEDURE com CURSOR


Uma PROCEDURE é um procedimento armazenado que fica salvo no banco sendo geralmente mais rápido que uma consulta normal e que pode ser executado de diversas formas, seja através de uma simples consulta SQL, de uma TRIGGER ou de uma JOB.




Com a utilização de CURSOR que funciona como um array, podemos percorrer a variável e em seguida executar as ações desejadas. Uma alternativa para o CURSOR, em caso de lentidão, seria a utilização de tabelas temporárias.

No exemplo abaixo, criamos uma procedure onde será feito uma consulta no meu banco de dados e os resultados salvos na variável "dados". Depois com a utilização do cursor, fazemos a inserção das informações em uma outra tabela.

Procedure utilizando cursor:

USE [minhaBaseDeDados]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[procedureComCursor] /* Nome da Procedure */
@parametro int    /*  Definição de parâmetro para a procedure */
AS
begin

 declare @col1 int,  @col2 int , @col3 varchar(10)  /* Parâmetros par ao Cursor */

 declare dados cursor scroll for     /* Declaração do Cursor (Array) */

  select
   coluna1
   , coluna2
   , coluna3
  from tabela t (nolock)
  where t.coluna1 = @parametro

  open dados  
   fetch next from dados into @col1,@col2,@col3   /* Percorrendo os dados do Cursor  */
      WHILE @@FETCH_STATUS = 0  /* Enquanto tiver dados executa a ação */
         begin                 
            EXEC ('INSERT INTO tabelalog (tabcol1,tabcol2,tabcol3) VALUES ('''+@col1 + ''',''' +@col2 +''',''' +@col3+ '''' +')')       
            fetch next from dados into  @col1,@col2,@col3
         end
      close dados   /* Fecha o Cursor */
      deallocate dados   /* Libera a memória utilizada */
  end
--EXEC dbo.procedureComCursor 1   /* Chamando a procedure */

Nenhum comentário:

Postar um comentário