¿ACTUALIZAR y ELIMINAR en el mismo SQL en varias tablas?

Con Oracle DB, ¿es posible actualizar una tabla y eliminar (filas coincidentes) en otra?

Intenté varias forms de MERGE pero me sale:

ORA-01446: no puede seleccionar ROWID de, o muestra, una vista con DISTINCT, GROUP BY, etc.

(probablemente causado por UNION ALL en la vista)

o

ORA-38106: MERGE no es compatible con la vista de unión o vista con el activador INSTEAD OF.

Esto ("vista conjunta") sugiere que especificar dos tablas en cualquier forma es un no-go para MERGE . ¿Es eso correcto?

(las razones para usar una sola statement son: performance, consistencia y claridad)

Mi Oracle DB es de la versión 11.2.

El problema real es así:

Nosotros (una biblioteca) tenemos una tabla de libros (padre) y una tabla de contenido (infantil) (uno o cero por libro, tiene una FK a la table de libros ). Cada año ejecutamos un trabajo que para cada libro que es anterior a 10 años (simplifiquemos la condición ya que no es relevante para el problema aquí) configuramos una columna llamada RETIRED para valorar "SÍ" en la tabla de libros y eliminamos la fila (si está presente) en la tabla de contenido .

PD: las soluciones PL / SQL son bienvenidas. (mi código está en PL / SQL de todos modos)

Use una transacción con dos declaraciones:

  1. Actualice los books para retirarse;
  2. Eliminar el content de todos los libros retirados.

La solución PL / SQL podría ser:

 DECLARE TYPE id_list IS TABLE OF books.id%TYPE; retinetworking_list id_list; BEGIN UPDATE books SET retinetworking = 'YES' WHERE publish_date <= add_months(TRUNC(SYSDATE), -120) RETURNING id BULK COLLECT INTO retinetworking_list; FORALL id IN retinetworking_list.FIRST .. retinetworking_list.LAST DELETE content WHERE book_id = retinetworking_list(id); COMMIT; END; /