Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

tiopirata

procedure

Recommended Posts

Pessoal

Preciso de uma ajuda de vcs

 

estou criando um DTS para importacao de dados do SQL para Oracle..(ate aí beleza)

meu DTS, chama uma procedure (ai q ta o negocio)

 

a minha procedure faz o seguinte:

 

pega as marcações do colaborador na data atual.

 

entao eu faço um while para cada colaborador roda dentro do while.

 

eu pego a ultima identificacao do colaborador da tabela,

pelo cursor e joga na variavel e enquanto nao chegar ao ultimo colaborador,

o while roda.

 

quando executo a procedure pelo query analyser, roda legal! :)

 

mas quando executo a procedure pelo dts, só roda uma vez o while, só com

o primeiro registro de identificacao....ele tinha q rodar mais vezes..

 

alguem saberia pq?

Compartilhar este post


Link para o post
Compartilhar em outros sites

pessoal

taí minha procedure...

ainda continuo nao conseguindo resolver essa...

 

DECLARE @P_COD_FUN VARCHAR(20),
		@P_COD_ULTIMO_FUN VARCHAR(20),
		@P_INTERVALO_ANULACAO INT

SET NOCOUNT ON
		
/* CRIA CURSOR PARA PEGAR A ULTIMA IDENTIFICACAO DO FUNC*/
DECLARE COD_ULTIMO_FUN_CURSOR CURSOR FOR 
		SELECT TOP 1 MARC_COD_FUN FROM TABELA WHERE IMPORT = 0 ORDER BY MARC_COD_FUN DESC
		OPEN COD_ULTIMO_FUN_CURSOR

/* CRIA CURSOR PARA PEGAR AS IDENTIFICACAOES DOS FUNC*/
DECLARE COD_FUN_CURSOR CURSOR FOR 
		SELECT DISTINCT MARC_COD_FUN FROM TABELA WHERE IMPORT = 0 ORDER BY MARC_COD_CRACHA
		OPEN COD_FUN_CURSOR

/* JOGA OS VALORES DO CURSOR NA VARIAVEL @P_COD_ULTIMO_FUN*/	
FETCH NEXT FROM COD_ULTIMO_FUN_CURSOR INTO @P_COD_ULTIMO_FUN

SET @P_COD_FUN =0;
SET @P_INTERVALO_ANULACAO = 15; --TEMPO EM MINUTOS

/* ENQUANTO O CRACHA NAO FOR O ULTIMO*/
WHILE @P_COD_FUN <> @P_COD_ULTIMO_FUN
	BEGIN
		/*A CADA WHILE PEGA O PROXIMO FUNC*/
		FETCH NEXT FROM COD_FUN_CURSOR INTO @P_COD_FUN

		/* LISTA DADOS - INICIO IMPORTACAO */
		SELECT  ID, 
				MARC_COD_FUN, 
				INTERVALO = DATEDIFF(MI,DATA1,DATA2) 
		
		FROM	 TABELA AS M1
		WHERE	(IMPORT = 0) 
				AND (MARC_COD_FUN= @P_COD_FUN) 
				AND (
					 DATEDIFF(MI,DATA1,DATA2) > @P_INTERVALO_ANULACAO  
				OR	 DATEDIFF(MI,DATA1,DATA2) IS NULL 
					)

		/* FIM DAS IMPORTACOES */
		
	END
		



/* FECHA O CURSOR*/
CLOSE COD_FUN_CURSOR
CLOSE COD_ULTIMO_FUN_CURSOR

/* REMOVE A REFERÊNCIA DO CURSOR*/
DEALLOCATE COD_FUN_CURSOR
DEALLOCATE COD_ULTIMO_FUN_CURSOR

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.