W tabeli mam kolumnę A i B. Chcę zaktualizować A używając wartości B, a następnie zaktualizować B do nowej wartości. To musi być zrobione atomowo.Porządek oceny wyrażenia w klauzuli-aktualizacji-zestawu w bazie danych Oracle'a
próbuję coś jak to
-- Intially A = 1, B = 2
UPDATE T SET A = B, B = 10 WHERE ID = 1;
-- Now A = 2, B = 10
Choć pracuje, nie jestem w stanie znaleźć dokumentację, która gwarantuje mi, że A = B jest oceniany pierwszy i B = 10 jest oceniany później.
Spojrzałem przez oracle sql reference of the update statement
Jestem prawie pewien, że ta odpowiedź jest poprawna, chociaż chciałbym zobaczyć odniesienie w dokumentacji Oracle o tym (nawet jeden stwierdzający, że implementuje semantykę ANSI na 'update'). –
W tym dokumencie: http://docs.oracle.com/cd/E11882_01/server.112/e41084/ap_standard_sql003.htm#SQLRF55516 Oracle gwarantuje, że ich RDBMS zapewnia pełną zgodność z 'E121-06, pozycjonowanym oświadczeniem UPDATE' z Standard SQL 2008. – krokodilko