【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文の書き方:サンプル多数あり」で解説しているのでぜひ参考にしてください。