こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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');


それではお願いします。 失礼いたします。

投稿日時 - 2005-08-10 10:39:54

QNo.1571034

すぐに回答ほしいです

質問者が選んだベストアンサー

ストアドでなくVBあたりから文字列を渡すのであればできるでしょうが、PL/SQLでのプロシージャの記述は厳格に解析するので無理と思いますよ。1つの文字列はシングルクォーテーションでくくってもカンマを打っても1つの文字列と解析されます。第一そうでないと、カンマやシングルクォーテーションをデータとしてINSERTできません。

ところで、なぜ上記のような書き方をしたいのでしょうか。変数を増やしたくないからとか?2つの文字列を1つの文字列で処理しようとするのはけっこうイレギュラーな操作になります。
上記のような書き方はできませんが、なぜそうしたいと思ったのかを書いたら、誰かがそれ以外の何かしらの方法を教えてくれるかもしれません。(質問のタイトルを目にしてみんな見に来るので、別の質問として新たに投稿したほうがいいかもしれませんが)

投稿日時 - 2005-08-10 10:53:37

お礼

ありがとうございます。
できないということですね。理由がはっきりわかって納得です。

そのような書き方がしたい理由なのですが、、
もともと、一つにつながっている状態のデータを受け取るので、それを置換したら簡単にできるかな。と思っただけです。

困り度を3にしたのはこの件で先輩ができる!!というのにOracleの本をず~っと読んでもできなさそう。で言い争いになったので早く結論がほしかったのです。w
ありがとうございました。

投稿日時 - 2005-08-10 11:30:25

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

test_str1 := ('テスト1');
test_str2 := ('テスト2');
insert into TestTable (test1 , test2 ) values (test_str1,test_str2);

じゃだめなの?

PL/SQL: ORA-00947: 値の個数が不足しています
はインサートする列が2つあるのに値が1つしかないと言うことです。

投稿日時 - 2005-08-10 10:48:09

お礼

すばやい解答ありがとうございます。
ダメ・・ということは無いです。
質問の内容のような書き方をできたらしたかったので・・
質問したやり方ではできないということなので、この方法でやります。
ありがとうございました。

投稿日時 - 2005-08-10 11:33:42

あなたにオススメの質問