Oracle19cの新元号「令和」対応

Published by

on

項目バージョン
OSWindows Server 2016/2019/2022/2025
Oracle19c

■oracle19cでは令和対応してない

令和という元号が決まったタイミングとoracle19cのリリースタイミングの関係と思いますが、oracle19cでは標準で「令和」元号に対応してませんでした。ここでは元号「令和」を扱えるようにするための設定手順を整理します。

■lxegenコマンドでNLS_CALENDARを令和対応する手順

「lxegen」というコマンドを用いて、NLS_CALENDARで「令和」を扱えるようにします。

  1. テキストファイル「lxecal.nlt」を準備する
  2. Oracle_Home配下の「nls」フォルダ内にlxecal.nltのファイルを配置する(内容は後述)
  3. 「lxegen」コマンドを実行し、「lxecalji.nlb」を生成する(この時、lxegenコマンドのパスが通っていることに注意する)
  4. Oracleサービスを再起動する
  5. 確認用のコマンドを実行して「令和」、「R」表記の確認する

(lxecal.nltの内容)

DEFINE calendar
calendar_name = "Japanese Imperial"
DEFINE calendar_era
era_full_name = CEE1CFC2 -- 令和(EUC hex)
era_abbr_name = 52 -- R
start_date = "MAY-01-2019 AD" -- 元年
-- end_date = "DEC-31-9999 AD"
ENDDEFINE calendar_era
ENDDEFINE calendar

■実行結果比較方法

以下のSQLを対応前後で実行することでどのように変わるか確認します。

SELECT
	to_char(date '2019-04-30','e.yy-mm-dd', 'NLS_CALENDAR=''JAPANESE IMPERIAL''') AS  "略表記平成",
	to_char(date '2019-04-30','eeyy"年"mm"月"dd"日"', 'NLS_CALENDAR=''JAPANESE IMPERIAL''') AS  "フル表記平成",
	SUBSTR(TO_CHAR(date '2019-04-30', 'EYYMM', 'nls_calendar = ''Japanese Imperial'''), 2, 4) AS "YYMM平成",
	to_char(date '2019-05-01','e.yy-mm-dd', 'NLS_CALENDAR=''JAPANESE IMPERIAL''') AS  "略表記令和",
	to_char(date '2019-05-01','eeyy"年"mm"月"dd"日"', 'NLS_CALENDAR=''JAPANESE IMPERIAL''') AS  "フル表記令和",
	SUBSTR(TO_CHAR(date '2019-05-01', 'EYYMM', 'nls_calendar = ''Japanese Imperial'''), 2, 4) AS "YYMM令和"
FROM
	dual;

■実行手順(キャプチャ)

最初に用意したSQLを実行して結果を確認します。略表記は「平成」を英語の頭文字で「H」、フル表記は「平成」と表示されることを確認します。2019/05/01から「令和」ですが、今回の対応実施前は平成31年5月1日として扱われて表示されることがわかります。

用意する「lxecal.nlt」ファイルです。文字コードはANSIで保存します。

今回確認した環境のORACLE_HOMEは「C:\oracle」でしたので「C:\oracle\nls」配下に「lxecal.nlt」を保存しました。

コマンドプロンプトより「lxegen」コマンドを実行します。特に出力はありませんが、先ほど「lxecal.nlt」を保存したフォルダに「lxecalji.nlb」ファイルが生成されていることを確認しておきます。

Oracleのサービスを再起動後、最初に流したSQLを再度実行します。2019/05/01が「令和01年05月01日」と表示されることを確認します。(英語略称は「R」です。)

コメントを残す