0

私は以下のようなコードを持っています:

DECLARE
rec emp%ROWTYPE
BEGIN
<<start_again>>
FOR rec IN c1 LOOP
    SELECT emp_index
    INTO   flag
    FROM   m_sme006
    WHERE  emp_id = rec.emp_id
           AND eff_dt = rec.eff_dt
           AND end_dt = rec.end_dt
           AND last_maint_ts > rec.last_maint_ts;
END LOOP;
EXCEPTION
    WHEN no_data_found THEN
      GOTO start_again;
END; 

no_data_found 例外が発生するたびに、実行を元に戻して次の反復を続行したいと考えています。しかし、それはerror PLS-00375: illegal GOTO statement

また、この行dbms_output.Put_line('Outside exception block'rec.sme006_index);を例外ブロックに含めて、これがどこで発生したかを確認できますか?

前もって感謝します

4

2 に答える 2

1

プログラム フローを例外ブロックから実行ブロックに戻すことはできません。次のように、例外ブロックをループ内に配置する必要があります。

DECLARE
   rec emp%ROWTYPE
BEGIN
FOR rec IN c1 LOOP
    BEGIN
       SELECT emp_index
       INTO   flag
       FROM   m_sme006
       WHERE  emp_id = rec.emp_id
              AND eff_dt = rec.eff_dt
              AND end_dt = rec.end_dt
              AND last_maint_ts > rec.last_maint_ts;
    EXCEPTION
       WHEN no_data_found THEN
          dbms_output.Put_line('Outside exception block ' || rec.sme006_index);
    END;
END LOOP;
END;
于 2013-01-08T20:23:29.390 に答える
0

私はあなたがこのようなものを探していると信じています:

DECLARE
  rec emp%ROWTYPE
BEGIN
  FOR rec IN c1 LOOP
    BEGIN
        SELECT emp_index
        INTO   flag
        FROM   m_sme006
        WHERE  emp_id = rec.emp_id
           AND eff_dt = rec.eff_dt
           AND end_dt = rec.end_dt
           AND last_maint_ts > rec.last_maint_ts;
    EXCEPTION
        WHEN no_data_found THEN
          -- whatever code you want to log your error
    END;
  END LOOP;
END; 
于 2013-01-08T20:22:44.673 に答える