查询以查找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
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