dポイントプレゼントキャンペーン実施中!

32bit版で構築されているOracleDBを64bit版のOracleDBに移行しようとしているのですが、
下記の問題が生じています。


1)下記のストアド、曜日を取得する変数について、

SELECT TO_CHAR(TO_DATE('2012/02/01'),'Day')
INTO v_YOUBI
FROM DUAL;

32bit版では、6バイトの定義(v_YOUBI VARCHAR(6))でよかったのですが、
64bit版で、6バイトにすると、オーバーフローになってしまいます。
9バイトにしたところ、正常動作しました。

64bit版で、オーバーフローする理由をお教えください。

※32bit版、64bit版は共にSHIFT-JISにしております。


2)Date型のテーブル項目にChar型の日付を挿入しようとするとエラーになります(32bit版では許容)。
64bit版では制限が厳しくなったのでしょうか?
32bit版、64bit版の違いをお教えください。

3)ほかに、32bit版から64bit版に移行することによる注意点をお教えください。

A 回答 (2件)

初期化パラメータファイルにnls_language=Japaneseを追加してもダメですか?


もしくは、環境変数NLS_LANG=Japanese_Japan.JA16SJISを設定してもダメですか?

9バイトで通るのは、おそらく日本語ではなく、英語の「Wedensday」(水曜日)が
返ってきているためでしょう。

まずは、設定変更をしてみて、SQL*Plusから

SELECT TO_CHAR(TO_DATE('2012/02/01'),'Day') FROM dual;

で期待した結果が返ってきていることを確認してみてください。

あと、これは32bit版、64bit版の問題ではないですね。
    • good
    • 1
この回答へのお礼

ご回答、ありがとうございます。

>初期化パラメータファイルにnls_language=Japaneseを追加してもダメですか?
>もしくは、環境変数NLS_LANG=Japanese_Japan.JA16SJISを設定してもダメですか?

初期化パラメータでは、「nls_language=Japanese」となっております。

環境変数NLS_LANG=Japanese_Japan.JA16SJISを設定後、

SELECT TO_CHAR(TO_DATE('2012/02/01'),'Day') FROM dual;を実行しましたが、
水曜日で返ってきます。

お礼日時:2012/02/10 20:15

お疲れ様です。


64bit版OracleのSQLPLUSで以下のSQLを実行して実際のキャラクターセットを見てみてください。
SELECT NLS_CHARSET_NAME(NLS_CHARSET_ID('CHAR_CS')),
NLS_CHARSET_NAME(NLS_CHARSET_ID('NCHAR_CS')) FROM DUAL;
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

NLS_CHARSET_NAME(NLS_CHARSET_ID('CHAR_CS')) NLS_CHARSET_NAME(NLS_CHARSET_ID('NCHAR_CS'))
-----------------------------------------------------------------------------
JA16SJSTILDE AL16UTF16


と表示されます。

お礼日時:2012/02/10 20:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す