如何知道外键在 Oracle SQL Developer 中引用了哪些列?
How to know to which columns a foreign key is referencing in Oracle SQL Developer?
我可以检查外键中的哪些列正在引用,但我如何知道该外键在另一个 table 中引用了哪些列?因为,它不一定是 table 的主键。有没有在 Oracle SQL Developer 上执行此操作而无需执行任何查询的简单方法?
您可以加入user_cons_columns和user_constraints视图来获取主键的元数据信息和外键引用。
例如,
SQL> COLUMN table_name format a10
SQL> COLUMN column_name format a11
SQL> COLUMN constraint_name format a20
SQL> COLUMN owner format a10
SQL> COLUMN ref_table_name format a15
SQL> COLUMN ref_pk format a10
SQL> SELECT a.table_name,
2 a.column_name,
3 a.constraint_name,
4 b.owner,
5 c_pk.table_name ref_table_name,
6 c_pk.constraint_name ref_pk
7 FROM user_cons_columns a
8 JOIN user_constraints b
9 ON a.owner = b.owner
10 AND a.constraint_name = b.constraint_name
11 JOIN user_constraints c_pk
12 ON b.r_owner = c_pk.owner
13 AND b.r_constraint_name = c_pk.constraint_name
14 WHERE b.constraint_type = 'R';
TABLE_NAME COLUMN_NAME CONSTRAINT_NAME OWNER REF_TABLE_NAME REF_PK
---------- ----------- -------------------- ---------- --------------- ----------
EMP DEPTNO FK_DEPTNO SCOTT DEPT PK_DEPT
SQL>
您还可以使用 DBMS_METADATA.GET_DDL 为 table 生成 DDL。它将包含完整的 table 信息。
例如,
SQL> set long 200000 pages 0 lines 131
SQL> column txt format a121 word_wrapped
SQL> select dbms_metadata.get_ddl('TABLE', 'EMP') from dual;
CREATE TABLE "SCOTT"."EMP"
( "EMPNO" NUMBER(4,0),
"ENAME" VARCHAR2(10),
"JOB" VARCHAR2(9),
"MGR" NUMBER(4,0),
"HIREDATE" DATE,
"SAL" NUMBER(7,2),
"COMM" NUMBER(7,2),
"DEPTNO" NUMBER(2,0),
CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS" ENABLE,
CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
REFERENCES "SCOTT"."DEPT" ("DEPTNO") ENABLE
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS"
不执行任何查询,是的。
打开 table 编辑器。
如果您没有看到模型页面,请升级到版本 4.1
我可以检查外键中的哪些列正在引用,但我如何知道该外键在另一个 table 中引用了哪些列?因为,它不一定是 table 的主键。有没有在 Oracle SQL Developer 上执行此操作而无需执行任何查询的简单方法?
您可以加入user_cons_columns和user_constraints视图来获取主键的元数据信息和外键引用。
例如,
SQL> COLUMN table_name format a10
SQL> COLUMN column_name format a11
SQL> COLUMN constraint_name format a20
SQL> COLUMN owner format a10
SQL> COLUMN ref_table_name format a15
SQL> COLUMN ref_pk format a10
SQL> SELECT a.table_name,
2 a.column_name,
3 a.constraint_name,
4 b.owner,
5 c_pk.table_name ref_table_name,
6 c_pk.constraint_name ref_pk
7 FROM user_cons_columns a
8 JOIN user_constraints b
9 ON a.owner = b.owner
10 AND a.constraint_name = b.constraint_name
11 JOIN user_constraints c_pk
12 ON b.r_owner = c_pk.owner
13 AND b.r_constraint_name = c_pk.constraint_name
14 WHERE b.constraint_type = 'R';
TABLE_NAME COLUMN_NAME CONSTRAINT_NAME OWNER REF_TABLE_NAME REF_PK
---------- ----------- -------------------- ---------- --------------- ----------
EMP DEPTNO FK_DEPTNO SCOTT DEPT PK_DEPT
SQL>
您还可以使用 DBMS_METADATA.GET_DDL 为 table 生成 DDL。它将包含完整的 table 信息。
例如,
SQL> set long 200000 pages 0 lines 131
SQL> column txt format a121 word_wrapped
SQL> select dbms_metadata.get_ddl('TABLE', 'EMP') from dual;
CREATE TABLE "SCOTT"."EMP"
( "EMPNO" NUMBER(4,0),
"ENAME" VARCHAR2(10),
"JOB" VARCHAR2(9),
"MGR" NUMBER(4,0),
"HIREDATE" DATE,
"SAL" NUMBER(7,2),
"COMM" NUMBER(7,2),
"DEPTNO" NUMBER(2,0),
CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS" ENABLE,
CONSTRAINT "FK_DEPTNO" FOREIGN KEY ("DEPTNO")
REFERENCES "SCOTT"."DEPT" ("DEPTNO") ENABLE
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS"
不执行任何查询,是的。
打开 table 编辑器。
如果您没有看到模型页面,请升级到版本 4.1