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

CURSOR passando parâmetros para PROCEDURE


andreluis1411

Pergunta

Bom dia... Criei a tabela de faturamento da universidade onde trabalho, de acordo com as regras repassadas pela contabilidade. Porém quero deixar a contabilidade executar essa rotina de acordo com as datas que eles precisam. Então criei um forma dentro do programa contabil, onde a contabilidade informa as datas (último dia) dos meses em que ela precisa do faturamento condensado para análise. Isso está funcionando; entretanto, como poderão ser vários meses a cada execuação, a única maneira de pegar todos as datas foi criando o cursor para selecionar as datas, criar aquelas que faltam e então repassar como parâmetros para as procedures.

/* Declaração das variáveis a serem utilizadas na transação */
declare @REF_INI as datetime;
declare @REF_FIN as datetime;
declare @PER_INI as datetime;
declare @PER_FIN as datetime;

/* Seleciona data salva em formato texto pelo aplicativo e converte para valor de data => REFERENCIA INICIAL */
set @REF_INI = 
    (select convert(datetime,
        convert(varchar(04), substring(descricao, 7, 4)) + '-' +
        convert(varchar(02), substring(descricao, 4, 2)) + '-' +
        convert(varchar(02), substring(descricao, 1, 2))) 
    from 
        gconsist 
    where 
        codcoligada = 1 
        and aplicacao = 'C' 
        and codtabela = 'REFERENCIA' 
        and codcliente = 1)

/* Seleciona data salva em formato texto pelo aplicativo e converte para valor de data => REFERENCIA FINAL */
set @REF_FIN =
    (select convert(datetime,
        convert(varchar(04), substring(descricao, 7, 4)) + '-' +
        convert(varchar(02), substring(descricao, 4, 2)) + '-' +
        convert(varchar(02), substring(descricao, 1, 2))) 
    from 
        gconsist 
    where 
        codcoligada = 1 
        and aplicacao = 'C' 
        and codtabela = 'REFERENCIA' 
        and codcliente = 2)

/* Seleciona as datas relacionadas para a execuação das procedures - CURSOR das datas */
/* Essa data refere-se ao fim de cada período - cada mês - de acordo com a necessidade da contabilidade */
declare ATUALIZA_FATURAMENTO_GERAL cursor for
(select
    convert(datetime,
        convert(varchar(04), substring(descricao, 7, 4)) + '-' +
        convert(varchar(02), substring(descricao, 4, 2)) + '-' +
        convert(varchar(02), substring(descricao, 1, 2))) 
from
    gconsist
where
    codcoligada = 1
    and aplicacao = 'C' 
    and codtabela = 'FATURAMENT')

open ATUALIZA_FATURAMENTO_GERAL

fetch next from ATUALIZA_FATURAMENTO_GERAL into @PER_FIN

while @@fetch_status = 0

begin

    /* Cria a data inicial do período, de acordo com a data final selecionada no CURSOR => PERIODO INICIAL */
    set @PER_INI = convert(datetime,
        convert(varchar(04), datepart(year, @PER_FIN)) + '-' +
        convert(varchar(02), datepart(month, @PER_FIN)) + '-01')

    /* 9 Procedures a serem executadas com os parametros selecionados/criados */
    exec FAT_1_SALDOANTERIOR @REF_INI, @REF_FIN, @PER_INI, @PER_FIN
    go
    exec FAT_2_MENSAL @REF_INI, @REF_FIN, @PER_INI, @PER_FIN
    go
    exec FAT_3_BAIXAS @REF_INI, @REF_FIN, @PER_INI, @PER_FIN
    go
    exec FAT_4_ANTEC_FAT_MES_BX_ANT @REF_INI, @REF_FIN, @PER_INI, @PER_FIN
    go
    exec FAT_5_ANTEC_FAT_POST_BX_MES @REF_INI, @REF_FIN, @PER_INI, @PER_FIN
    go
    exec FAT_6_ACORDOS_TOTAIS @REF_INI, @REF_FIN, @PER_INI, @PER_FIN
    go
    exec FAT_7_ACORDOS_FAT_POST_BX_MES @REF_INI, @REF_FIN, @PER_INI, @PER_FIN
    go
    exec FAT_8_ACORDOS_FAT_MES_BX_ANT @REF_INI, @REF_FIN, @PER_INI, @PER_FIN
    go
    exec FAT_9_SALDO_ANTERIOR @REF_INI, @REF_FIN, @PER_INI, @PER_FIN
    go

    /* Próxima data, caso exista */
    fetch next from ATUALIZA_FATURAMENTO_GERAL into @PER_FIN

end

close ATUALIZA_FATURAMENTO_GERAL

deallocate ATUALIZA_FATURAMENTO_GERAL

Mas acontece os seguintes erros:

Erro 1

Msg 102, Level 15, State 1, Line 49

Incorrect syntax near '@PER_FIN'.

exec FAT_1_SALDOANTERIOR @REF_INI, @REF_FIN, @PER_INI, @PER_FIN

A linha que o SQL Server Management Studio acusa erro é a destacada acima... Só se não seja possível trabalhar com variáveis para executar procedures, pois na sintaxe não encontrei erro.

Erro 2

Msg 137, Level 15, State 2, Line 1

Must declare the scalar variable "@REF_INI".

declare @REF_INI as datetime;

Então... esse é mais esquisito ainda... Ele acusa erro na linha da declaração da variável.... :wacko:

Mas enfim... Alguém já executou procedures com parâmentros selecionado/armazendos dentro de váriaveis?!?!

Fico no aguardo.

OBS.: Não tenho acesso ao código fonte do aplicativo, razão pela qual as procedures foram desenvolidas e as datas salvas em formato TEXTO já que o programa trata isso como "CAMPO COMPLEMENTAR"

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...