株式会社コーソル

KNOWLEDGE

コーソルの技術情報

コーソルでは経験豊かなエンジニアが、Oracle Databaseに関するお役立ち情報を発信しています。
データベースのチューニングや設定にお役立ていただけます。

KNOWLEDGE検索人気のキーワード

Oracle DB Tips

ORA-01846 : 指定した曜日が無効です。

01.ORA-01846エラーとはどのようなエラーか?

ORA-01846エラーは、曜日に指定した値が無効であるときに発生します。

02.ORA-01846エラーのエラー出力例

NLS_DATE_LANGUAGEの設定が “JAPANESE” の場合で、ORA-01846が発生した例を示します。

SQL> SELECT NEXT_DAY(SYSDATE, 'MONDAY') FROM DUAL;
SELECT NEXT_DAY(SYSDATE, 'MONDAY') FROM DUAL
*
行1でエラーが発生しました。:
ORA-01846: 指定した曜日が無効です。

03.ORA-01846の一般的な発生要因と対処

指定した曜日の値が NLS_LANGUAGE または NLS_DATE_LANGUAGE パラメータ で指定した言語の形式に従っていない時にORA-01846が発生します。
上記の例では、NLS_DATE_LANGUAGE に日本語が設定されている環境で英語の曜日を指定したためにORA-01846が発生しています。
このような場合、曜日を日本語で指定するか、NLS_DATE_LANGUAGE に”AMERICAN” を指定することでエラーの発生を回避できます。

曜日を日本語で指定する
SQL> SELECT NEXT_DAY(SYSDATE, '月曜') FROM DUAL;
NEXT_DAY(SYSDATE,'
-------------------
2012/03/19 23:00:00
NLS_DATE_LANGUAGE に”AMERICAN” を指定する
SQL> ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
セッションが変更されました。
SQL> SELECT NEXT_DAY(SYSDATE, 'MONDAY') FROM DUAL;
NEXT_DAY(SYSDATE,'M
-------------------
2012/03/19 23:00:00

04.ORA-01843に関するFAQ

曜日を数値で指定したのですが、意図した曜日を指定できません。なぜでしょうか?

NLS_TERRITORY で指定された値 によって週初めの曜日が異なるためです。(日曜日が週初めである場合や、月曜日が週初めである場合があります。)
なお、日本(NLS_TERRITORY = ‘JAPAN’)では週初めは日曜日となり、 1 は日曜日を、7 は土曜日を表します。

05.キーワード

ORA-01846 ORA-1846 NLS_DATE_LANGUAGE NLS_TERRITORY