JavaScript Object Notationの既知のバグ

Oracle Database 20cでのJavaScript Object Notation (JSON)バグについて説明します。

Bug 30896685

SQL関数JSON_VALUEJSON_TABLERETURNING 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サブプログラムなど)を再構築する必要があります。