- - PR -
insertする際に検索結果を反映するのは可能でしょうか。
| 投稿者 | 投稿内容 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-04-11 11:10
お世話になります。
検索結果のinsert文 insert into tableA (columnA, columnB) select columnA, columnB from tableB where columnC = 'aa'; 上記の書き方だとよいのですが 引数の数が違う場合も検索結果を反映するのができるのでしょうか。 例えば、 insert into tableA (columnA, columnB, columnB) values(select_columnA, xxx, select_columnB) select select_columnA, select_columnB from tableB where columnC = 'aa'; よろしくお願いします。 | ||||||||||||
|
投稿日時: 2006-04-11 12:15
「引数」というのがよくわかりませんが、こういうことですか?
insert into tableA (columnA, columnB, columnC) select columnA, 'XXX', columnC from tableB where columnC = 'aa'; | ||||||||||||
|
投稿日時: 2006-04-11 12:52
質問が分かりにくくてごめんなさい。><
検索した結果をInsert文で使おうと思っております。 もちろん、一つのSQL文でです。 一般的に下記のは正しいSQL文ですよね。 insert into tableA (columnA, a, columnB) select a from tableB where columnC = 'aa'; 今回、私が作成したSQL文は tableBからaを取得してtableAの2番目のカラムに挿入したいです。 これって可能でしょうか。 変な質問で申し訳ありませんがよろしくお願いします。 [ メッセージ編集済み 編集者: MUSE 編集日時 2006-04-11 12:53 ] | ||||||||||||
|
投稿日時: 2006-04-11 12:57
できるかできないか、まずは自分で検証してみてください。
そして、その結果の状況を教えてください。 ついでに、実行環境も教えてください。 | ||||||||||||
|
投稿日時: 2006-04-11 12:58
TableBから取得した列aの値をtableAの2列目?にいれたいんでしょうか?
では残りのcolumnA,columnBには何を入れるのでしょうか? Insert into 表名(列名) values (値) ; と Insert into 表名 select 〜 がごっちゃ混ぜになっている気がします。 また、DBMSの種類によってはできるSQLも変わるので、 対象DBMSの名前とそのバージョンを提示したほうがいいかと思います。 | ||||||||||||
|
投稿日時: 2006-04-11 14:35
Oracleです。
バージョン10iです。 自分で検証ができなくて困ってます。 一応書いてみましたが SQL文ではできてもPL/SQLでできるかどうかデータがなくて試しができませんでした。 PROCEDURE add_AAA IS BEGIN INSERT INTO AAA( kaishacd, naibu_no, ap_zandk_kin, kbn, ichibu_kssai_fuka_flg, koushin_user, koushin_date) (SELECT pi_kaisha_cd, AL001.naibu_no, AL001.zan_kin, '3', AL001.ichibu_kssai_fuka_flg, pi_userid, pi_timestamp FROM BBB AL001 INNER JOIN CCC AL002 ON AL001.kaishacd = AL002.kaishacd AND AL001.sh_naibu_no = AL002.sh_naibu_no WHERE AL002.kaisha_cd = pi_kaisha_cd AND AL002.sh_no = pi_sh_no); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN po_res_cd := C_RES_CD_DUPLICATE_ERR; END add_AAA; よろしくお願いします。 | ||||||||||||
|
投稿日時: 2006-04-11 15:32
回答ではありませんが、そんなややこしいSQLを書くぐらいなら、明示的にゴリゴリ書いた方が,わかり易いようなPL/SQlが使えればなおさらという気がする。
メンテナンスがやりにくいんだな、今はいいかもしれないけどさ | ||||||||||||
|
投稿日時: 2006-04-11 16:31
細かい突っ込みでごめんなさい。 Oracle10gですか? それともOracle9iですか? #10iって聞いたことがないので、10gの誤りか9iの誤りかが気になっただけです。
MUSEさんがやりたいのは SQLで済ませるのではなく、 ストアドプロシージャをつくり そこでSELECTした結果を元にINSERTを行いたいのでしょうか?
データを作ればいいじゃないですか? って思うんですが。 データを入れることができない環境(本番機)などで いきなりプロシージャを突っ込むとは思えないし・・・。 どんな状況かわかりませんが、DBAに頼んででもテスト環境をもらって やってみたほうがいいかと思います。 未検証のものを入れることほど、怖いと思いますから。 で、プロシージャの中身を提示されても テーブル定義もわかりませんし、私は検証のしようもないです。 #提示されても、今は検証できる環境にもいないのですが(^^; プロシージャとしてではなく、PL/SQLブロックだけを抜き出し、 SELECTがうまくいくかをまず検証する。 その後にINSERTを追加して、意図したデータが登録されたかをチェックしたほうがいいかと思います。 | ||||||||||||
