varios update una tablas tabla sentencia registros otra masivo inner ejemplo datos con actualizar oracle oracle11g

update - Consulta de actualización de Oracle para actualizar los registros en orden secuencial



update sql ejemplo dos tablas (2)

Podría usar una merge , pero necesitaría unirse a algo que no sea emp_id ya que desea actualizar esa columna. Si no hay otras columnas únicas, puede usar el rowid :

merge into employee target using (select rowid, row_number() over (order by emp_id) as emp_id from employee) source on (source.rowid = target.rowid) when matched then update set target.emp_id = source.emp_id;

Tengo una tabla en Oracle SQL cuyos identificadores están en aumento, orden secuencial, pero hay lagunas en los identificadores debido a la edición, por ejemplo, los identificadores son actualmente algo así como

22 23 24 32 33 44 ...etc

Compruebo una publicación y la solución provista fue la siguiente:

update (select t.*, row_number() over (order by id) as newid) toupdate set id = newid

Solución provista anteriormente.

Ahora mi consulta: 1) Supongo que falta la "cláusula From" en la consulta anterior.

Consulta actualizada:

update (select t.*, row_number() over (order by emp_id) as newid from employee t ) toupdate set emp_id = newid;

2) Cuando ejecuto la consulta anterior, me da el error "operación de manipulación de datos no legal en esta vista".

¿Alguien puede explicar cómo funcionaban las soluciones mencionadas aquí? ¿Alguien puede publicar la consulta de actualización completa? Gracias.


Esta solución a la misma pregunta a la que hace referencia muestra cómo hacerlo:

update employee set emp_id = ( with tab as ( select emp_id, rownum r from (select emp_id from employee order by emp_id) ) select r from tab where employee.emp_id = tab.emp_id );

Eso funciona. No puede actualizar una vista que contenga una función analítica como row_number. Consulte Oracle 12C docs , busque "Notas sobre las vistas actualizadas".