データベース リンクを介してストアド プロシージャを呼び出そうとしています。コードは次のようになります。
declare
symbol_cursor package_name.record_cursor;
symbol_record package_name.record_name;
begin
symbol_cursor := package_name.function_name('argument');
loop
fetch symbol_cursor into symbol_record;
exit when symbol_cursor%notfound;
-- Do something with each record here, e.g.:
dbms_output.put_line( symbol_record.field_a );
end loop;
CLOSE symbol_cursor;
package_name が属する同じ DB インスタンスとスキーマからこれを実行すると、問題なく実行できます。ただし、データベース リンクを介してこれを実行すると (ストアド プロシージャ名などに必要な変更を加えて)、Oracle エラーが発生します: ORA-24338: ステートメント ハンドルが実行されませんでした。
dblink 上のこのコードの修正版は次のようになります。
declare
symbol_cursor package_name.record_cursor@db_link_name;
symbol_record package_name.record_name@db_link_name;
begin
symbol_cursor := package_name.function_name@db_link_name('argument');
loop
fetch symbol_cursor into symbol_record;
exit when symbol_cursor%notfound;
-- Do something with each record here, e.g.:
dbms_output.put_line( symbol_record.field_a );
end loop;
CLOSE symbol_cursor;