मुझे लगता है कि आपको एक प्रक्रिया लिखनी होगी और कॉलम को एक-एक करके अपडेट करने का प्रयास करना होगा।
मान लें कि आपके पास इस तरह का अपडेट है:
UPDATE TABLE_1 a SET (COL_1, COL_2, COL_3) =
(SELECT COL_1, COL_2, COL_3 FROM TABLE_2 b WHERE a.COL_ID = b.COL_ID);
फिर आप इसके द्वारा सभी कॉलमों पर लूप कर सकते हैं:
DECLARE
CURSOR TabColumns IS
SELECT column_id, column_name, data_precision, data_scale
FROM USER_TAB_COLUMNS
WHERE table_name = 'TABLE_2'
AND column_name <> 'COL_ID'
ORDER BY 1;
BEGIN
FOR aCol IN TabColumns LOOP
BEGIN
sqlstr :=
'UPDATE TABLE_1 a SET '||aCol.column_name ||' = '
||' (SELECT '||aCol.column_name ||
||' FROM TABLE_2 b '
||' WHERE a.COL_ID = b.COL_ID)'
EXECUTE IMMEDIATE sqlstr USING CalcDate, CalcDate;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE ( 'Error at column '|| aCol.column_id||CHR(9)|| aCol.column_name||CHR(9)||SQLERRM);
DBMS_OUTPUT.PUT_LINE ( sqlstr );
END;
END LOOP;
END;
बहुत कुशल नहीं है आपको त्रुटि दिखाई देनी चाहिए।