Ir para conteúdo

Arquivado

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

Leonardo Gazio

[Resolvido] Stored Procedure. O que está errado?

Recommended Posts

Olá Pessoal, não tenho muita experiência em procedures no Oracle, estou tentando criar esse procedure;

 

CREATE OR REPLACE PROCEDURE PRC_LANCACONTASAUTOMATICAS IS
 VPROXIMOMES     CHAR(7);
 VDATAVENCIMENTO DATE;
 VNUMDOC         INTEGER;
BEGIN
 /* SQL QUE VAI LANCAR AS CONTAS DE LANCAMENTO AUTOMATICO 
    CRIADAS NO PLANO DE CONTAS */
 SELECT TO_CHAR(ADD_MONTHS(SYSDATE, 1), 'MM/YYYY') INTO VPROXIMOMES FROM DUAL;

 FOR R IN (SELECT CODPLANOCONTAPAGAR, DESCRICAO, CONTAPERSISTENTE, DIAVENCIMENTO, 
                  NUMDIASANTECEDENCIA, STATUS, VALORCONTAPERSISTENTE 
		FROM TBPLANOCONTASPAGAR WHERE ((TO_DATE(DIAVENCIMENTO||'/'||VPROXIMOMES) - SYSDATE) <= NUMDIASANTECEDENCIA) AND 
		                               (CONTAPERSISTENTE = 1) AND (ROWNUM < NUM_ROWS+1))
 LOOP
     VDATAVENCIMENTO := TO_DATE(DIAVENCIMENTO||'/'||VPROXIMOMES);
  VNUMDOC         := (SELECT (MAX(NUMDOC) + 1) FROM TBCONTASPAGAR WHERE CODPLANOCONTAPAGAR = R.CODPLANOCONTAPAGAR);
     INSERT INTO TBCONTASPAGAR (CODPLANOCONTAPAGAR, DATAVENCIMENTO, DATALANCAMENTO, DATAEMISSAO, 
                             VALOR, NUMDOC, DESCRICAO) VALUES 
							(R.CODPLANOCONTAPAGAR, VDATAVENCIMENTO, R.DATALANCAMENTO, SYSDATE, R.VALORCONTAPERSISTENTE, VNUMDOC, R.DESCRICAO);
 END LOOP;
END PRC_LANCACONTASAUTOMATICAS;
/

 

Mas tá dando o seguinte erro ao tentar compilar;

PROCEDURE MHI_CONTROLEGERENCIAL.PRC_LANCACONTASAUTOMATICAS

On line: 16

PLS-00103: Encontrado o símbolo "SELECT" quando um dos seguintes símbolos era esperado:

 

( - + case mod new not null others <um identificador>

<um identificador delimitado por aspas duplas>

<uma variável de ligação> avg count current exists max min

prior sql stddev sum variance execute forall merge time

timestamp interval date

<um literal de string com especificação de conjunto de caracteres>

<um número> <uma string SQL com aspas simples> pipe

<um literal de string alternativamente

 

Onde eu estou errando? Valeu galera, desde já qualquer ajuda será bemvinda,

[]'s.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, alterei algumas coisas aqui e tá compilando normal agora sem erros, mas o procedure não grava na outra tabela o que eu preciso gravar. O engraçado é que eu executo o select lá de cima que tá no loop e ele retorna certinho o que eu preciso. O que tá faltando pra executar o loop lá em baixo e gravar na outra tabela?

 

CREATE OR REPLACE PROCEDURE PRC_LANCACONTASAUTOMATICAS IS
 VPROXIMOMES     CHAR(7);
 VDATAVENCIMENTO DATE;
 VNUMDOC         INTEGER;
BEGIN
 SELECT TO_CHAR(ADD_MONTHS(SYSDATE, 1), 'MM/YYYY') INTO VPROXIMOMES FROM DUAL;

 FOR R IN (SELECT CODPLANOCONTAPAGAR, DESCRICAO, CONTAPERSISTENTE, DIAVENCIMENTO, DATALANCAMENTO, 
                  NUMDIASANTECEDENCIA, STATUS, VALORCONTAPERSISTENTE 
  FROM TBPLANOCONTASPAGAR WHERE ((TO_DATE(DIAVENCIMENTO||'/'||VPROXIMOMES) - SYSDATE) <= NUMDIASANTECEDENCIA) AND 
                                 (CONTAPERSISTENTE = 1) /* AND (ROWNUM < NUM_ROWS+1) */)
 LOOP
     VDATAVENCIMENTO := TO_DATE(R.DIAVENCIMENTO||'/'||VPROXIMOMES);	  
     --SELECT (MAX(NUMDOC) + 1) INTO VNUMDOC FROM TBCONTASPAGAR WHERE (CODPLANOCONTAPAGAR = R.CODPLANOCONTAPAGAR);
  VNUMDOC := 1;

     INSERT INTO TBCONTASPAGAR (CODPLANOCONTAPAGAR, DATAVENCIMENTO, DATALANCAMENTO, DATAEMISSAO, 
                             VALOR, NUMDOC, DESCRICAO) VALUES 
       (R.CODPLANOCONTAPAGAR, VDATAVENCIMENTO, R.DATALANCAMENTO, SYSDATE, R.VALORCONTAPERSISTENTE, VNUMDOC, R.DESCRICAO); 		
 END LOOP;
END PRC_LANCACONTASAUTOMATICAS;
/

 

Desde já agradeço a atenção de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O Select

 

SELECT CODPLANOCONTAPAGAR, DESCRICAO, CONTAPERSISTENTE, DIAVENCIMENTO, DATALANCAMENTO, 
                  NUMDIASANTECEDENCIA, STATUS, VALORCONTAPERSISTENTE 
  FROM TBPLANOCONTASPAGAR WHERE ((TO_DATE(DIAVENCIMENTO||'/'||VPROXIMOMES) - SYSDATE) <= NUMDIASANTECEDENCIA) AND 
                                 (CONTAPERSISTENTE = 1)

 

Retorna algo ?

 

Tente (TO_DATE(DIAVENCIMENTO||'/'||VPROXIMOMES,'DD/MM/YYYY')

 

Pois o formato da data pode interferir.

 

Obs : Tenha atenção a 5º Regra, eu tive de excluir um post seu.

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.