ALL_CONSTRAINTS和ALL_CONS_COLUMNS中的所有者是否与表所有者相同?

问题描述 投票:2回答:2

根据Oracle,OWNER中的(ALL|USER|DBA)_CONSTRAINTS字段是约束的所有者。为了关联到该约束所属的表,此视图提供了TABLE_NAME,但是要唯一地标识表,我需要表的所有者和表名。因为*_CONSTRAINTS*_ALL_CONS_COLUMNS视图没有TABLE_OWNER字段,这是否意味着约束所有者与表所有者相同?或者换句话说,约束只能由表的所有者添加吗?

oracle constraints data-dictionary
2个回答
0
投票

这是否意味着约束所有者与表所有者相同?


只能由表的所有者添加约束吗?

否,它可以由具有alter any table特权的另一个用户添加。其中之一是SYS。这是一个例子:

以Scott的身份联系,我正在创建一个表:

SQL> connect scott/tiger
Connected.
SQL> create table test (id number);

Table created.

作为SYS连接并更改Scott的表-添加主键约束:

SQL>将sys作为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>

如您所见,Scott拥有everything


0
投票

的所有者在另一列R_OWNER中找到。实际上,一个用户可以在另一个用户的表上创建约束(并拥有其定义)。

© www.soinside.com 2019 - 2024. All rights reserved.