2

MySQL から GROUP_CONCAT() をレプリケートする PL/SQL 関数があります。この関数は CURSOR を取り、VARCHAR2 を返します。ただし、アプリケーションには、連結された文字列のサイズが 4000 を超える十分なデータを持つオブジェクトがいくつかあります。この関数を (PL/SQL だけでなく) SELECT ステートメントで使用するため、Oracle が怒って ORA をスローします。 -06502.

そこで、代わりに CLOB を返すように関数を変更しました。これでエラーは解消されますが、JDBC を使用してデータを読み取ると、パフォーマンスが大幅に低下します。大量のデータを読み込んでおり、VARCHAR2 から CLOB に切り替えると、実行時間が 10 ~ 20 倍遅くなります。これをどうにかして最適化することを検討してきましたが、CLOB は関数から返され、テーブルにないため、読んだ内容のほとんどは当てはまりません。

これを改善する方法はありますか?これは実際のデータベースのパフォーマンスとはまったく関係がないことを強調したいと思います。4000 文字までの値の連結は非常に高速です。それ以上の値を必要とするオブジェクトはごくわずかで、最大の値は約 5000 文字です。通常、LOB は大きな生データ用に最適化されており、SELECT ステートメントに存在する列に対する Oracle のサイズ制限がなければ、これを行う必要はありません。

編集- CLOB は関数で作成されていることを繰り返したいと思います。データベース内の CLOB を読み取っていません。VARCHAR2 を連結し、結果を CLOB として返すだけです。

4

2 に答える 2