-1

次のような名前がいくつかあります。

john arnold 
edward albert 

そして、私はこのような名前辞書を持っています:

name 
---------------------------  
john   
arnold 
edward 

名前を部分に分割し、各部分を辞書と比較する関数を作成しました (つまり、edward が辞書と比較され、次に albert が辞書と比較されます)。

私の問題は、辞書に存在しないすべての名前の連結された文字列を返したいことです。たとえば、次のように名前が届いた場合です。

john albert adam gerard

次のように返されます。

adam gerard

名前を配列に入れて、次のように検索します。

select name into name_base from usr_pre_pub.nd where name=names(ix);

ただし、辞書に名前が見つからない場合、実行は停止し、配列内の次の名前の分析は続行されません。

john (found)  albert(found) adam (not found, exception no data found) gerard (not analysed)

関数の例外キャッチ部分を削除しました。

   exception     
   when no_data_found then
       return ix;
     when others then
     return 'others';
       -- consider logging the error and then re-raise
       raise;

しかし、それはただ停止し、値を返しません。

ここからどこへ行けばいいのかわからないので、これで私を助けてくれることを願っています。

4

1 に答える 1

2

ループ内で例外をキャッチしていないようです。配列内の各名前を反復処理するループがあると仮定すると、ループは次のようになります。

LOOP
   BEGIN
      SELECT name
        INTO name_base
        FROM usr_pre_pub.nd
       WHERE name = names (ix);
   EXCEPTION
      WHEN NO_DATA_FOUND
      THEN
         --store the name in variable/array for returning, as not found
      WHEN OTHERS
      THEN
         --do something else
   END;
END LOOP;
于 2013-06-19T01:33:10.543 に答える