代码之家  ›  专栏  ›  技术社区  ›  John Wick

例外是在错误的地方吗?放在哪里最好?

  •  1
  • John Wick  · 技术社区  · 7 年前

    create or replace Procedure EY IS
    CURSOR c1 is 
      select ey_id , cycle_id
      from mvs v
     cross join cycle s
     l_var c1%ROWTYPE;
       BEGIN
          OPEN c1;
       LOOP
          BEGIN
            FETCH c1 into l_var;
            EXIT when c1%NOTFOUND;
          insert into EY (EY_id, cycle_id, create_dt, create_user_id)
          values (l_var.ey_id, l_var.cycle_id, trunc(sysdate), '1');
            EXCEPTION
                WHEN DUP_VAL_ON_INDEX THEN
                DBMS_OUTPUT.PUT_LINE('duplicate value');  
      END LOOP;
        close c1;
    END EY;
    

    1 回复  |  直到 7 年前
        1
  •  2
  •   Littlefoot    7 年前

    LOOP BEGIN-EXCEPTION-END

    END BEGIN-EXCEPTION- 结束

    create or replace Procedure EY IS
      CURSOR c1 is 
        select ey_id , cycle_id
        from mvs v
        cross join cycle s
      l_var c1%ROWTYPE;
    BEGIN
      OPEN c1;
      LOOP
        BEGIN
          FETCH c1 into l_var;
          EXIT when c1%NOTFOUND;
          insert into EY (EY_id, cycle_id, create_dt, create_user_id)
            values (l_var.ey_id, l_var.cycle_id, trunc(sysdate), '1');
        EXCEPTION
          WHEN DUP_VAL_ON_INDEX THEN
          DBMS_OUTPUT.PUT_LINE('duplicate value');  
        end;                   --> you're missing this END
      END LOOP;
      close c1;
    END EY;
    

    如果您正确地缩进代码,就更容易发现罪魁祸首。