ORA-00942: Можно выбрать из «schema.table», но не «table»? - PullRequest
4 голосов
/ 29 сентября 2011

Я обнаружил ORA-00942 («таблица или представление не существует») при выполнении

select * from brunch

Однако при выполнении * 1004 такой проблемы нет

select * from joe.brunch

Могу ли я знать, в чем здесь проблема?

Ответы [ 3 ]

9 голосов
/ 29 сентября 2011

Unqualified, BRUNCH относится к объекту, отличному от JOE.BRUNCH в текущем сеансе. У вас есть несколько вариантов, чтобы это исправить.

  1. Создать общедоступный синоним. Это позволит любому пользователю, имеющему права доступа к таблице JOE.BRUNCH, получить к ней доступ, запросив BRUNCH

    CREATE PUBLIC SYNONYM поздний завтрак ДЛЯ joe.brunch

  2. Создать личный синоним. Это позволит только текущему пользователю получить доступ к таблице JOE.BRUNCH, запросив BRUNCH

    CREATE SYNONYM поздний завтрак ДЛЯ joe.brunch

  3. Изменить текущую схему для текущего сеанса на JOE. Это приведет к тому, что все неквалифицированные ссылки в текущем сеансе будут преобразовываться в схему JOE, а не в схему текущего пользователя

    ALTER SESSION SET current_schema = JOE

3 голосов
/ 29 сентября 2011

Есть несколько возможных причин

1) существует более одного объекта (таблицы, представления, процедуры и т. Д.), Называемого поздним завтраком. Oracle не знает, на кого вы ссылаетесь.

2) наиболее вероятная причина: таблица существует в схеме joe, но вы подключаетесь как другой пользователь, которому не предоставлен выбор для объекта joe.brunch

Попробуйте

Предоставить выбор на joe.brunch your_user

и попробуйте это и посмотрите, сколько объектов соответствует имени позднего завтрака

выберите * из всех_объектов где object_type в («TABLE», «VIEW») и имя_объекта = ‘поздний завтрак‘;

0 голосов
/ 05 декабря 2016

Я обнаружил, что таблица, на которую я ссылался (таблица schema_version ) Flyway, была создана с двойными кавычками ... и, таким образом, требовались двойные кавычки, где бы на них ни ссылались.

Вот что говорит Oracle :

Идентификатор в кавычках начинается и заканчивается двойными кавычками ("). Если вы называете объект схемы, используя идентификатор в кавычках, то вы должны использовать двойные кавычкивсякий раз, когда вы ссылаетесь на этот объект.

На практике это работает:

SELECT * FROM MYSCHEMA."schema_version";
SELECT * FROM "MYSCHEMA"."schema_version";

Когда этого не произошло (-> ORA-00942: таблица или представление не существует):

SELECT * FROM MYSCHEMA.schema_version;
...