
■ UPDATE
前回(SQL(Oracle)のINSERT文でWITH句を使う!)、INSERT文でWITH句を使えたので、UPDATE文でも使えるのか試してみました。SQLリファレンスによると出来そうな感じなのですが、どうですかね?
環境については、前回のINSERT文の記事と同じです。
まず、普通のUPDATE文です。抽出条件にSELECT文を使用しています。
-- 普通のUPDATE
UPDATE TESTTBL
SET STR1 = '1',NUM1 = 1
WHERE
STR1 =
(
SELECT '1' AS STR1
FROM DUAL
)
■ UPDATEでWITH句
WITH句をねじ込んでみました。どうなるかと思ったのですが、これは問題なく動いてくれました。
-- UPDATEでWITH句
UPDATE TESTTBL
SET STR1 = '1',NUM1 = 1
WHERE
STR1 =
(
WITH A AS
(
SELECT '1' AS STR1
, 1 AS NUM1
FROM DUAL
)
SELECT STR1
FROM A
)
■ 後書き
興味があったので実験はしてみましたが、UPDATEの条件指定でWITH句を使うような複雑なSELECT文を書いたことが無いので、使うケースがあるのか微妙です。
何というか、これが発生するようなら設計レベルで間違えている気がします。
ただ、何でも出来るわけではなさそうで、更新値の設定にWITH句を使ってみたのですが・・・
-- UPDATEのSETにWITH句
UPDATE TESTTBL
SET
(STR1,NUM1)
=
(
WITH A AS
(
SELECT '1' AS STR1
, 1 AS NUM1
FROM DUAL
)
SELECT STR1
,NUM1
FROM A
)
WHERE STR1 = '1'
結果、ORA-01767(UPDATE ... SET 式は副問合せである必要があります) が返ってきました。
WITH句を使わずに副問い合わせに変えたら通るようになったので、ここでWITH句を使うのは無理そうです。
投稿記事の一覧:http://harikofu.web.fc2.com/
--- blog end ---
スポンサードリンク


