
■ INSERT〜SELECT
Oracleでデータを登録する時に、SELECT文の抽出結果を登録する方法を良く使うのですが、少し複雑なSQL文(具体的には、副問い合わせを多用するようなもの)を書こうとすると副問い合わせがネストして後で追いにくくなります。
以前からWITH句を使えたらなぁって思っていたのですが、使い方が間違っていただけで普通に使えることに気が付きました。
テーブル「TESTTBL」(文字項目「STR1」、数値項目「NUM1」)という架空のテーブルに抽出結果を登録します。
抽出元はDUAL表を使用しました。
まず、普通のINSERT文。
-- 普通のINSERT〜SELECT
INSERT INTO TESTTBL
(STR1,NUM1)
SELECT '1' AS STR1
, 1 AS NUM1
FROM DUAL
副問い合わせを使用。
-- 副問い合わせを使用したINSERT〜SELECT
INSERT INTO TESTTBL
(STR1,NUM1)
SELECT A.STR1
,A.NUM1
FROM
(
SELECT '1' AS STR1
, 1 AS NUM1
FROM DUAL
) A
■ INSERTでWITH句
そして、これが本題のWITH句を使用したINSERT文です。
-- WITH句を使用したINSERT〜SELECT
INSERT INTO TESTTBL
(STR1,NUM1)
WITH A AS
(
SELECT '1' AS STR1
, 1 AS NUM1
FROM DUAL
)
SELECT STR1
,NUM1
FROM A
・・・WITH句って文の先頭にあるべきって思い込んでいました。
■ 後書き
改めて、OracleのSQLリファレンスを読み返してみたのですが、INSERT文の肝心の部分って「subquery::=」となっていて、SELECTの構文を参照みたいになっていました。
んで、SELECT文の構文にはWITH句が記載されている訳でして。
ちなみに、手元にあったマニュアルがOracle9iという昔々のものだったのですが、その時代から既に使えたようです。
投稿記事の一覧:http://harikofu.web.fc2.com/
--- blog end ---
スポンサードリンク


