- ベストアンサー
INSERT文の書式
oracleに触るの初めてなのにストアドなんて書くことに・・ 助けを頂けたらと思います。 ストアドの中でですが・・・・ INSERT文の中ではテーブルの項目が2つ以上あるとき、 変数にその2つ以上分の値を文字列として入れておいて 、その値をINSERT文に流すことってできないのでしょう か? test_str := (' ''テスト1'' , ''テスト2'' '); insert into TestTable (test1 , test2 ) values (test_str); 上記のように書くと PL/SQL: ORA-00947: 値の個数が不足しています。 とのエラーが帰ってきます。 上記のように変数を使って下記のように解釈させたいのですが無理なのでしょうか? insert into TestTable (test1 , test2 ) values ('テスト1','テスト2'); それではお願いします。 失礼いたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ストアドでなくVBあたりから文字列を渡すのであればできるでしょうが、PL/SQLでのプロシージャの記述は厳格に解析するので無理と思いますよ。1つの文字列はシングルクォーテーションでくくってもカンマを打っても1つの文字列と解析されます。第一そうでないと、カンマやシングルクォーテーションをデータとしてINSERTできません。 ところで、なぜ上記のような書き方をしたいのでしょうか。変数を増やしたくないからとか?2つの文字列を1つの文字列で処理しようとするのはけっこうイレギュラーな操作になります。 上記のような書き方はできませんが、なぜそうしたいと思ったのかを書いたら、誰かがそれ以外の何かしらの方法を教えてくれるかもしれません。(質問のタイトルを目にしてみんな見に来るので、別の質問として新たに投稿したほうがいいかもしれませんが)
その他の回答 (1)
- raphel_7
- ベストアンサー率34% (86/252)
test_str1 := ('テスト1'); test_str2 := ('テスト2'); insert into TestTable (test1 , test2 ) values (test_str1,test_str2); じゃだめなの? PL/SQL: ORA-00947: 値の個数が不足しています はインサートする列が2つあるのに値が1つしかないと言うことです。
お礼
すばやい解答ありがとうございます。 ダメ・・ということは無いです。 質問の内容のような書き方をできたらしたかったので・・ 質問したやり方ではできないということなので、この方法でやります。 ありがとうございました。
お礼
ありがとうございます。 できないということですね。理由がはっきりわかって納得です。 そのような書き方がしたい理由なのですが、、 もともと、一つにつながっている状態のデータを受け取るので、それを置換したら簡単にできるかな。と思っただけです。 困り度を3にしたのはこの件で先輩ができる!!というのにOracleの本をず~っと読んでもできなさそう。で言い争いになったので早く結論がほしかったのです。w ありがとうございました。