【OracleDB】平成以降の元号を複数利用できるようにする
スポンサーリンク
【はじめに】
ここでは、前回の続きとしてOracleDatabaseに平成以降の元号を"複数"利用できるようにします。
※ 本記事での環境は以下の通り
OS:CentOS 7
データベース:OracleDatabase 12c(12.2.0)Enterprise Edition(無償版)
検証日:2019/1/19
↓前回の記事はこちら↓
www.holiday-note.tech
【手順】
手順1 複数の新元号を定義する定義ファイル作成・適用する。
① 以下コマンドを実行し、$ORACLE_HOME/nls配下に「lxecal.nlt」ファイルを作成する。
touch $ORACLE_HOME/nls/lxecal.nlt
② 手順1-①で作成した「lxecal.nlt」ファイルに以下を記述する。
※ 前回追加した「改元(K)」に加え、「新元(N)」を追加する。
値の設定方法などは前回の記事を参照。
↓前回の記事はこちら↓
www.holiday-note.tech
DEFINE calendar calendar_name = "Japanese Imperial" DEFINE calendar_era era_full_name = "b2feb8b5" era_abbr_name = "4b" start_date = "JAN-10-2019 AD" end_date = "JAN-09-2020 AD" ENDDEFINE calendar_era ENDDEFINE calendar DEFINE calendar calendar_name = "Japanese Imperial" DEFINE calendar_era era_full_name = "bfb7b8b5" era_abbr_name = "4e" start_date = "JAN-10-2020 AD" end_date = "DEC-31-2200 AD" ENDDEFINE calendar_era ENDDEFINE calendar
③ 以下コマンドを実行し、データベースをシャットダウンする。
sqlplus / as sysdba
shutdown immediate;
④ 以下ファイルを実行し、「lxecal.nlt」をコンパイルする。
※ Windows環境では同じ格納先に「lxegen.exe」があるため、これを実行する。
$ORACLE_HOME/bin/lxegen
→ コマンドが正常終了すると、$ORACLE_HOME/nls配下に「lxecalji.nlb」というファイルが作成されている。
⑤ 以下コマンドを実行し、データベースをマウント・オープンする。
sqlplus / as sysdba
startup;
⑥ 以下コマンドの「sysdate」を適宜増減させ、新元号が適用されたか確認する。
select to_char(sysdate-10, 'EEYY"年"MM"月"DD"日"', 'NLS_CALENDAR = ''Japanese Imperial''') as 和暦日付 from dual;
結果:
和暦日付 -------------------------- 平成31年01月09日
select to_char(sysdate-9, 'EEYY"年"MM"月"DD"日"', 'NLS_CALENDAR = ''Japanese Imperial''') as 和暦日付 from dual;
結果:
和暦日付 -------------------------- 改元01年01月10日
select to_char(sysdate+355, 'EEYY"年"MM"月"DD"日"', 'NLS_CALENDAR = ''Japanese Imperial''') as 和暦日付 from dual;
結果:
和暦日付 -------------------------- 改元02年01月09日
select to_char(sysdate+356, 'EEYY"年"MM"月"DD"日"', 'NLS_CALENDAR = ''Japanese Imperial''') as 和暦日付 from dual;
結果:
和暦日付 -------------------------- 新元01年01月10日
【おまけ】
おまけ① 追加した元号を利用しない(元の平成までしか利用できない)ようにするには
手順1-④で作成される「lxecalji.nlb」を削除($ORACLE_HOME/nls配下にない状態)すれば
元に戻ります。
shutdown等も不要でしたが、再起動した方がよさそうです。
(適用するときもわざわざ再起動する必要はないかも?)
-- 以上 --
参考ページ
Oracle 製品における改元の影響について | NTTデータ先端技術株式会社
Oracle Database に 新しい元号(年号)「野球」を追加してみる。(NLSカレンダ・ユーティリティlxegen) - Qiita
Oracle Database の DUMP関数 と CONVERT関数 で 文字列のバイトコードを調べる。 - Qiita