Oracle просматривает пользователя - PullRequest
2 голосов
/ 05 июля 2011

Теперь, когда я узнал о концепции объектов схемы в Oracle и ее порядке при сопоставлении имен таблиц.

Для SQL-запроса, выданного пользователем XYZ и обращающегося к FOO_TABLE, порядок предпочтений будетcheck

  1. Таблица пользователей: XYZ.FOO_TABLE
  2. Синоним пользователя: XYZ.FOO_TABLE
  3. Общий синоним: PUBLIC.FOO_TABLE

Lookingна следующие данные представления в XML:

<ROW>
    <OWNER>XYZ</OWNER>
    <VIEW_NAME>BAR_VIEW</VIEW_NAME>
    <TEXT_LENGTH>...</TEXT_LENGTH>
    <TEXT>
        SELECT *
        FROM SOME_NAME
    </TEXT>
    <EDITIONING_VIEW>N</EDITIONING_VIEW>
    <READ_ONLY>N</READ_ONLY>
</ROW>

Если я хочу найти владельца SOME_TABLE, могу ли я просто начать поиск в следующем порядке?

  1. Таблица пользователей: XYZ.SOME_NAME
  2. Синоним пользователя: XYZ.SOME_NAME
  3. Публичный синоним: PUBLIC.SOME_NAME

Best, Will

1 Ответ

2 голосов
/ 05 июля 2011

Ваше утверждение может быть несколько упрощено до:

  1. Объект пользователя: XYZ.SOME_TABLE
  2. Открытый синоним: PUBLIC.SOME_TABLE

Это правило распространяется на все объекты базы данных (таблицы, пакеты и т. Д.). Шаг локального синонима не требуется, потому что 1) это локальный объект и 2) Oracle не допускает конфликта имен между локальными объектами (то есть вы не можете иметь синоним и таблицу в одной схеме с одинаковым именем ).

Единственным квалификатором здесь является то, что если определение представления содержит схему (SELECT * FROM SOME_SCHEMA.SOME_TABLE) или ссылку на базу данных (SELECT * FROM SOME_TABLE@SOME_DB_LINK), то разрешение имени выполняется из указанной схемы (в случае ссылки на БД из схема указана в определении ссылки на БД).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...