Oracle10g の不具合…?
Oracle10g で、良く解らない動作をしているので、残しておく。
「和暦 → 西暦」の変換するためのファンクションを、下記SQLを元に作成した。
SELECT TO_CHAR( TO_DATE( 'H230505', 'EYYMMDD', 'nls_calendar = ' 'Japanese Imperial''' ), 'YYYYMMDD' ) FROM DUAL
もちろん"H230505"の部分は引数だよね。
和暦部分(H230505)が正しい日付の場合は、問題無く変換できるのだが、
この部分が(H230558 や H05234a)等変換できない文字列の場合、例外が発生する。
おぉ、順調じゃんっ!
とか考えてテストを進めて居ると、問題が発生っ!
例外が発生した後に、
SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') FROM DUAL
数字が変になる…
例:2011年04月12日の場合
TO_CHAR( SYSDATE, 'YYYYMMDD' ) → 00230412
何だこりゃ…?デフォルトは西暦だよな…なぜ???
とか思い、良く見てみると、「23」和暦じゃんっ!!!
SYSDATEだけじゃなく、TO_DATEを使うなどしても"全て和暦表示"になってしまう。
セッションを閉じるまで永遠と……意味が解らん……
(セッションを切って繋ぎ直すと、デフォルト(西暦)に戻る)
これは、SQLを連続実行では発生しない。
あくまでも、西暦変換処理を PL/SQL(ファンクション) 化し、呼び出す事により発生するようだ。
実験結果:
和暦変換('H2305AA') → 和暦表示になる
和暦変換('H2305AA') → 和暦変換('H230505') → 西暦表示になる
1回でも正常形を通せば戻るようだ…
すごく謎なので、メモとして残しておく。
ハァ…どうしよう。

「和暦 → 西暦」の変換するためのファンクションを、下記SQLを元に作成した。
SELECT TO_CHAR( TO_DATE( 'H230505', 'EYYMMDD', 'nls_calendar = ' 'Japanese Imperial''' ), 'YYYYMMDD' ) FROM DUAL
もちろん"H230505"の部分は引数だよね。
和暦部分(H230505)が正しい日付の場合は、問題無く変換できるのだが、
この部分が(H230558 や H05234a)等変換できない文字列の場合、例外が発生する。
おぉ、順調じゃんっ!
とか考えてテストを進めて居ると、問題が発生っ!
例外が発生した後に、
SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') FROM DUAL
数字が変になる…
例:2011年04月12日の場合
TO_CHAR( SYSDATE, 'YYYYMMDD' ) → 00230412
何だこりゃ…?デフォルトは西暦だよな…なぜ???
とか思い、良く見てみると、「23」和暦じゃんっ!!!
SYSDATEだけじゃなく、TO_DATEを使うなどしても"全て和暦表示"になってしまう。
セッションを閉じるまで永遠と……意味が解らん……
(セッションを切って繋ぎ直すと、デフォルト(西暦)に戻る)
これは、SQLを連続実行では発生しない。
あくまでも、西暦変換処理を PL/SQL(ファンクション) 化し、呼び出す事により発生するようだ。
実験結果:
和暦変換('H2305AA') → 和暦表示になる
和暦変換('H2305AA') → 和暦変換('H230505') → 西暦表示になる
1回でも正常形を通せば戻るようだ…
すごく謎なので、メモとして残しておく。
ハァ…どうしよう。
コメント
コメントを投稿