2012-06-26 1 views
-1
create or replace PROCEDURE ResumenActividadDiaria(Fecha DATE) AS 
    CURSOR cur_trans IS 
    SELECT t.idslot, t.tipotransaccion, t.transacciongeneral, t.valortransaccion, 
     s.fila, s.columna 
    FROM transaccion t, slot s 
    WHERE t.idslot = s.idslot AND 
      t.transacciongeneral in (1,3) AND 
      t.fechacreacion = Fecha 
    ORDER BY s.fila, s.columna, t.tipotransaccion, t.transacciongeneral;    

    rs_trans cur_trans%ROWTYPE;  

    vlIdSlot NUMBER(10); 
    vlTipoTransaccion NUMBER(1); 
    vlTransaccionGeneral NUMBER(1); 
    vlValorTransaccion NUMBER(10); 
    vlFila NUMBER(2); 
    vlColumna NUMBER(2);  
BEGIN 
    dbms_output.put_line('Fecha '); 
    dbms_output.put_line('       ------------------------------------------------------'); 
    OPEN cur_trans; 

    FETCH cur_trans INTO rs_trans; 
    WHILE cur_trans%found 
    LOOP 
    FETCH cur_trans INTO rs_trans; 
    dbms_output.put_line('Id   :' || rs_trans.vlIdSlot); 
    dbms_output.put_line('Fila  :' || rs_trans.vlFila); 
    dbms_output.put_line('Columna :' || rs_trans.vlColumna); 

    IF vlTransaccionGeneral = 1 THEN     
     IF vlTipoTransaccion = 1 THEN 
     dbms_output.put_line('Billetes I :' || rs_trans.vlValorTransaccion); 
     END IF; 

     IF vlTipoTransaccion = 2 THEN 
     dbms_output.put_line('Monedas I :' || rs_trans.vlValorTransaccion); 
     END IF; 

     IF vlTipoTransaccion = 3 THEN 
     dbms_output.put_line('Premios I :' || rs_trans.vlValorTransaccion); 
     END IF; 

     IF vlTipoTransaccion = 4 THEN 
     dbms_output.put_line('Creditos I :' || rs_trans.vlValorTransaccion); 
     END IF; 
    END IF; 

    IF vlTransaccionGeneral = 3 THEN     
     IF vlTipoTransaccion = 1 THEN 
     dbms_output.put_line('Billetes F :' || rs_trans.vlValorTransaccion); 
     END IF; 

     IF vlTipoTransaccion = 2 THEN 
     dbms_output.put_line('Monedas F :' || rs_trans.vlValorTransaccion); 
     END IF; 

     IF vlTipoTransaccion = 3 THEN 
     dbms_output.put_line('Premios F :' || rs_trans.vlValorTransaccion); 
     END IF; 

     IF vlTipoTransaccion = 4 THEN 
     dbms_output.put_line('Creditos F :' || rs_trans.vlValorTransaccion); 
     END IF; 
    END IF; 
    END LOOP; 

    CLOSE cur_trans; 
END; 

나는 다음과 같은 오류가 위의 함수를 컴파일에 :Oracle 프로 시저가 컴파일되지 않습니다. 에 "가 발생 기호를, 기대 때 ..."제공 오류

Error(58,4): PLS-00103: Encountered the symbol ";" when expecting one of the following:  loop 

이 문제를 해결하기 위해 도와주세요.

+0

그 오류는 그 절차에서 나온 것처럼 보이지 않습니다. 모든'end's는 올바르게 보이고, 58 행은 두번째'if' 섹션의 중간에 있습니다. 스크립트에서 하나 이상의 것을 만들고 있습니까? (다른 오류가 있지만, 당신은 결코'vl *'변수를 혼합하지 않을 것입니다 - 당신은 결코 설정하지 않았습니다 - 시작을 위해'rs_trans' 컬럼으로). –

답변

1
LOOP 
    FETCH cur_trans INTO rs_trans; 
    dbms_output.put_line('Id   :' || rs_trans.vlIdSlot); 
    dbms_output.put_line('Fila  :' || rs_trans.vlFila); 
    dbms_output.put_line('Columna :' || rs_trans.vlColumna); 
    IF vlTransaccionGeneral = 1 THEN     
     IF vlTipoTransaccion = 1 THEN 
      dbms_output.put_line('Billetes I :' || rs_trans.vlValorTransaccion); 
     ELSIF vlTipoTransaccion = 2 THEN 
      dbms_output.put_line('Monedas I :' || rs_trans.vlValorTransaccion); 
     ELSIF vlTipoTransaccion = 3 THEN 
      dbms_output.put_line('Premios I :' || rs_trans.vlValorTransaccion); 
     ELSIF vlTipoTransaccion = 4 THEN 
      dbms_output.put_line('Creditos I :' || rs_trans.vlValorTransaccion); 
     END IF; 
    ELSIF vlTransaccionGeneral = 3 THEN     
     IF vlTipoTransaccion = 1 THEN 
      dbms_output.put_line('Billetes F :' || rs_trans.vlValorTransaccion); 
     ELSIF vlTipoTransaccion = 2 THEN 
      dbms_output.put_line('Monedas F :' || rs_trans.vlValorTransaccion); 
     ELSIF vlTipoTransaccion = 3 THEN 
      dbms_output.put_line('Premios F :' || rs_trans.vlValorTransaccion); 
     ELSIF vlTipoTransaccion = 4 THEN 
      dbms_output.put_line('Creditos F :' || rs_trans.vlValorTransaccion); 
     END IF; 
    END IF; 
END LOOP; 

대신 반복 IF 사용의 ELSIF 사용. 코드를 읽고 읽을 수있게 해줍니다. 추 신 : 테스트하지 않았습니다.

+0

이것은 OP가받는 오류와 관련이없는 스타일의 문제인 것 같습니다. 또한 '사건'이 아닌가? –

관련 문제