オラクル 11.2.0.3.0、APEX 4.1.1.00.23。
アプリケーションで数値FM999999999990.000
を形式で表示し、日付を英語形式で表示する必要がありますDD-MON-YYYY
。
アプリケーションの言語 (フランス語、スペイン語など) が変更される場合でも、数字 (グループの区切り記号にスペースやカンマは使用せず、小数点記号は-1254.010 ) と日付 (3英語の月名の最初の文字、つまり 12-FEB-2012 )。
使用しているグローバリゼーション属性は次のとおりです(アプリケーション ビルダー -> アプリケーション -> グローバリゼーション属性の編集)。
- アプリケーションの主要言語:フランス語 (フランス) (fr)
- アプリケーション言語の派生元:セッション
- 申請日の形式: DD-MON-YYYY
期待どおりに動作させることができません... との代わりにとの-1254,01
ような日付がまだ取得されます。APEXは、セッションを変更するための呼び出しを無視しているようです...12-FÉVR.-2012
-1254.010
12-FEB-2012
「初期化PL/SQLコード」属性(アプリケーション・ビルダー -> アプリケーション -> セキュリティ属性の編集)に次のコードを入力しようとしましたが、成功しませんでした:
BEGIN
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_NUMERIC_CHARACTERS= ''.,'' ';
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_LANGUAGE = ''AMERICAN'' ';
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_LANGUAGE = ''AMERICAN'' ';
END;
パラメータが変化しているかどうかを確認するために、次のクエリを含むレポートがあります。
SELECT
a1.parameter as "Parameter",
a1.value as "Database value",
a2.value as "Instance value",
a3.value as "Session value"
FROM
nls_database_parameters a1
LEFT JOIN nls_instance_parameters a2 ON a1.parameter = a2.parameter
LEFT JOIN nls_session_parameters a3 ON a1.parameter = a3.parameter
ORDER BY
a1.parameter asc;
結果:
ご覧のとおり、ALTER SESSION
呼び出しは何も変更しません...
「ヘッダーALTER SESSION
の前」アプリケーション プロセスで呼び出しを試行すると、セッションが変更されたように見えます (レポートは変更された値を表示します) が、レポートとアイテムの日付と数値の形式が正しくありません... 「形式マスク」を試しました。 「数値フィールド」アイテムの属性ですが、何も変わらないようです...
これを機能させる唯一の方法はALTER SESSION
、APEX から呼び出す各 PL/SQL 関数を呼び出すことです。レポートには、「数値/日付形式」列属性を使用できます。
質問:アプリケーション全体のセッションの数値と日付のパラメーターを変更する方法はありますか?
編集 :
各ページで次のヘッダー前プロセスを実行すると:
BEGIN
APEX_UTIL.SET_SESSION_LANG('fr');
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_NUMERIC_CHARACTERS= ''.,'' ';
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_LANGUAGE = ''AMERICAN'' ';
END;
レポートは、セッションが変更されたことを示しています。
次に、次の新しいテスト ページを作成しました。
- 上記のヘッダー処理前。
- NLS パラメータ値を表示するレポート。
- テーブルの 1 つからの日付と数値を示すレポート。
- 日付を取得するためのソース タイプが「SQL クエリ」のテキスト フィールド アイテム。
- 数値を取得するためのソース タイプが「SQL クエリ」の数値フィールド アイテム。
htp.prn()
テーブルから日付を取得する PL/SQL プロシージャを呼び出すアプリケーション プロセスを呼び出す JQuery にバインドされたボタンで、テキスト フィールド アイテムを入力します。- テーブル内の 2 つのフィールドの挿入 (アプリケーション プロセスなどを使用) を行う JQuery にバインドされたボタン。
ページが読み込まれると、レポートはセッションが正しく変更されたことを示し、アイテムとレポートで正しい数値と日付の形式を取得しました。「挿入」ボタンは問題なく挿入を行います。
「getDate」ボタンをクリックして ajax 呼び出しを使用してデータベースから日付を取得すると、フランス語の形式で日付が取得されます。そして、「挿入」ボタンが失敗します(invalid date
)。
JavaScript から値を取得する(パッケージ内の PL/SQL 関数を呼び出すオンデマンド アプリケーション プロセスへの ajax 呼び出しを行う)ことで問題が発生する理由について何か考えはありますか?
また、他の既存のページと同じように、同じヘッダー前プロセスを使用しても、レポートの形式が間違っているため、まだ奇妙です。同僚と一緒にこれをもっと調べなければなりません。おそらくどこかに「隠された」コードがあり、すべてが壊れています。
ページのデバッグ メッセージ データを確認しましたが、特に問題はありませんでした。