3

こんな発言がありました

UPDATE TABLE_A SET COL_A = COL_B, COL_B = 0

COL_A には COL_B の値が含まれている必要があり、COL_B は 0 である必要があるため、実行されるシーケンスに興味がありますが、どういうわけか現在両方のフィールドが 0 です。

4

2 に答える 2

8

SQL 更新は本質的にアトミックです。個々の列が更新される「順序」または「順序」の概念はありません。好きな順番で並べても構いません。

概念的には、行の「前」の状態を取得し、それを行の「後」の状態に変更すると考えることができます。したがって、COL_A は、更新前に COL_B にあった値で更新されます。

これにより、2 つの値を簡単に交換できます。

UPDATE test2 SET A=B, B=A;
于 2013-09-27T05:25:48.660 に答える
1
CREATE TABLE test2(A NUMBER, B NUMBER);

INSERT INTO TEST2 VALUES(1,2);

UPDATE TEST2 SET A=B,B=0;

実行後 A=2,B=0

于 2013-09-27T03:15:33.697 に答える