2012-05-14 17 views
6

¿Es posible modificar varias tablas utilizando la función merge en Oracle? En cada caso diferentes operaciones necesitan ser tomadas, como:Fusionar: modificar tablas múltiples

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 

Respuesta

7

Según la documentación, la respuesta simple es no. The syntax admite una tabla o vista. Sin embargo, con una vista actualizable, puede realizar una inserción/actualización de varias tablas.

Sin embargo, su ejemplo parece intentar hacer algo más que usted no puede hacer. La cláusula WHEN MATCHED especifica qué ACTUALIZAR. No puedes INSERTAR desde esta cláusula. Lo mismo para la cláusula WHEN NOT MATCHED: no puede ACTUALIZAR de esta cláusula, solo INSERT.

+0

"Sin embargo, con una vista actualizable, puede realizar una inserción/actualización de varias tablas". Apenas. Busqué ([y pregunté] (http://stackoverflow.com/questions/37690394)) y parece no ser compatible. Un error típico es: 'ORA-38106: MERGE no es compatible con la vista de unión o vista con el gatillo INSTEAD OF. –

Cuestiones relacionadas