私の PL/SQL スキルは非常に限られているため、これが非常に簡単である場合は申し訳ありません。基本的に、クロブを反復処理するループがあります。clob の値が null の場合、ループは過去 (無限ループ) に問題を引き起こしました。このループのコードにいくつかのチェックを組み込もうとしましたが、無限ループを防ぐ試みは失敗しました。
コードの関連部分は次のとおりです。
v_offset NUMBER DEFAULT 1;
v_response CLOB;
SELECT VALUE
INTO v_response
FROM json_cache
WHERE json_key = 'EMPLOYEES';
--infinite loop occurs when v_response = ''
LOOP
EXIT WHEN v_offset > DBMS_LOB.getlength (v_response)
or DBMS_LOB.getlength (v_response) = 0
or v_offset = 400000;
HTP.prn (DBMS_LOB.SUBSTR (v_response, 20000, v_offset));
v_offset := v_offset + 20000;
END LOOP;
ステートメント内の追加の条件はEXIT WHEN
、無限ループの発生を防ぐべきではありませんか? v_response
が空のときにこのループを終了/防止するにはどうすればよいですか? このループを if ステートメントでラップすることは避けたいので、ループ内にガードを配置することをお勧めします。