Ir para conteúdo
Fórum Script Brasil
  • 0

Procedure Com Cursor


Guest - Michelle -

Pergunta

Guest - Michelle -

Estou criando uma procedure que faz uma consulta e executa outras duas procedures para cada registro da consulta.

CREATE PROCEDURE sp_atualDiariaVerifDebNet

--@datainicio varchar(10),

--@datafim varchar(10),

--@vencimento varchar (10)

--@retorno varchar(2) OUTPUT

AS

BEGIN

DECLARE @nr_aluno varchar(9), @ant varchar(5), @atual varchar(5)

DECLARE cursor_deb CURSOR FOR

SELECT top 10 E1_CLIENTE FROM V_SE1_DEB WHERE E1_CLIENTE > 100000000 AND E1_CLIENTE < 399999999

OPEN cursor_deb

SET NOCOUNT ON

--SELECT @idMenu=tp_servico,@nomeMenu=ds_descricao FROM f_servico WHERE tp_servico=@servico

FETCH NEXT FROM cursor_deb INTO @nr_aluno

WHILE @@FETCH_STATUS = 0

BEGIN

--SELECT @retorno='<li><a href=teste.asp?id='+cast(@idMenu as varchar)+'>'+cast(@nomeMenu as varchar)+'</a></li>'

exec sp_atualDiariaSE1VerificaDebitosReneg '100010057','20060601','20061130','20060717',@atual OUTPUT -- atual

exec sp_atualDiariaSE1VerificaDebitosAnt '100010057','20060701',@ant OUTPUT -- anterior

print @atual+' '+@ant

FETCH NEXT FROM cursor_deb INTO @nr_aluno

END

SET NOCOUNT OFF

CLOSE cursor_deb

DEALLOCATE cursor_deb

END

GO

Porem, quando executo a procedure, ocorre o erro:

Server: Msg 8144, Level 16, State 2, Procedure sp_atualDiariaSE1VerificaDebitosReneg, Line 0

Too many arguments were supplied for procedure sp_atualDiariaSE1VerificaDebitosReneg.

alguém sabe o que posso fazer para reparar esse erro, ou então mudar a chamada das procedures???

Obrigada.

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

exec sp_atualDiariaSE1VerificaDebitosReneg '100010057','20060601','20061130','20060717',@atual OUTPUT -- atual

o problema (acho) está aqui. você acho que esta passando mais parametros do que a procedure realmente pode receber. tipo, todos esses valores que você passou são mesmo parametros dessa procedure sp_atualDiariaSE1VerificaDebitosReneg? da uma olhada se você não passou a mais, ou esqueceu de declarar o parametro na propria sub sp_atualDiariaSE1VerificaDebitosReneg.

ou talvez o erro esteja na sub sp_atualDiariaSE1VerificaDebitosReneg mesmo, tente testar ela direto no query analizer pra ver se não da problema.

otra coisa, o que faz o OUTPUT no final da linha??

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - Michelle -

Olá amigo,

Verifiquei a procedure e está correta.

Coloquei o OUTPUT no fim da linha para retornar o valor executado pela procedure, você sabe como poderia retornar o resultado da procedure de uma forma melhor???

Tentei modificar o código, mas não reconhece a sintaxe

set @atual = EXEC (sp_atualDiariaSE1VerificaDebitosReneg @matricula='100010057',@datainicio='20060601',@datafim'20061130',@vencimento'20060717')

você pode me ajudar???

Obrigada :-)

Link para o comentário
Compartilhar em outros sites

  • 0

poste o codigo da sp_atualDiariaSE1VerificaDebitosReneg inteira.

esse erro é so na hora de executar?? quando você poe check syntax, ele não acusa nada?

e se você pusesse

select @atual = EXEC (sp_atualDiariaSE1VerificaDebitosReneg @matricula='100010057',@datainicio='20060601',@datafim='20061130',@vencimento='20060717')

?

esses parametros @datainicio, etc estao em que formato?? se for datetime, ele aceita mesmo essa data sem formatacao??

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - michelle -

olha essa é a procedure completa

CREATE PROCEDURE sp_atualDiariaVerifDebNet

--@datainicio varchar(10),

--@datafim varchar(10),

--@vencimento varchar (10)

--@retorno varchar(2) OUTPUT

AS

BEGIN

DECLARE @nr_aluno varchar(9), @ant varchar(5), @atual varchar(5), @query varchar(100)

DECLARE cursor_deb CURSOR FOR

SELECT top 10 E1_CLIENTE FROM V_SE1_DEB WHERE E1_CLIENTE > 100000000 AND E1_CLIENTE < 399999999

OPEN cursor_deb

SET NOCOUNT ON

--SELECT @idMenu=tp_servico,@nomeMenu=ds_descricao FROM f_servico WHERE tp_servico=@servico

FETCH NEXT FROM cursor_deb INTO @nr_aluno

WHILE @@FETCH_STATUS = 0

BEGIN

--SELECT @retorno='<li><a href=teste.asp?id='+cast(@idMenu as varchar)+'>'+cast(@nomeMenu as varchar)+'</a></li>'

select @atual = EXEC ('sp_atualDiariaSE1VerificaDebitosReneg @matricula=100010057,@datainicio=20060601,@datafim=20061130,@vencimento=20060717')

select @ant = EXEC ('sp_atualDiariaSE1VerificaDebitosAnt @matricula=100010057, @vencimento=20060701')

print @atual+' '+@ant

FETCH NEXT FROM cursor_deb INTO @nr_aluno

END

SET NOCOUNT OFF

CLOSE cursor_deb

DEALLOCATE cursor_deb

END

GO

coloquei as linhas como você falou, mas ocorreu erro de sintaxe "EXEC"

os parametros estao como varchar, já testei passando a data nesse formato e ele aceita.

Link para o comentário
Compartilhar em outros sites

  • 0

poste o codigo td da sp_atualDiariaSE1VerificaDebitosReneg

do jeito que tava antes:

set @atual = EXEC (sp_atualDiariaSE1VerificaDebitosReneg @matricula='100010057',@datainicio='20060601',@datafim'20061130',@vencimento'20060717')
faltaram dois sinais de igual, sera que não funciona assim:
set @atual = EXEC (sp_atualDiariaSE1VerificaDebitosReneg @matricula='100010057',@datainicio='20060601',@datafim='20061130',@vencimento='20060717')

?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...