こんな発言がありました
UPDATE TABLE_A SET COL_A = COL_B, COL_B = 0
COL_A には COL_B の値が含まれている必要があり、COL_B は 0 である必要があるため、実行されるシーケンスに興味がありますが、どういうわけか現在両方のフィールドが 0 です。
SQL 更新は本質的にアトミックです。個々の列が更新される「順序」または「順序」の概念はありません。好きな順番で並べても構いません。
概念的には、行の「前」の状態を取得し、それを行の「後」の状態に変更すると考えることができます。したがって、COL_A は、更新前に COL_B にあった値で更新されます。
これにより、2 つの値を簡単に交換できます。
UPDATE test2 SET A=B, B=A;
CREATE TABLE test2(A NUMBER, B NUMBER);
INSERT INTO TEST2 VALUES(1,2);
UPDATE TEST2 SET A=B,B=0;
実行後 A=2,B=0