Oracle apex プロセスから更新クエリを使用してテーブルを更新しようとしています。そのためには、表形式から値を取得する必要がありました。しかし、そのフィールドは現在無効になっています (編集不可、値はまだ存在します)。ここで、「ORA-01403: データが見つかりません」というエラーが発生します。そのフィールドを有効にすると問題が発生します(ただし、フィールドは編集可能になりますが、そのフィールドを編集可能にしたくありません)。
そのデータ(無効のデータ)はすでにテーブルに保存されています(そのフィールドが無効になる前)。ここで、そのエラーを回避するための条件を記述しました (IF APEX_APPLICATION.G_F03(i) IS NOT NULL THEN など)。しかし、それでも同じエラーが発生します(上記)。
したがって、以下のコードに示すように、'coz of apex_application.g_f03(i) is disabled' というエラーが表示されますが、apex_application.g_f04(i) ではエラーが発生しません。apex_application.g_f03(i) フィールドを有効にすると、エラーはなくなります。
FOR i IN 1 ..apex_application.g_f01.count LOOP
if ((:P2_M1= 'f03') AND (apex_application.g_f03(i) IS NOT NULL)) then
------------------------------------------------------------------------------------
select count(*) into v_count from SCHEMA1.TABLE1
where ATTRIBUTE_CODE = apex_application.g_f02(i)
and header_id = :P2_X_HEADER_ID
and rating_001 is not null ;
------------------------------------------------------------------------------------
update SCHEMA1.TABLE1
set LAST_UPDATE_DATE = sysdate,
LAST_UPDATED_BY = :F2221_USER_ID,
RATING_001 = apex_application.g_f03(i),
STATUS = 'NEW'
where ATTRIBUTE_CODE = apex_application.g_f02(i)
and header_id = :P2_X_HEADER_ID;
--------------------------------------------------------------
END IF;
if ((:P2_M2 = 'f04') AND (apex_application.g_f04(i) IS NOT NULL)) then
------------------------------------------------------------------------------------
select count(*) into v_count from SCHEMA1.TABLE1
where ATTRIBUTE_CODE = apex_application.g_f02(i)
and header_id = :P2_X_HEADER_ID
and rating_002 is not null ;
------------------------------------------------------------------------------------
update SCHEMA1.TABLE1
set LAST_UPDATE_DATE= sysdate,
LAST_UPDATED_BY = :F2221_USER_ID,
RATING_002 = apex_application.g_f04(i),
STATUS = 'NEW'
where ATTRIBUTE_CODE = apex_application.g_f02(i)
and header_id = :P2_X_HEADER_ID;
------------------------------------------------------------------------------------
END IF;
end loop;
この apex_application.g_f03(i) フィールドの値を取得するか (無効になっていても)、バイパスすることを期待していました。