Autonomous Databaseのワークロード・タイプとして、Data WarehouseとTransaction Processingがあります。このワークロード・タイプで、初期化パラメータresult_cache_modeが異なります。ADWはforceになっており、その場合に少々コーディングで気を付けるべきことがありました。
2023年5月16日追記 ----
May 2023のアップデートで、ADBのRESULT_CACHE_MODEを変更できるようになりました。
What’s New for Oracle Autonomous Database on Shared Exadata InfrastructureRESULT_CACHE_MODE Parameter is Modifiable at Session and System Level
----
タイプがPL/SQL動的コンテンツのリージョンを作成し、以下のコードを記述します。
declare
l_app_user varchar2(80);
begin
select v('APP_USER') into l_app_user from dual;
htp.p('<p>v function: ' || l_app_user || '</p>');
select sys_context('APEX$SESSION','APP_USER') into l_app_user from dual;
htp.p('<p>sys_context: ' || l_app_user || '</p>');
l_app_user := v('APP_USER');
htp.p('<p>PL/SQL: ' || l_app_user || '</p>');
end;
最初にユーザーRESCACHE001でサインインし、このリージョンの表示を確認します。
サインアウトし、次にユーザーRESCACHE002にてサインインします。同じリージョンの表示が以下になります。
つまり、以下のSQLは結果キャッシュが働くため、以前の検索結果が返されることがあり得ます。
select v('APP_USER') into l_app_user from dual;Oracle APEXが提供するvファンクションだけではなく、ファンクション全般に言えることだと思いますが、v('APP_USER')の結果はOracle APEXアプリケーションにたいして影響が大きいので要注意です。
なお、result_cache_modeがmanualである、Autonomous Transaction Processingでは発生しない現象です。
完