如何在Oracle存储过程中调试这些错误?

时间:2018-06-10 21:08:36

标签: sql oracle plsql

我正在做一个存储过程并且它给了我以下错误,我不明白我如何解决它们

CREATE SEQUENCE SEQ_ERROR;
/

CREATE SEQUENCE SEQ_VENTA_MEN;    
/

CREATE OR REPLACE PROCEDURE sp_ventas
--(P_FECHA DATE , P_CONTADOR NUMBER , P_TOTAL NUMBER)
IS
   CURSOR vent_cur
   IS
      SELECT * FROM vendedor;

   v_fecha         DATE := TO_CHAR (022018, 'MM/YYYY');

   v_contador      NUMBER := 0;

   v_total_men     NUMBER := 0;

   v_boleta        NUMBER (9);

   v_total         NUMBER (9);

   v_men_errores   VARCHAR2 (200);
BEGIN
   FOR reg_vent IN vent_cur
   LOOP
      SELECT v.id_vendedor,
             b.fecha_boleta,
             b.nro_boleta,
             v.sueldo_base
        INTO v_boleta, v_total
        FROM vendedor v JOIN boleta b ON (v.id_vendedor = b.id_vendedor)
       WHERE v.id_vendedor = reg_vent.id_vendedor;

      BEGIN
         INSERT INTO ventas_mensuales
              VALUES (seq_venta_men.NEXTVAL,
                      reg_vent.id_vendedor,
                      v_fecha,
                      v_boleta,
                      reg_vent.sueldo_base);
      EXCEPTION
         WHEN OTHERS
         THEN
            v_men_errores := slerrm;

            INSERT INTO reg_errores
                 VALUES (seq_error.NEXTVAL, 'SP_VENTAS', v_men_errores);
      END;
   END LOOP;
END;

错误:

Error(39,1): PL/SQL: SQL Statement ignored
Error(40,25): PL/SQL: ORA-00947: not enough values
Error(48,1): PL/SQL: SQL Statement ignored
Error(48,13): PL/SQL: ORA-00913: too many values
Error(55,1): PL/SQL: Statement ignored
Error(55,18): PLS-00201: identifier 'SLERRM' must be declared

1 个答案:

答案 0 :(得分:4)

  • 第一个错误:在SELECT列表中,有4个项目,而INTO有2个(应该是4个)
  • 第二次错误:表 VENTAS_MENSUALES 似乎少于5列
  • 第三次错误:不是 SLERRM ,而是 SQLERRM

此外,此作业V_FECHA DATE := TO_CHAR(022018 , 'MM/YYYY');存在问题,可能是:

V_FECHA VARCHAR2(7) := TO_CHAR(sysdate , 'MM/YYYY');

V_FECHA VARCHAR2(7) := '02/2018';