fc2ブログ

(元)社内SEの徒然なる日記

SQL(Oracle)のUPDATE文でWITH句を使う!

■ 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 ---

スポンサードリンク

PageTop

コメント


管理者にだけ表示を許可する
 

出来ました

WITH句のSQLを 
UPDATE SET
(...) = ( SELECT ... FROM ( WITH ... )) の様にネストすると、出来ると思います。

小林一人 | URL | 2021-01-15(Fri)17:22 [編集]