![]()
SQLクリニック(11) Page
1/2IF文のネスト地獄から抜け出せるMERGE文
株式会社インサイトテクノロジー
林 優
2005/12/27
本連載はSQLの応用力を身に付けたいエンジニア向けに、さまざまなテクニックを紹介する。SQLの基本構文は平易なものだが、実務で活用するには教科書的な記述を理解するだけでは不十分だ。本連載は、著名なメールマガジン「おら! オラ! Oracle - どっぷり検証生活」を発行するインサイトテクノロジーのコンサルタントを執筆陣に迎え、SQLのセンス向上に役立つ大技小技を紹介していく。(編集局)
IF ... THEN
IF ... THEN
IF ... THEN
IF ... THEN
IF ... THEN
| 主な内容 --Page 1--
--Page 2--
|
というように、IF文がネストし過ぎていて「もし〜で、もし〜で、もし〜で、もし〜だったら、こうする」なんていう、メルヘンチックなプロシージャがたまにあります。ELSE文でも入ろうものなら、不思議な国に突入することもシバシバ……。
そんな条件分岐を少しでも減らせるかもしれない、Oracle9iから追加されたMERGE文をご紹介します。
まだアプリケーションで使用されている方にはあまりお目にかかれませんが、Oracle 10gのmmon(Memory Monitor)では、内部的にMERGE文を使用していたりします。
では、このMERGE文、一体どういうものなのか? を先に説明します。調べてみると……、
「1つ以上のソースから行を選択し、1つ以上の表に対して更新および挿入できます。対象となる表に対して更新と挿入のどちらを実行するかを決定する条件を指定できます」
と書いてあります(「Oracle Database SQL リファレンス 9i/10g」より抜粋)。
簡単にいうと、INSERT 〜 SELECTの際に「INSERT先のテーブルにINSERT/UPDATEすることができて、条件を指定できちゃうよ」っていう、気が利くDDL文です。
では、具体的にサンプルを用いて見ていきましょう。皆さまご存じのEMP表(いまさらですが……SCOTTスキーマは、SQL*Plusから「@?/rdbms/admin/utlsampl.sql」を実行して作成できます)を使用します。
EMP_UPDATE表をEMP表と同じように作成します。
SQL> create table emp_update as |
| リスト1 EMP表をコピーしてEMP_UPDATE表を作成 |
WHERE句の「1=0」という指定は、データまでEMP_UPDATE表に挿入する必要がないからです。枠だけコピーしたい場合は、意外と重宝します。
では、EMP表にあるMARTINさんのデータを見てみます。
SQL> select * from emp where ename = 'MARTIN'; |
| リスト2 MARTINのデータを確認 |
リスト2がMARTINさんのデータです。では、作成したEMP_UPDATE表にMARTINさんを以下のデータでINSERTします。
insert into emp_update values ( |
| リスト3 EMP_UPDATE表にMARTINのデータをINSERT |
ついでに、新入社員のHAYASHIさんもSALESMANとして登録しましょう。
insert into emp_update values ( |
| リスト4 EMP_UPDATE表にHAYASHIのデータをINSERT |
| 1/2 |
| Index | |
| 連載 SQLクリニック(11) IF文のネスト地獄から抜け出せるMERGE文 |
|
| Page 1 ・MERGE文の正体を知ろう ・MERGE文を使ったサンプルの準備 |
|
| Page 2 ・MERGE文を使ったサンプルの実行 ・データをそのまま使う |
|
| SQLクリニック |
TechTargetジャパン
- やはりSELECT文は永遠のテーマです (2012/2/7)
Database Expertフォーラムの2012年1月のアクセスランキングをお届けします。定番の記事を一気に追い抜いてあの記事が…… - SELECT文で取り出したデータを加工して表示する (2012/1/25)
SELECT文で取り出したデータを対象に四則演算する方法など、データを見やすくする方法を解説します - 2012年は私たちが勉強会を盛り上げる! (2012/1/23)
2011年12月、データベース業界初の女子会が発足しました。そこで、女子会を盛り上げていってくれそうな2人にお話を伺いました - 複数の条件を指定してSELECT文を実行する (2012/1/13)
複数の条件を指定してSELECT文を実行する方法と、条件指定に必要な論理演算子、比較演算子の役割を解説します
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -
