- - PR -
select文でインサート処理
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2006-03-08 17:06
いつもお世話になっておりますm(_ _)m
今、SELECT文を使ってINSERTをかける処理改善を考えています。 テーブルT社員:(番号、名前、性別)T1社員、T2社員も同じフィールド INSERT T1社員 SELECT * FROM T社員 普通の形はこうです。 今自分が理想としていることはこんな感じです。 エラーはでますけど・・・^^; SELECT CASE WHEN T社員.性別 = '男' THEN (INSERT INTO T1社員 SELECT * FROM T社員 WHERE 性別 = '男') END, CASE WHEN T社員.性別 = '女' THEN (INSERT INTO T2社員 SELECT * FROM T社員 WHERE 性別 = '女') END FROM T社員 ここで、 社員_IN1、社員_IN2という関数をつくりインサートを心がけようとしましたがユーザー定義関数内ではINSERTを書くのはダメみたいなんです。 1つのSELECT文でINSERTを2回行うのは無謀でしょうか? 何か少し脳ミソが弱ってきてます。 できないとお言葉を頂けるだけでもいいのでアドバイスお願いします。 [ メッセージ編集済み 編集者: パンダおにぎり 編集日時 2006-03-08 17:10 ] [ メッセージ編集済み 編集者: パンダおにぎり 編集日時 2006-03-08 17:11 ] |
|
投稿日時: 2006-03-08 17:30
パンダおにぎりさん、こんにちは。
DBMSの種類・バージョンは何ですか? Oracle 9i以降でしたら、マルチテーブルインサートが使用できます。 ------------------------------------------ INSERT ALL WHEN T社員.性別 = '男' THEN INTO T1社員 WHEN T社員.性別 = '女' THEN INTO T2社員 SELECT * FROM T社員; ------------------------------------------ こんな感じになりますが、いかがでしょうか。 |
|
投稿日時: 2006-03-08 17:39
すいません!書き忘れてました。
MSSQL2000でございます。 Oracleっていいですよねー 便利な機能を指でくわえて見てるだけです^^ [ メッセージ編集済み 編集者: パンダおにぎり 編集日時 2006-03-08 17:42 ] |
|
投稿日時: 2006-03-08 17:51
一回でできないなら、二回に分ければ良いのでは?
分けて支障があるようなデータではない様に思えますが。 |
|
投稿日時: 2006-03-08 17:56
SQLServerでしたか・・・。
2回に分けてINSERTするしかないですかね。 |
|
投稿日時: 2006-03-08 17:58
2回に分けるのは最後の手段に使おうかと思ってます。
というのもここでは、 SELECT * FROM T社員 なのですが実際のSQLはリレーションをかけた重いSQL文になっております^^; この重いSQLをインサートする回数だけ書いていくとなると相当時間がかかるとにらんでます。 関数でINSERT文が使えないと知るまではテンション高かったんですけどね(笑) できなそうなので分ける方向でトライしてみます。 アドバイス有難う御座います。 [ メッセージ編集済み 編集者: パンダおにぎり 編集日時 2006-03-08 18:03 ] |
|
投稿日時: 2006-03-09 10:57
このような処理であれば、ストアドプロシージャを作るのが常套手段だと思います。
|
1
