🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

date

dateは、date型や日付に関する関数や処理についてのタグです

INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

3回答

13423閲覧

insert文で値の数は合っていますが「値の個数が不足しています」と出ます。

mokochan

総合スコア1

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

date

dateは、date型や日付に関する関数や処理についてのタグです

INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

0クリップ

投稿2021/03/10 08:01

編集2021/03/10 11:38

前提・実現したいこと

insert文でORA-00947: 値の個数が不足していますのエラーが起こっています。
値の1つに改行コード(CHR10)をいくつも使用する長めの値があり、途中まで作成しinsert文を実行したところ正常に実行されます。
そのため、値の個数は合っていると思います。
しかし、ある一定の長さまで入力するとエラーが起こってしまい、特定の文字がひっかかってエラーになっているわけではないようです。

値の数は合っていてこのエラーが起こるほかの原因がありましたら教えてほしいです!

また、作成しているinsert文で時刻を指定する値があるのですが、
TO_DATE('12:00:00','HH24:MI:SS')と日にちを省略して記載していることは関係あるでしょうか?
その月の1日が自動で設定されてはいます。

発生している問題・エラーメッセージ

ORA-00947: 値の個数が不足しています

該当のソースコード

insert into mail (number,title,message,date1,date2,term)
values (2,'新規登録完了のお知らせ',
'¥$0さん '|| chr(10) ||'新規登録が完了しました。¥'
|| chr(10) ||'ログインが可能になりましたのでご確認ください。¥'
|| chr(10) || chr(10) ||'※ご不明な点がございましたらコールセンターまでお問合せください。¥'
|| chr(10) ||'0120-1111-1111'|| chr(10) || chr(10) ||'',
TO_DATE('12:00:00','HH24:MI:SS'),TO_DATE('12:00:00','HH24:MI:SS'),'0');

※実際は同じような改行文を52回ほど入れていますが割愛しています。
$0には他テーブルを参照し名前が自動で入るような仕組みになっています

試したこと

ネットで調べ、全角スペースでもこのエラーが出るとあったので半角スペースにしてもエラーが出ます。

補足情報(FW/ツールのバージョンなど)

oracle database

使用テーブル情報
VARCHAR型:titleとterm
NUMBER型:number
DATE型:date1とdate2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

K_3578

2021/03/10 08:06

質問内容が不明瞭ですがDBMSはOracle Databaseでしょうか。
mokochan

2021/03/10 08:30

すみません、はい、そうです。
K_3578

2021/03/10 08:32

ならOracle Databaseタグあるのでそれも付けといてください。
mokochan

2021/03/10 08:36

つけました。 手入力で追加きると知らなかったです。ありがとうございます。
K_3578

2021/03/10 08:40

質問文自体の追記依頼ですが、この内容だと どういうINSERT文を実行したかも、どういうtableかもわからないので実行したINSERT文と テーブル定義追記してください。
mokochan

2021/03/10 09:53

追加しました。内容理解いただけるレベルになったでしょうか。
guest

回答3

0

値の数は合っていてこのエラーが起こるほかの原因がありましたら教えてほしいです!

それは思い込みです。出来上がったSQLでは実際に不足しているからのエラーです。

例えば、Nullと結合して文字列が消えてしまうことなどが考えられます。

SQL文を文字列に代入して、結果を文字列で見るような確認を取ると直ぐに見つかると思います。

投稿2021/03/10 11:14

sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mokochan

2021/03/10 11:27

改行48回まで入れた状態ですと結果は正常に動きます。 49回目からエラーになってしまいます。 その入れた49回目の行は正常に動く文を代わりに設定してもエラーとなったので文自体には問題がなさそうなんです。
sazi

2021/03/10 11:50 編集

>問題がなさそうなんです。 そう思い込むことで見落とししてしまうものなのです。 確実なのは、実際に組み立てられたSQLを確認する事です。 実際のエラーが出るSQL文そのものが提示されるなら別ですけど、そうでないので推測でしかお答えできません。
guest

0

ベストアンサー

ソース自体のコピーではないようなので違うかもしれませんが書かれているSQLが正しいとして、
各行末のシングルコーテーションがエスケープされているからではないでしょうか。
少なくとも '新規登録完了のお知らせ\' では列の境界になっていないので列数は一致していないと思います。

SQL

1insert into mail ( 2 number 3 ,title 4 ,message 5 ,date1 6 ,date2 7 ,term 8) 9values ( 10 2 11 ,'新規登録完了のお知らせ' 12 ,'¥$0さん '|| chr(10) ||'新規登録が完了しました。' 13 || chr(10) ||'ログインが可能になりましたのでご確認ください。' 14 || chr(10) || chr(10) ||'※ご不明な点がございましたらコールセンターまでお問合せください。' 15 || chr(10) ||'0120-1111-1111'|| chr(10) || chr(10) ||'' 16 ,TO_DATE('12:00:00','HH24:MI:SS') 17 ,TO_DATE('12:00:00','HH24:MI:SS') 18 ,'0' 19);

投稿2021/03/10 10:28

kaz.Suenaga

総合スコア2037

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mokochan

2021/03/10 11:18

回答ありがとうございます。 本当に申し訳ないのですが、おっしゃる通りコピーではなく手写しで記載したため誤記がありました。 実際にtitleの'新規登録完了のお知らせ'¥はつけておらずmessageの各行の末尾の\をつけていてエラーメッセージが出力されていました。 修正したinsert文を更新しました。
mokochan

2021/03/10 12:45

各行末の記載を教えて頂いた記載にして通りにし、実行したところ正常にDBに追加できました。 ありがとうございます!
guest

0

時分秒のシングルクォーティングが抜けています。

SQL

1TO_DATE(12:00:00,'HH24:MI:SS'),TO_DATE(12:00:00,'HH24:MI:SS') 23TO_DATE('12:00:00','HH24:MI:SS'),TO_DATE('12:00:00','HH24:MI:SS')

投稿2021/03/10 09:59

Orlofsky

総合スコア16417

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mokochan

2021/03/10 10:02

ありがとうございます。確認したところ、こちらの文では抜けていますが実際にはつけていました。 回答いただいたのにもかかわらず申し訳ありません。
Orlofsky

2021/03/10 10:08

質問を直しては? ここの掲示板ではMarkdownの使い方を覚えてください。 SQLなどのコードは https://teratail.com/help/question-tips#questionTips3-7 の [コード] に修正してください。 ここの掲示板では質問にSQLで使っているテーブルのCREATE TABLE文も載せるのは常識です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問