ORA-01445: cannot select ROWID from a join view without a key-preserved table

Buenas Francisco, que bueno que haya gente que hable de oracle en español/castellano. Hay pocos… Al grano:

ORA-01445: cannot select ROWID from a join view without a key-preserved.
Un error que da por varias circustancias, algunas claramente justificadas y otras que se hacen difícil de entender.
Según lo que estuve viendo: una de las razones es que hay una limitación en la cantidad de joins que está en varias versiones (máximo aparentemente unos 20 o 22), otra es la cantidad de joins a través del mismo campo (máximo aparentemente 6). Y por supuesto el error tal cual la descripción.
El tema es que a mi me parece que me ocurre otra cosa.
Tengo dos servidores similares, misma versión de SO y de BBDD (Oracle 10.2) instalados se supone que de la misma manera con el mismo producto. Y en uno me funcionan consultas que en el otro no. La situación sule ser la siguiente:

Select a.campo, b.campo, X.campo from A
inner join B on a.campo1=b.cmapo1
inner join (select campo1, campo from H)  X on a.campo1=X.camapo1

Básicamente es así y en un equipo funciona y en el otro me da el error en cuestión. Tienes alguna idea por qué?… si logro sacar la subconsultafueralo soluciono pero realmente es un trabajo muy largo para pasar todo al nuevo equipo y que funcione, y también peligroso…

Te agradezco de antemano Francisco,

Fede

4 Responses to “ORA-01445: cannot select ROWID from a join view without a key-preserved table”

  1. admin says:

    Estimado Fede,

    1) Son las 2 versiones de Oracle en los 2 servidores exactamente las mismas? (10.2.X.X)
    2) Verifica que todos los objetos involucrados en las 2 Bd son exactamente iguales (mismos cambos, formatos, orden, PK, FK,indices,etc)

    Hay algunos bugs, conocidos como el 4369235, dale una mirada en Metalink a esta Nota 101349.1.

    Avisame cualquier cosa,

    Francisco Munoz Alvarez

  2. fede says:

    si, no fui muy preciso, perdón.
    no soy el administrador de las bbdd pero a través de $version es exactamente la misma versión en ambas:
    SELECT BANNER FROM SYS.V_$VERSION;

    Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - 64bi
    PL/SQL Release 10.2.0.2.0 - Production
    CORE 10.2.0.2.0 Production
    TNS for Solaris: Version 10.2.0.2.0 - Production
    NLSRTL Version 10.2.0.2.0 - Production

    Si, el tema es que no soy parte del equipo de Oracle, pero fui DBA de Oracle 7 y 8 hace mucho tiempo e estaba suscrito a la revista de oracle…. En fin, no tengo identificador de soporte para poder suscribirme a metalink pero por lo que pude ver y lo que comenté NO tengo instalado el - 10g Release 2 (10.2.0.4) Patch Set 3 -
    Pero lo que me llama la atención es que las versiones son exactamente iguales y en uno funciona y en otro no. Evidentemente hay algo configurado distinto, pero no tengo idea qué. Supongo que si pudiera visualizar las configuraciones de cada equipo quizás encuentre diferencias… voy a intentarlo a ver si tengo permisos…
    Muchas gracias

  3. admin says:

    Estimado Fede,

    Dale una mirada como dije en la structura de los objectos involucrados, posiblemente no tienen las mismas pk, indeces,etc.

    Avisame cualquier cosa.

    Muchos saludos,

    Francisco Munoz Alvarez

Leave a Reply