如何在创建表时引用另一个模式表的外键?

时间:2018-05-03 08:56:07

标签: sql oracle foreign-keys grant

我有两个模式: -

  • 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) 
);

但是上面的查询给了我 '表格或视图不存在' 错误

This(可能重复)回答在ALTER操作中添加foreign_key,而我希望它在CREATE TABLE操作中添加foreign_key,而且它也没有指定执行此查询可能需要的授权或权限< / p>

所以我的确切问题是: -

1)是否可以在创建新表时将另一个模式表引用到现有模式表中?

2)或者我们是否需要一些权限才能执行此查询?

先谢谢。

1 个答案:

答案 0 :(得分:1)

默认情况下,(非特权)用户无权查看其他用户拥有的对象。您需要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 )
);