- PR -

select文でインサート処理

1
投稿者投稿内容
くー
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 86
投稿日時: 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 ]
Penguin
会議室デビュー日: 2006/03/01
投稿数: 13
投稿日時: 2006-03-08 17:30
パンダおにぎりさん、こんにちは。

DBMSの種類・バージョンは何ですか?
Oracle 9i以降でしたら、マルチテーブルインサートが使用できます。

------------------------------------------
INSERT ALL
WHEN T社員.性別 = '男' THEN
INTO T1社員
WHEN T社員.性別 = '女' THEN
INTO T2社員
SELECT * FROM T社員;
------------------------------------------

こんな感じになりますが、いかがでしょうか。
くー
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 86
投稿日時: 2006-03-08 17:39
すいません!書き忘れてました。
MSSQL2000でございます。

Oracleっていいですよねー
便利な機能を指でくわえて見てるだけです^^

[ メッセージ編集済み 編集者: パンダおにぎり 編集日時 2006-03-08 17:42 ]
せん
ぬし
会議室デビュー日: 2002/03/04
投稿数: 397
投稿日時: 2006-03-08 17:51
一回でできないなら、二回に分ければ良いのでは?
分けて支障があるようなデータではない様に思えますが。
Penguin
会議室デビュー日: 2006/03/01
投稿数: 13
投稿日時: 2006-03-08 17:56
SQLServerでしたか・・・。
2回に分けてINSERTするしかないですかね。
くー
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 86
投稿日時: 2006-03-08 17:58
2回に分けるのは最後の手段に使おうかと思ってます。
というのもここでは、

SELECT * FROM T社員
なのですが実際のSQLはリレーションをかけた重いSQL文になっております^^;
この重いSQLをインサートする回数だけ書いていくとなると相当時間がかかるとにらんでます。

関数でINSERT文が使えないと知るまではテンション高かったんですけどね(笑)
できなそうなので分ける方向でトライしてみます。
アドバイス有難う御座います。

[ メッセージ編集済み 編集者: パンダおにぎり 編集日時 2006-03-08 18:03 ]
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-03-09 10:57
このような処理であれば、ストアドプロシージャを作るのが常套手段だと思います。
1

スキルアップ/キャリアアップ(JOB@IT)