Обмен значения столбцов в Oracle

Я решал одну из головоломок и натыкался на обмен значениями столбцов с помощью запросов DML:

SELECT * FROM TEMP_TABLE;
ID1, ID2
--------
20, 15
20, 15
20, 15

Решение - математический расчет:

UPDATE TEMP_TABLE SET ID1=ID1+ID2;
UPDATE TEMP_TABLE SET ID2=ID1-ID2;
UPDATE TEMP_TABLE SET ID1=ID1-ID2;

Теперь я пытаюсь выяснить, может ли это применяться к строкам или нет, пожалуйста, предложите.

SELECT * FROM TEMP_TABLE_NEW;
ID1, ID2
--------
ABC, XYZ
ABC, XYZ
ABC, XYZ

Ответ 1

Нет необходимости иметь три оператора обновления, одного достаточно:

UPDATE temp_table_new 
SET    id1 = id2, 
       id2 = id1; 

Ответ 2

CREATE TABLE Names
(
F_NAME VARCHAR(22),
L_NAME VARCHAR(22)
);

INSERT INTO Names VALUES('Ashutosh', 'Singh'),('Anshuman','Singh'),('Manu', 'Singh');

UPDATE Names N1 , Names N2 SET N1.F_NAME = N2.L_NAME , N1.L_NAME = N2.F_NAME 
WHERE N1.F_NAME = N2.F_NAME;

SELECT * FROM Names;