以下の WRT コードでは、SYS_REFCURSOR が 2 つのテーブルを結合し、基になる 2 つのテーブルの属性に対して呼び出されるいくつかの関数を選択する選択にあるため、fetch-into-variable の型を基になるテーブルの %ROWTYPE として宣言できません。つまり、L_RECORD T%ROWTYPE として宣言できません。
---
DECLARE
P_RS SYS_REFCURSOR;
L_RECORD P_RS%ROWTYPE;
BEGIN
CAPITALEXTRACT(
P_RS => P_RS
);
OPEN P_RS;
LOOP
BEGIN
FETCH P_RS INTO L_RECORD;
EXIT WHEN P_RS%NOTFOUND;
...
EXCEPTION
WHEN OTHERS THEN
...
END;
END LOOP;
CLOSE P_RS;
END;
--------
CREATE or REPLACE PROCEDURE CAPITALEXTRACT
(
p_rs OUT SYS_REFCURSOR
) AS
BEGIN
OPEN p_rs for
select t.*,tminusone.*, f(t.cash), g(t.cash) FROM T t, TMINUSONE tminusone
where t.ticket=tminusone.ticket;
END CAPITALEXTRACT;
もちろん、SYS_REFCURSOR で返された列を含む静的テーブル R を定義してから、L_RECORD R%ROWTYPE として宣言したくはありません。
したがって、質問: 弱く型付けされた SYS_REFCURSOR である変数の %ROWTYPE を宣言する方法は?