Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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 Developer中外键引用了哪些列?_Sql_Oracle_Metadata - Fatal编程技术网

如何知道在Oracle SQL Developer中外键引用了哪些列?

如何知道在Oracle SQL Developer中外键引用了哪些列?,sql,oracle,metadata,Sql,Oracle,Metadata,我可以检查外键中引用的列,但如何知道该外键在另一个表中引用的列?因为,它不必是表的主键。在Oracle SQL Developer上有没有一种不执行任何查询的简单方法?您可以加入用户约束列和用户约束视图,以获取主键和外键引用的元数据信息 比如说, SQL> COLUMN table_name format a10 SQL> COLUMN column_name format a11 SQL> COLUMN constraint_name format a20 SQL> C

我可以检查外键中引用的列,但如何知道该外键在另一个表中引用的列?因为,它不必是表的主键。在Oracle SQL Developer上有没有一种不执行任何查询的简单方法?

您可以加入用户约束列和用户约束视图,以获取主键和外键引用的元数据信息

比如说,

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>
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"
您还可以使用DBMS\u METADATA.GET\u DDL为表生成DDL。它将有完整的表格信息

比如说,

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>
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"

没有执行任何查询,是的

打开表格编辑器

如果没有看到“型号”页面,请升级到4.1版