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