- TOP
- 技術情報
- Oracle DB Tips
- ORA-01846 : 指定した曜日が無効です。
KNOWLEDGE
コーソルの技術情報
KNOWLEDGE検索
コーソルでは経験豊かなエンジニアが、Oracle Databaseに関するお役立ち情報を発信しています。
データベースのチューニングや設定にお役立ていただけます。
コーソルの技術情報
KNOWLEDGE検索
コーソルでは経験豊かなエンジニアが、Oracle Databaseに関するお役立ち情報を発信しています。
データベースのチューニングや設定にお役立ていただけます。
Oracle DB Tips
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: 指定した曜日が無効です。
指定した曜日の値が 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
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
NLS_TERRITORY で指定された値 によって週初めの曜日が異なるためです。(日曜日が週初めである場合や、月曜日が週初めである場合があります。)
なお、日本(NLS_TERRITORY = ‘JAPAN’)では週初めは日曜日となり、 1 は日曜日を、7 は土曜日を表します。
ORA-01846 ORA-1846 NLS_DATE_LANGUAGE NLS_TERRITORY