フリーランスエンジニアの岩井です。
今回、ORACLEのUPDATE文の特徴的な点を紹介します。
というのも、SQLで環境の差が一番出てくるのがUPDATE文。他のDBからSQLを持ってくるだけではうまく動作しないことが多いです。
UPDATE の FROM 句の書き方が違う
Oracleは JOIN なしで UPDATE する(サブクエリを使用)
Oracleでは、他のテーブルのデータを使って UPDATE する場合、JOIN を使わずにサブクエリを用いるのが基本です。
他の環境からSQLをそのまま持ってきても動かすことができません。
WITH 句の書き方が違う
一時的な表を使用する際によく使われるWITH句。
WITH TMP_TBLNAME AS (…)
SELECT …
上記の書き方、他のDBと違い、UPDATEの時は同様にWITH句が使えないです。
MERGE INTO を使った UPDATE(UPSERT)
Oracleは UPDATE + INSERT を MERGE INTO で実行
Oracleでは、UPDATE と INSERT の両方を MERGE INTO で実行できる(UPSERT)。
以上、細かい違いですが、どうみても動くはずなのに動かない場合、環境の違いという可能性があることを頭に入れておきましょう。