Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查询以查找oracle sql中的主键、外键列和代理键_Oracle_Oracle Sql Data Modeler - Fatal编程技术网

查询以查找oracle sql中的主键、外键列和代理键

查询以查找oracle sql中的主键、外键列和代理键,oracle,oracle-sql-data-modeler,Oracle,Oracle Sql Data Modeler,我有两个问题 我需要找出整个数据库模式中的所有代理键oracle sql 我需要找出整个数据库架构中的所有主键和外键oracle sql 一些字段只是一个示例 COLUMNNAME DATATYPE NULLABLE COLUMN_ID COMMENTS CCC_CUSTCAT_SID NUMBER(38,0) No 1 Unique SURROGATE Key CCC_NUM_SUBCATEGOR

我有两个问题

  • 我需要找出整个数据库模式中的所有代理键oracle sql
  • 我需要找出整个数据库架构中的所有主键和外键oracle sql
  • 一些字段只是一个示例

    COLUMNNAME              DATATYPE          NULLABLE COLUMN_ID COMMENTS
    CCC_CUSTCAT_SID         NUMBER(38,0)        No      1        Unique SURROGATE Key
    CCC_NUM_SUBCATEGORY_UID NUMBER(22,0)        No      2        NATURAL key column 1, subcategory number
    CCC_CATEGORY_SID        NUMBER(38,0)        No      3        FK: Unique SURROGATE Key of Category
    CCC_MOD_CATEGORY_UID    VARCHAR2(300 BYTE)  No      4        NATURAL key column 2, Category UID
    KCD_SUBSCR_TYPE_SID     NUMBER(38,0)        No      5        FK: Unique SURROGATE Key of SUBSCR type
    KCD_MOD_SUBSCR_TYPE_UID VARCHAR2(300 BYTE)  No      6        NATURAL KEY column 3, SUBSCR type UID
    
    所以我有些困惑,代理键、自然键、主键和外键之间的真正区别是什么?当试图理解通过各种帖子搜索时,会有点困惑吗

    基本认识

    PK-不是唯一标识的空字段 FK-用于引用

    自然键-? 代理键-? UID-? SID-

    我找到了一些信息

    有人能解释并提出问题1和问题2吗

    我试过一些东西,但都出错了

    SELECT ac.table_name,
             column_name,
             position,
             ac.constraint_name,
             DECODE (constraint_type, 'P', 'Primary Key', 'Foreign Key') key_type,
             (SELECT ac2.table_name
                FROM all_constraints ac2
               WHERE AC2.CONSTRAINT_NAME = AC.R_CONSTRAINT_NAME)
                fK_to_table
        FROM all_cons_columns acc, all_constraints ac
       WHERE     acc.constraint_name = ac.constraint_name
             AND acc.table_name = ac.table_name
             AND CONSTRAINT_TYPE IN ('P', 'R')
             --AND ac.table_name = 'ACCOUNT' (your table here)
    ORDER BY table_name, constraint_type, position;
    
    ORA-01427: single-row subquery returns more than one row
    01427. 00000 -  "single-row subquery returns more than one row"
    *Cause:    
    *Action:
    
    您的标量查询

    (SELECT ac2.table_name
                FROM all_constraints ac2
               WHERE AC2.CONSTRAINT_NAME = AC.R_CONSTRAINT_NAME)
    
    可以返回多行,因为多个表可以引用回父表上的同一主键约束

    一个快速的解决办法是把它们全部收集起来

    SELECT ac.table_name,
             column_name,
             position,
             ac.constraint_name,
             DECODE (constraint_type, 'P', 'Primary Key', 'Foreign Key') key_type,
             (SELECT listagg(ac2.table_name) 
                FROM all_constraints ac2
               WHERE AC2.CONSTRAINT_NAME = AC.R_CONSTRAINT_NAME)
                fK_to_table
        FROM all_cons_columns acc, all_constraints ac
       WHERE     acc.constraint_name = ac.constraint_name
             AND acc.table_name = ac.table_name
             AND CONSTRAINT_TYPE IN ('P', 'R')
             --AND ac.table_name = 'ACCOUNT' (your table here)
    ORDER BY table_name, constraint_type, position;
    

    Oracle在表(数据字典)上有许多元数据视图。非常感谢您调整查询,但我得到以下错误ORA-02000:关键字02000中缺少。00000第7行第13列出现“缺少%s关键字”错误这是您的整个查询,还是您在其中的某个位置有一个group by?另外,您使用的是哪个版本的数据库?Hi@Connor McDonald我遇到的错误与我使用group by时遇到的错误相同,我使用的是oracle 11.2.0.4