Saltar al contenido

ORA-30926: no se puede obtener un conjunto estable de filas en las tablas de origen

Bienvenido a nuestra página, ahora hallarás la respuesta a lo que buscabas.

Solución:

Esto suele deberse a duplicados en la consulta especificada en la cláusula USING. Esto probablemente significa que TABLE_A es una tabla principal y se devuelve el mismo ROWID varias veces.

Puede resolver el problema rápidamente usando DISTINCT en su consulta (de hecho, si ‘Y’ es un valor constante, ni siquiera necesita ponerlo en la consulta).

Suponiendo que su consulta sea correcta (no conozca sus tablas), podría hacer algo como esto:

  MERGE INTO table_1 a
      USING 
      (SELECT distinct ta.ROWID row_id
              FROM table_1 a ,table_2 b ,table_3 c
              WHERE a.mbr = c.mbr
              AND b.head = c.head
              AND b.type_of_action <> '6') src
              ON ( a.ROWID = src.row_id )
  WHEN MATCHED THEN UPDATE SET in_correct = 'Y';

Probablemente esté intentando actualizar la misma fila de la tabla de destino varias veces. Acabo de encontrar el mismo problema en una declaración de combinación que desarrollé. Asegúrese de que su actualización no toque el mismo registro más de una vez en la ejecución de la combinación.

¿Cómo solucionar los errores ORA-30926? (ID de documento 471956.1)

1) Identifique la declaración fallida

modificar los eventos del conjunto de sesión ‘30926 nivel de pila de errores de nombre de seguimiento 3’;

o

altere los eventos del conjunto del sistema ‘30926 seguimiento de errores de nombre’;

y busque archivos .trc en UDUMP cuando ocurra.

2) Una vez que haya encontrado la declaración SQL, verifique si es correcta (tal vez usando el plan de explicación o tkprof para verificar el plan de ejecución de la consulta) y analice o calcule estadísticas en las tablas en cuestión si esto no se ha hecho recientemente. La reconstrucción (o eliminación/recreación) de índices también puede ayudar.

3.1) ¿La instrucción SQL es una MERGE? evalúe los datos devueltos por la cláusula USING para asegurarse de que no haya valores duplicados en la combinación. Modifique la instrucción merge para incluir una cláusula where determinista

3.2) ¿Es esta una declaración de ACTUALIZACIÓN a través de una vista? Si es así, intente completar el resultado de la vista en una tabla e intente actualizar la tabla directamente.

3.3) ¿Hay un disparador sobre la mesa? Prueba a desactivarlo para ver si sigue fallando.

3.4) ¿La declaración contiene una vista no fusionable en una ‘IN-Subquery’? Esto puede dar como resultado que se devuelvan filas duplicadas si la consulta tiene una cláusula “PARA ACTUALIZAR”. Ver error 2681037

3.5) ¿La tabla tiene columnas sin usar? Dejarlos puede evitar el error.

4) Si modificar el SQL no soluciona el error, el problema puede estar relacionado con la tabla, especialmente si hay filas encadenadas. 4.1) Ejecute la declaración ‘ANALYZE TABLE VALIDATE STRUCTURE CASCADE’ en todas las tablas utilizadas en el SQL para ver si hay corrupción en la tabla o sus índices. 4.2) Verifique y elimine cualquier FILA ENCADENADA o migrada en la tabla. Hay formas de minimizar esto, como la configuración correcta de PCTFREE. Use la Nota 122020.1 – Encadenamiento de filas y migración 4.3) Si la tabla también está organizada por índice, consulte: Nota 102932.1 – Supervisión de filas encadenadas en IOT

Tienes la opción de auxiliar nuestra ocupación fijando un comentario o valorándolo te estamos eternamente agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *