Oracle程序没有';t编译;给出一个“答案”;遇到符号;当期待时……”;错误
编译上述函数时,出现以下错误:Oracle程序没有';t编译;给出一个“答案”;遇到符号;当期待时……”;错误,oracle,procedure,Oracle,Procedure,编译上述函数时,出现以下错误: 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 WHE
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;
请帮我解决这个问题
Error(58,4): PLS-00103: Encountered the symbol ";" when expecting one of the following: loop
使用ELSIF
代替重复的IF
用法。它使代码可读性和生活更容易。
PS:未测试。该错误似乎并非来自该程序;所有的<代码>结束<代码>看起来正确,第58行在第二个<代码>的中间,如果节。您是否在脚本中创建了多个内容?(不过还有其他错误;您似乎将
vl*
变量(您从未设置过)与rs\u trans
列混合在一起。这似乎是一个风格问题,而不是与OP得到的错误有关。另外,为什么不使用案例
?
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;