El primer paso para diagnosticar un problema al crear una vista es probar el select
parte por sí solo. En este caso, aún obtendría el error ORA-00942, pero el problema ahora es solo un problema de consulta y acceso y no tiene que ver con la vista específicamente.
Cuando obtiene ORA-00942:la tabla o la vista no existe , es porque:
-
El nombre de la tabla o vista que escribió realmente no existe.
-
Revisa la ortografía, tal vez haya un error tipográfico.
-
¿Está conectado a una base de datos donde existe? Quizás esté en un sistema de prueba que no lo tiene.
-
Consulta
dba_objects
para ver si la tabla existe en otro esquema. (Si no tiene privilegios para consultar dba_objects,all_objects
enumera todo lo que tiene permiso para ver, lo que puede ser de ayuda).
-
-
Realmente existe, pero está en otro esquema.
En ese caso, hay dos posibles problemas:-
No tienes permiso para consultarlo. El propietario de la tabla debe
grant read on xyz
(sustituya el nombre real de la tabla porxyz
) a cualquiera-
tu
-
public
(si quieres que todos puedan ver los datos, no siempre recomendable) -
un rol que tiene (pero los roles no son utilizados por PL/SQL almacenado o vistas , sin embargo, por lo que es posible que pueda consultar una tabla en otro esquema gracias a un rol que tenga, pero aún no pueda crear una vista o un procedimiento que lo use).
-
-
Debe especificar el esquema. Digamos que desea consultar las
REGIONS
tabla enHR
pero estás conectado comoSCOTT
. Si simplementeselect * from regions
buscaráSCOTT.REGIONS
, que no existe. Para solucionarlo, realice una de las siguientes acciones:-
usa
hr.regions
explícitamente en su consulta. -
en su esquema,
create or replace synonym regions for hr.regions;
Ahora, siempre que se refiera aregions
, la base de datos redirigirá automáticamente ahr.regions
. -
en cualquier esquema con permiso para crear sinónimos públicos:
create or replace public synonym regions for hr.regions;
Ahora todos los que se conecten a la base de datos tendrán referencias aregions
redirigido ahr.regions
, que no siempre es una buena idea, pero es una opción de todos modos. -
alter session set current_schema = hr;
Ahora el esquema predeterminado para resolver nombres de objetos esHR
y no el que usted inició sesión. Para las aplicaciones que siempre inician sesión como un usuario diferente al propietario de las tablas, puede crear un después del activador de inicio de sesión así que esto siempre está configurado. Luego, solo pueden hacer referencia aregions
etc. sin necesidad de especificar ningún esquema y sin sinónimos.
-
-