【SQL】INSERTで「値の個数が多すぎます」の対処法


このページでは、ORACLEデータベースのSQLで、INSERT文を実行したときに「値の個数が多すぎます」というエラーが出る原因と対処方法を紹介しております。

INSERT文のサンプルは↓で多数紹介していますので参考にしてください。
>>【SQL】INSERT文の書き方:サンプル多数あり

「値の個数が多すぎます」の原因と対処法

INSERT文で「値の個数が多すぎます」というエラーが出る原因を解説します。

「値の個数が多すぎます」の原因は、INTOで設定した列の数やデータ型とVALUESに設定した列の数やデータ型と一致していないからです。

では次のようなテーブルに、実際にレコードをINSERTして検証していきます。

create table tab1(
    col1 varchar2(5)
    ,col2 varchar2(10)
    ,col3 date
    ,PRIMARY KEY(col1,col2)
);

INSERT文では、INTOの後ろに書いた列名とVALUESで指定した値の数とデータ型が一致している必要があります。

次のSQLはINSERTに成功します。
INTOの後ろに書いてある列名の数とデータ型に合わせて、VALUESに値が指定されているからです。

SQL> insert into tab1(col1,col2,col3) values('00001','0000000001',sysdate);

1行が作成されました。

次のSQLはINSERTに失敗します。
INTOの後ろの列名が2つに対して、VALUESの値が3つ指定されています。

VALUESに指定されている値の数が多いとき、「値の個数が多すぎます」というエラーが発生します。

SQL> insert into tab1(col1,col2) values('00001','0000000002',sysdate);
insert into tab1(col1,col2) values('00001','0000000002',sysdate)
            *
行1でエラーが発生しました。:
ORA-00913: 値の個数が多すぎます。

次のINSERTも失敗します。

TAB1テーブルにはそもそもCOL3までしか項目がありません。この状態でVALUESに4つ目の値を指定すると「値の個数が多すぎます」というエラーが発生します。

SQL> insert into tab1(col1,col2,col3) values('00001','0000000002',sysdate,'0');
insert into tab1(col1,col2,col3) values('00001','0000000002',sysdate,'0')
            *
行1でエラーが発生しました。:
ORA-00913: 値の個数が多すぎます。

次のINSERTも失敗します。
INSERT文では、INTOの後ろの列名を省略することが出来ます。

INTOの後ろの列名を省略していると一見分かりづらいですが、列名とVALUESの値の数やデータ型が一致していないとエラーになります。

SQL> insert into tab1 values('00001','0000000002',sysdate,'0');
insert into tab1 values('00001','0000000002',sysdate,'0')
            *
行1でエラーが発生しました。:
ORA-00913: 値の個数が多すぎます。

まとめ

INSERT文を実行したときに、INTOの後ろに指定した列名に対して、VALUESの値の数が少ないと「値の個数が不足しています」というエラー発生します。

VALUESの値の数の方が少ない場合には、「値の個数が不足しています」というエラーが発生します。

この他にも、INSERT文の様々な書き方を解説しております。
詳しくは「【SQL】INSERT文の書き方:サンプル多数あり」で解説しているのでぜひ参考にしてください。