Как ссылаться на внешний ключ другой таблицы схемы при создании таблицы? - PullRequest
0 голосов
/ 03 мая 2018

У меня есть две схемы: -

  • GamersProfileDB - содержит UserCredential_tbl стол
  • DeveloperDB - содержит PlayerAchievements_tbl таблица

Теперь при создании таблицы с именем PlayerAchievements_tbl я хочу сослаться на нее из другой таблицы схемы Usercredential_tbl. Вот следующий SQL-запрос: -

create table PlayerAchievements_tbl 
(
pid number(10) references gamersprofiledb.usercredential (id),
aid number(10) references achievements (id) 
);

Но приведенный выше запрос дал мне 'таблица или представление не существует' ошибка

Этот (возможный дубликат) ответ о добавлении foreign_key в операцию ALTER, тогда как я хочу, чтобы он добавил foreign_key в операцию CREATE TABLE, и, кроме того, он также не указал, какие полномочия или привилегии могут потребоваться для выполнения этого запроса

Так что мой точный вопрос будет: -

1) можно ли ссылаться на другую таблицу схем в существующей таблице схем при создании новой таблицы?

2) или нам нужны некоторые привилегии для выполнения этого запроса?

Заранее спасибо.

1 Ответ

0 голосов
/ 03 мая 2018

По умолчанию (непривилегированный) пользователь не имеет прав на просмотр объектов, принадлежащих другому пользователю. Вам необходимо GRANT привилегию, используя:

GRANT REFERENCES ON GamersProfileDB.UserCredential TO DeveloperDB;

или, если вам также нужно SELECT из таблицы, то:

GRANT SELECT ON GamersProfileDB.UserCredential TO DeveloperDB;

Если у вас есть права на ссылку (или выбор) на таблицу, вы можете использовать:

CREATE TABLE PlayerAchievements_tbl                  -- Why add the "_tbl" suffix?
(
  pid number(10)
      CONSTRAINT PlayerAchievements__PID__FK         -- name the constraint
        REFERENCES GamersProfileDB.UserCredential (id),
  aid number(10)
      CONSTRAINT PlayerAchievements__AID__FK         -- name the constraint
        REFERENCES Achievements (id),
  CONSTRAINT PlayerAchievements__PID_AID__PK
    PRIMARY KEY ( pid, aid )
);
...