【问题标题】:Is the OWNER in ALL_CONSTRAINTS and ALL_CONS_COLUMNS the same as the table owner?ALL_CONSTRAINTS 和 ALL_CONS_COLUMNS 中的 OWNER 是否与表所有者相同?
【发布时间】:2019-12-08 16:55:07
【问题描述】:
根据 Oracle,(ALL|USER|DBA)_CONSTRAINTS 中的 OWNER 字段是约束的所有者。要关联回此约束所属的表,此视图提供TABLE_NAME,但是要唯一标识表,我需要表的所有者和表名。因为*_CONSTRAINTS 和*_ALL_CONS_COLUMNS 视图没有TABLE_OWNER 字段,这是否意味着约束所有者与表所有者相同?或者换句话说,约束只能由表的所有者添加吗?
【问题讨论】:
标签:
oracle
constraints
data-dictionary
【解决方案1】:
这是否意味着约束所有者与表所有者相同?
是的。
只能由表的所有者添加约束吗?
不,它可以由另一个拥有alter any table 权限的用户添加。其中之一是SYS。这是一个例子:
以 Scott 的身份连接,我正在创建一个表:
SQL> connect scott/tiger
Connected.
SQL> create table test (id number);
Table created.
以 SYS 身份连接并更改 Scott 的表 - 添加主键约束:
SQL> connect sys as sysdba
Enter password:
Connected.
SQL> alter table scott.test add constraint pk_test primary key (id);
Table altered.
回到斯科特,检查谁拥有什么:
SQL> select constraint_name, owner from all_constraints where table_name = 'TEST';
CONSTRAINT_NAME OWNER
------------------------------ ------------------------------
PK_TEST SCOTT
SQL> select table_name, owner From all_tables where table_name = 'TEST';
TABLE_NAME OWNER
------------------------------ ------------------------------
TEST SCOTT
SQL>
如您所见,斯科特拥有一切。