1.已知oracle数据库中有一个名为user_constraints的系统表,它主要用来管理当前登陆用户所拥有表的所有约束信息。
SQL>desc user_constraints;
名称 空值 类型
------------------------- -------- ------------------
OWNER NOT NULL VARCHAR2(30)
CONSTRAINT_NAME NOT NULL VARCHAR2(30)
CONSTRAINT_TYPE VARCHAR2(1)
TABLE_NAME NOT NULL VARCHAR2(30)
SEARCH_CONDITION LONG()
R_OWNER VARCHAR2(30)
R_CONSTRAINT_NAME VARCHAR2(30)
DELETE_RULE VARCHAR2(9)
STATUS VARCHAR2(8)
DEFERRABLE VARCHAR2(14)
DEFERRED VARCHAR2(9)
VALIDATED VARCHAR2(13)
GENERATED VARCHAR2(14)
BAD VARCHAR2(3)
RELY VARCHAR2(4)
LAST_CHANGE DATE
INDEX_OWNER VARCHAR2(30)
INDEX_NAME VARCHAR2(30)
INVALID VARCHAR2(7)
VIEW_RELATED VARCHAR2(14)
20 rows selected
2.其中将用到的字段主要有四个:
CONSTRAINT_NAME ---约束名
R_CONSTRAINT_NAME ---外键引用的约束名
CONSTRAINT_TYPE ---约束类型,比如其值:P表示主键,R表示外键,C表示非空
TABLE_NAME ---表名
3.举例如下:
假如有主表table1,我们要查找出引用了此表的所有从表。
步骤1.
找出主表的主键约束名
SQL>select a.constraint_name from user_constraints a where a.table_name = upper('table1
') and a.constraint_type = 'P';
注意:表名要大写;后面的约束类型值为“P”,指主键约束。
步骤2.
通过查找出的主表约束名,找到所有引用了此主表的从表名。
SQL>select a.table_name from user_constraints a where a.r_constraint_name = '
上面查出的约束名'
;
步骤3.
当然也可以一步到位,将以上步骤合二为一。
SQL>select a.table_name from user_constraints a where a.r_constraint_name in
(select b.constraint_name from user_constraints b where b.table_name =
upper('
table1
')
and b.constraint_type = 'P')
或者可以更简洁:
select a.table_name from user_constraints a join user_constraints b
on a.r_constraint_name = b.constraint_name and b.table_name =
upper('
table1
')
and b.constraint_type = 'P'
;
说明:蓝色部分为可选条件,因为从表的外键一般都是引用的主表的主键,所以可以不加约束类型。
分享到:
相关推荐
oracle-instantclient-basic-21.6.0.0.0-1.x86_64.rpm oracle-instantclient-basic-21.6.0.0.0-1.x86_64.zip oracle-instantclient-devel-21.6.0.0.0-1.x86_64.rpm oracle-instantclient-sqlplus-21.6.0.0.0-1.x86_...
oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-basiclite-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-jdbc-...
oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-basiclite-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-jdbc-...
sudo alien -i /home/ubuntu/oracle-instantclient-basic-21.1.0.0.0-1.x86_64.rpm sudo alien -i /home/ubuntu/oracle-instantclient-devel-21.1.0.0.0-1.x86_64.rpm sudo alien -i /home/ubuntu/oracle-instant...
oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-basiclite-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-odbc-...
Oracle Database 21c 是最新的版本;...oracle-database-ee-21c-1.0-1.ol8文件分割成 三个 压缩包,必须集齐 三个 文件后才能一起解压一起使用: Oracle Database 21c (oracle-database-ee-21c-1.0-1.ol8.part3.rar) ...
dm8-oracle-jdbc16-wrapper.jar
oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm --基础包,为了运行OCI、OCCI、JDBC-OCI 这几个应用程序; oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm --补充包/文件,是为了运行sql*plus...
compat-oracle-rhel4-1.0-5.i386.rpm
oracle-xe-11.2.0-1.0.x86_64.rpm
Oracle Database 21c 是最新的版本;...oracle-database-ee-21c-1.0-1.ol8文件分割成 三个 压缩包,必须集齐 三个 文件后才能一起解压一起使用: Oracle Database 21c (oracle-database-ee-21c-1.0-1.ol8.part3.rar) ...
oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
在Linux上安装oracle数据库,... 在oracle linux 6_64bit上,提供了oracle-rdbms-server-11gR2-preinstall包,可以自动化的将需要安装的rpm包,需要调整的内核参数自动化的处理,对DBA安装数据库确实节省了不少的时间。
oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm --基础包,为了运行OCI、OCCI、JDBC-OCI 这几个应用程序; oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm --补充包/文件,是为了运行sql*plus...
oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm --基础包,为了运行OCI、OCCI、JDBC-OCI 这几个应用程序; oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm --补充包/文件,是为了运行sql*plus...
oracle-instantclient19.6-basic-19.6.0.0.0-1.x86_64.rpm oracle-instantclient19.6-devel-19.6.0.0.0-1.x86_64.rpm
tableau10.0-oracle-driver-x64.msi,tableau开发oracle必须包
Oracle Database 19c 是最新的长期版本,支持期限...oracle-database-ee-19c文件分割成 三个 压缩包,必须集齐 三个 文件后才能一起解压一起使用: Oracle Database 19c (oracle-database-ee-19c.x86_64.part3.rar) ...
c3p0-oracle-thin-extras-0.9.2.1