2012-05-14 17 views
6

Czy można modyfikować kilka tabel za pomocą funkcji merge w Oracle? W każdym przypadku różne operacje muszą być podjęte, jak:Scal: modyfikuj wiele tabel

MERGE INTO users tab1 
USING(SELECT 1 id, 10 points FROM dual) tab2 
ON(tab1.id = tab2.id) 
WHEN MATCHED THEN 
    UPDATE SET points = tab2.points 
    UPDATE "abc" = action.status -- another table 
WHEN NOT MATCHED THEN 
    INSERT(id, points) VALUES(tab2.id, tab2.points) 
    UPDATE "def" = action.status -- another table 

Odpowiedz

7

Zgodnie z dokumentacji, prosta odpowiedź brzmi: nie. The syntax obsługuje jedną tabelę lub widok. Jednak w przypadku aktualizowalnego widoku można wykonać wstawianie/aktualizowanie wielu tabel.

Twój przykład wydaje się jednak próbować zrobić coś innego, czego nie możesz zrobić. Klauzula WHEN MATCHED określa, co należy ZAKTUALIZOWAĆ. Nie możesz WSTAWIĆ z tej klauzuli. To samo dotyczy klauzuli WHEN NOT MATCHED - nie można UPDATE z tego zdania, tylko INSERT.

+0

"Jednak w przypadku aktualizowalnego widoku można wykonać wstawianie/aktualizowanie wielu tabel." Ledwie. Szukałem ([i pytałem] (http://stackoverflow.com/questions/37690394)) i wygląda na to, że nie jest obsługiwane. Typowy błąd to: 'ORA-38106: MERGE nie jest obsługiwane w widoku łączenia lub widoku z wyzwalaczem INSTEAD OF –