プロが教えるわが家の防犯対策術!

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


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

A 回答 (2件)

ストアドでなくVBあたりから文字列を渡すのであればできるでしょうが、PL/SQLでのプロシージャの記述は厳格に解析するので無理と思いますよ。

1つの文字列はシングルクォーテーションでくくってもカンマを打っても1つの文字列と解析されます。第一そうでないと、カンマやシングルクォーテーションをデータとしてINSERTできません。

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

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

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

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

お礼日時:2005/08/10 11:30

test_str1 := ('テスト1');


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

じゃだめなの?

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

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

お礼日時:2005/08/10 11:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!