【问题标题】: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>
    

    如您所见,斯科特拥有一切

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      • 2010-11-23
      • 2010-09-28
      • 2010-10-29
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      相关资源
      最近更新 更多