ラベル Issue の投稿を表示しています。 すべての投稿を表示
ラベル Issue の投稿を表示しています。 すべての投稿を表示

2021年10月27日水曜日

モーダル・ダイアログのページを開くとデバッグが解除されることがある

 作業中に見つけた事象で、デバッグのログが出力されていないのではなく、処理が行われていないと思い込み時間を無駄に費やしたので記録しておきます。

以下ようなレポートのページがあります。これはサンプル・データセットのEMP/DEPTから生成されたアプリケーションです。

開発者ツール・バーデバッグをクリックして、デバッグ・ログを出力するようにします。APEXのアプリケーションをデバッグする通常の手順です。

デバッグ出力が有効な場合、開発者ツール・バーの表示はデバッグなしに変わります。デバッグなしをクリックすると、デバッグ出力が解除されます。

デバッグが有効な状態で、フォームを開きます。

フォームが開くと、デバッグ出力がなぜか解除されています。そのため、変更の適用をクリックして実行されるプロセスのデバッグ出力は行われません。

ダイアログが閉じるとレポートのページに戻りますが、レポートのページではデバッグは有効のままです。そのため、一時的にデバッグが解除されていることに気が付きにくいです。

ダイアログが開いた時点で、開発者ツール・バーのデバッグをクリックすることにより、ダイアログのデバッグを有効にすることができます。


何かの理由があって、このような仕様になっているのかもしれませんが、使いにくいです。さらに、apex.oracle.comに実装されている最新の21.2では、このようにモーダル・ダイアログが開いているときにデバッグを有効にしようとするとエラーが発生します。


エラー・メッセージは

Failed to construct 'URL': Invalid URL

です。こちらは製品の出荷までに直ってくれるように期待しています。

2021年1月23日土曜日

Autonomous DatabaseのSQL Developer Webにadmin以外のユーザーでサインインできない

 SQL Developer WebにユーザーADMIN以外でサインインする際に、パスワードは間違っていないはずなのに、"An invalid user name or password was supplied."と表示されてログインできません。

そんなときはURLを確認しましょう。

対処方法としては、/ords/admin/... となっているURLを /ords/sql-developer に変更してアクセスします。


URLに現れるユーザー名とUsernameに入力するユーザー名が一致していることを確認します。


本当にパスワードの入力が間違っていなければ、これで正常にサインインできるはずです。

2021年1月13日水曜日

ADWはresult_cache_modeがforceであることに注意

 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 Infrastructure
RESULT_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では発生しない現象です。