"Erro cursor" Comparação de registros

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
EvertonKopec
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 29
Registrado em: Ter, 29 Dez 2009 10:43 am
Localização: Curitiba
É isso aí...

Bom dia pessoal...
estou com um problema.

Criei está procedure agora, a principio ela era para fazer o seguinte:

Verificar se o valor atual do registro é maior que o valor de registro seguinte, se for vai somar os dois valores caso contrario o registro atual ira receber zero.

Mas está aparecendo um erro.

Selecionar tudo

Error(3,1): PLS-00103: Encountered the symbol "(" when expecting one of the following:     
begin function package pragma procedure subtype type use    
<an identifier> <a double-quoted delimited-identifier> cursor    
form current external language 

Selecionar tudo

create or replace
PROCEDURE STP_PARC_ABE IS
(
   @VLR_PRINC NUMBER (20,2),
   @CTR_LIB   NUMBER (20)
)
DECLARE 
  CURSOR C_PRINCIPAL 
      IS
        SELECT CONCAT(CONCAT(NM_CONTRAT,'/'),NM_LIBERAC) CTR_LIB,VLR_PRINC      
          FROM ZZ_PARCELA_ABERTA
        ORDER BY CTR_LIB,NM_PARCELA
        FOR UPDATE OF VLR_PRINC;

BEGIN 



OPEN C_PRINCIPAL;
LOOP
     
     FETCH C_PRINCIPAL INTO @VLR_PRINC,@CTR_LIB;
     EXIT WHEN C_PRINCIPAL%NOTFOUND;
 
      @VLR_PRINC = VLR_PRINCIPAL;
      @CTR_LIB = CTR_LIB;
 
    IF (@CTR_LIB = CTR_LIB) THEN
      IF (VLR_PRINC > @VLR_PRINC) THEN 
          @VLR_PRINC := @VLR_PRINC + VLR_PRINC;      
 
      ELSE
 
        IF (VLR_PRINC < @VLR_PRINC) THEN
          UPDATE ZZ_PARCELA_ABERTA
          SET @VLR_PRINC = 0;
 
      END IF;
    END IF;
 
      UPDATE ZZ_PARCELA_ABERTA
           SET VLR_PRINC = @VLR_PRINC;
 
    END LOOP;
 
CLOSE C_PRINCIPAL;
DEALLOCATE C_PRINCIPAL;
 
  COMMIT;

END STP_PARC_ABE;

O QUE SERIA ISTO?
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

É que a sintaxe ta errada mesmo:

Não sei por que tu usa o @, sei lá nunca usei.

Não precisa do declare.

E o is está após a declaração dos parâmetros

Selecionar tudo

PROCEDURE STP_PARC_ABE( VLR_PRINC NUMBER (20,2),
CTR_LIB NUMBER (20)
) IS
CURSOR ....
 
EvertonKopec
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 29
Registrado em: Ter, 29 Dez 2009 10:43 am
Localização: Curitiba
É isso aí...

@ QUER DIZER QUE É UMA VARIAVEL UTILIZADA NO CURSOR...
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Mesma coisa que aqui:
http://glufke.net/oracle/viewtopic.php? ... ight=nomes

Nome de variável não pode começar com arroba.

Seria algo assim (sem descrever precisão de number e varchar2 em parâmetros também):

Selecionar tudo

 	
create or replace
PROCEDURE STP_PARC_ABE IS
(
VLR_PRINC OUT NUMBER,
CTR_LIB OUT NUMBER
)
DECLARE
CURSOR C_PRINCIPAL
IS
SELECT CONCAT(CONCAT(NM_CONTRAT,'/'),NM_LIBERAC) CTR_LIB,VLR_PRINC
FROM ZZ_PARCELA_ABERTA
ORDER BY CTR_LIB,NM_PARCELA
FOR UPDATE OF VLR_PRINC;

BEGIN 
...
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Desculpa, mas não dá para editar a mensagem. Não tem DECLARE também em procedure.

Selecionar tudo

create or replace PROCEDURE STP_PARC_ABE IS
(
VLR_PRINC OUT NUMBER,
CTR_LIB OUT NUMBER
) AS
CURSOR C_PRINCIPAL IS
...
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Bah... tira o IS entre o nome da procedure e o parêntese também, por favor, estou cansado acho... :roll:
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Só uma dúvida, meus brothers, a procedure do enunciado era SQL Server, correto?
No que eu puder ajudar, estou de volta ao fórum.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Google Adsense [Bot] e 5 visitantes