2017-02-05 14 views
0

ストアドプロシージャから数値のリストを返そうとしています。例外が発生すると、私のストアドプロシージャはforループで停止します。私は例外句を追加し、制御はループを継続するために例外句の中に入っていますが、まだ運はありません。Oracleストアドプロシージャで例外後にループを続行できません

例外が発生した場合にループを続行するにはどうすればよいですか?ありがとう。

 CREATE OR REPLACE PROCEDURE getNumber(l_list IN CUSTOMLIST, l_output OUT NUMLIST) 
    IS 
      n_num varchar2(5); 
    BEGIN 
      l_output := NUMLIST(); 

      FOR i IN l_list.FIRST .. l_list.LAST LOOP 
          l_output.EXTEND(l_list.LAST); 
         BEGIN  
         SELECT NUM into n_num 
          FROM sometable WHERE some condition; 

          l_output(i) := n_num; 
          EXCEPTION 
          WHEN NO_DATA_FOUND THEN 
          DBMS_OUTPUT.PUT_LINE('TRUE'); 
          CONTINUE; 
         END; 
      END LOOP; 
END; 
+0

l_listを確認してみてください.1つの値しかないかもしれません。 –

+0

には3つのアイテムがあります。最初と3回目は真、2回目は偽です。 – user2836364

答えて

0

私はSQL Developerを再起動したときに働いている私は疑問に投稿されたコードを追加してみ 。 EXCEPTION句をコピーしてコピーすると、SQL開発者レベルで何か問題がありました。しかし、EXCEPTION句を入力するとno_data_foundオプションが表示され始め、選択したものが有効になりました。

0

他の例外も処理する必要があります。

WHEN OTHERS THEN 
     [statements] 
+0

申し訳ありませんが、私のコントロールは例外ブロック内にあると言いましたが、Continueステートメントは次のループに移動していません。 – user2836364

+0

ループが終了したときにどのようなエラー情報が表示されるかを正確に示すことができれば、もっと役立つでしょう。上記を続行することはまったく必要ありません。例外を再発行せずに単に「true」と表示すると、デフォルトで続行されます。 –

+0

@StevenFeuerstein - データが見つかりませんでした。私は、2番目の項目がwhere句ごとにfalseである3つのリスト項目を渡しており、3番目の項目にループを継続して1番目と3番目の項目を返すことを期待していますが、最初の項目のみを取り出してループから抜け出しています。 – user2836364

関連する問題