【速報】RDS for Oracleが”令和”表示に対応しました!

元号が平成から令和に変わって半月以上経ちますが、皆さんもう慣れましたか?

米国時間2019年5月16日付で、AWSからAmazon RDS for Oracleの、2019年4月度のパッチセットアップデート(PSU)およびリリースアップデート(RU)が発表されました。

こちらのアップデートにて、新元号"令和"に対応したとの記載がありました。
(リンク先が日本語表示の場合は、リンク先ページ右上の言語設定を"English"に変更して確認ください)

いずれのバージョンも、Patch 28730253として、"SUPPORT NEW ERA REIWA FOR JAPANESE IMPERIAL CALENDAR"の記載があります。

動作確認

RDSインスタンス作成

RDS Oracleを起動直後に令和が扱えるようになっているかどうか、AWS東京リージョンで確認します。

主に以下の設定で、動作確認用データベースインスタンスを作成します。

  • 11g R2
    • エディション: Oracle Standard Edition One
    • ユースケース: 開発/テスト
    • ライセンスモデル: ライセンス込み
    • DBエンジンのバージョン: 11.2.0.4.v20
    • DBインスタンスのクラス: db.m4.large
    • DBインスタンス識別子: reiwa11g
    • データベースの名前: ORCL
    • ポート: 1521
    • 文字セット名: AL32UTF8
  • 12c R1
    • エディション: Oracle Standard Edition Two
    • ユースケース: 開発/テスト
    • ライセンスモデル: ライセンス込み
    • DBエンジンのバージョン: 12.1.0.2.v16
    • DBインスタンスのクラス: db.m4.large
    • DBインスタンス識別子: reiwa12cr1
    • データベースの名前: ORCL
    • ポート: 1521
    • 文字セット名: AL32UTF8
  • 12c R2
    • エディション: Oracle Standard Edition Two
    • ユースケース: 開発/テスト
    • ライセンスモデル: ライセンス込み
    • DBエンジンのバージョン: Version 12.2.0.1.ru-2019-04.rur-2019-04.r1
    • DBインスタンスのクラス: db.m4.large
    • DBインスタンス識別子: reiwa12cr2
    • データベースの名前: ORCL
    • ポート: 1521
    • 文字セット名: AL32UTF8

クライアント接続、動作確認

インスタンスが作成できたところで、クライアントからログオンして、和暦表示を確認します。
クライアントには、macOS版Oracle SQL Developer(バージョン19.1.0.094)を使用します。

それぞれのデータベースインスタンスへログオンし、sysdate関数を使った日付データ(ブログ執筆時は日本時間2019年5月17日)を和暦表示させるSQL文を実行します。

11g R2 (11.2.0.4.v20)

SELECT version FROM v$instance;

VERSION          
-----------------
11.2.0.4.0


SELECT TO_CHAR(sysdate, 'EEYY"年"MM"月"DD"日"', 'nls_calendar=''Japanese Imperial''')
    AS "EEYY年MM月DD日"
  FROM dual;

EEYY年MM月DD日                                  
---------------------------------------------
令和01年05月17日


SELECT TO_CHAR(sysdate, 'EYY/MM/DD', 'nls_calendar=''Japanese Imperial''')
    AS "EYY/MM/DD"
  FROM dual;

EYY/MM/DD             
----------------------
R01/05/17

12c R1 (12.1.0.2.v16)

SELECT version FROM v$instance;

VERSION          
-----------------
12.1.0.2.0


SELECT TO_CHAR(sysdate, 'EEYY"年"MM"月"DD"日"', 'nls_calendar=''Japanese Imperial''')
    AS "EEYY年MM月DD日"
  FROM dual;

EEYY年MM月DD日                                  
---------------------------------------------
令和01年05月17日


SELECT TO_CHAR(sysdate, 'EYY/MM/DD', 'nls_calendar=''Japanese Imperial''')
    AS "EYY/MM/DD"
  FROM dual;

EYY/MM/DD             
----------------------
R01/05/17

12c R2 (Version 12.2.0.1.ru-2019-04.rur-2019-04.r1)

SELECT version FROM v$instance;

VERSION          
-----------------
12.2.0.1.0


SELECT TO_CHAR(sysdate, 'EEYY"年"MM"月"DD"日"', 'nls_calendar=''Japanese Imperial''')
    AS "EEYY年MM月DD日"
  FROM dual;

EEYY年MM月DD日                                  
---------------------------------------------
令和01年05月17日


SELECT TO_CHAR(sysdate, 'EYY/MM/DD', 'nls_calendar=''Japanese Imperial''')
    AS "EYY/MM/DD"
  FROM dual;

EYY/MM/DD             
----------------------
R01/05/17

いずれも日付データを"令和"や"R"を含む和暦で表示させることができました。

ただし、ブログ執筆時点(日本時間2019年5月17日)では、どのバージョンも和暦を西暦に変換する時にORA-01864エラーが発生してしまいます。

SELECT TO_CHAR(TO_DATE('令和01年05月17日',
        'EEYY"年"MM"月"DD"日"',
        'nls_calendar=''Japanese Imperial'''),
        'YYYY/MM/DD')
    AS "YYYY/MM/DD"
  FROM dual;

次のコマンドの開始中にエラーが発生しました : 行 1 -
SELECT TO_CHAR(TO_DATE('令和01年05月17日',
        'EEYY"年"MM"月"DD"日"',
        'nls_calendar=''Japanese Imperial'''),
        'YYYY/MM/DD')
    AS "YYYY/MM/DD"
  FROM dual
エラー・レポート -
ORA-01864: 指定した日付は現行カレンダの有効範囲外です  


SELECT TO_CHAR(TO_DATE('R01/05/17',
        'EYY/MM/DD',
        'nls_calendar=''Japanese Imperial'''),
        'YYYY/MM/DD')
    AS "YYYY/MM/DD"
  FROM dual;
  
次のコマンドの開始中にエラーが発生しました : 行 1 -
SELECT TO_CHAR(TO_DATE('R01/05/17',
        'EYY/MM/DD',
        'nls_calendar=''Japanese Imperial'''),
        'YYYY/MM/DD')
    AS "YYYY/MM/DD"
  FROM dual
エラー・レポート -
ORA-01864: 指定した日付は現行カレンダの有効範囲外です  

現状あまり"令和"の文字列を含む日付データを西暦に変換する、などの和暦→西暦変換シチュエーションはないと思いますが、この点の対応は今後に期待したいと思います。

それでは、また。

ご参考

EC2インスタンス上にインストールしたOracle Databaseに対しては、以下サポートから提供されている情報を元に、パッチ適用などの手動操作が必要です。