参照カーソルを返す関数を呼び出しておりXMLType.createxml
、結果を XML に変換するために使用しています。
select XMLType.createxml(package_name.storedProcName('PARAM1', 'PARAM2', 'PARAM3')) as sresult from dual;
ただし、これには望ましくない副作用があることがわかりました。XMLType のデータを取得するために使用されるカーソルが閉じられていないようです。この手法を使用して関数を何度も呼び出した後、常に次のエラーが発生します。
ORA-01000: maximum open cursors exceeded
カーソルへのハンドルがないため、手動で閉じることができません。また、プールされた接続を使用しているため、これらのカーソルが自動的に解放される接続リセットはありません。これについて何ができるでしょうか?
これが私のOracleバージョンです(v $ versionから返されたもの):
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
PL/SQL Release 10.2.0.5.0 - Production
CORE 10.2.0.5.0 Production
TNS for HPUX: Version 10.2.0.5.0 - Production
NLSRTL Version 10.2.0.5.0 - Production
(興味のある方は、 XMLType に関する以前の質問へのリンクを参照してください。)