1. ホーム
  2. sql

[解決済み] ORA-01481:Oracleの挿入クエリで無効な数値形式モデル

2022-02-28 20:49:57

質問

以下のクエリで、次のようなエラーが発生します。

ORA-01481: invalid number format model
The user is attempting to either convert a number to a string via TO_CHAR or a string
to a number via TO_NUMBER and has supplied an invalid number format model parameter.

私はこのクエリをストアドプロシージャで使用しています。day_id カラムは数値データ型であり、このカラムに格納されている値は次のとおりです。 YYYYMMDD . month_id カラムも数値データ型で、このカラムに次のような値を格納したい。 YYYYMM

INSERT INTO TEST_CHECK(MONTH_ID) VALUES
 (to_char(REC.day_id, 'YYYYMM'));

解決方法は?

数値に日付のような変換を施し、その結果(文字列)を数値として使おうとしているのです。

SQL> create table TEST_CHECK(MONTH_ID number);

Table created.

SQL> INSERT INTO TEST_CHECK(MONTH_ID) VALUES(to_char(20180101, 'YYYYMM'));
INSERT INTO TEST_CHECK(MONTH_ID) VALUES(to_char(20180101, 'YYYYMM'))
                                                             *
ERROR at line 1:
ORA-01481: invalid number format model

のようなものが必要かもしれません。

SQL> INSERT INTO TEST_CHECK(MONTH_ID) VALUES(substr(to_char(20180101), 1, 6));

1 row created.

このような方法で日付や月を保存するのは良くないと覚えます。