JavaScript Object Notationの既知のバグ
Oracle Database 20cでのJavaScript Object Notation (JSON)バグについて説明します。
Bug 30896685
SQL関数JSON_VALUE
とJSON_TABLE
のRETURNING DATE
句は、Oracle Database 20cより前のリリースでは、時間コンポーネントがゼロにされた(切り捨てられた) DATE
値を返します。SQL/JSONパス言語の類似のDATE ()
項目メソッドも同じ動作をします。
回避策:
これはリリース20cでも、引き続きRETURNING DATE
句のデフォルトの動作になります。ただし、OracleのDATE
データ型との整合性を取るために、DATE
値の時間コンポーネントを保持する新しいオプション動作があります。この新しい動作は、今後のリリースでデフォルトになることが想定されています。
新しい動作は、RETURNING DATE PRESERVE TIME
句を使用するか、新しい項目メソッドdateWithTime ()
を使用することで、使用可能になりました。時間切捨てはリリース20cのデフォルトですが、RETURNING DATE TRUNCATE TIME
句を使用して明示的に指定することもできます。
デフォルト動作での予想される変更によりアプリケーションが受ける影響を最小限に抑えるために、少なくとも新しいコードでは、PRESERVE TIME
またはTRUNCATE TIME
句を適宜明示的に使用し、必要に応じて項目メソッドdateWithTime ()
を使用することをお薦めします。
ほとんどのユースケースで、PRESERVE TIME
句と項目メソッドdateWithTime ()
をお薦めします。ただし、TRUNCATE TIME
句を使用しても、リリース20cのデフォルトと同じ動作が保証されます。
索引を使用する場合は、問合せと索引の時間処理(切捨てまたは保持)が一致している必要があります。アプリケーションの時間処理の変更では、それに依存する永続オブジェクト(索引、マテリアライズド・ビュー、パーティション、チェック制約、PL/SQLサブプログラムなど)を再構築する必要があります。