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-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-...
2. 解压 "oracle-xe-11.2.0-1.0.x86_64.rpm.zip",获取 "oracle-xe-11.2.0-1.0.x86_64.rpm" 文件。 3. 使用 `rpm` 命令安装 RPM 包,可能需要以 root 权限执行。 4. 配置数据库参数,如监听端口、服务名等。 5. 启动...
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-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-database-preinstall-19c-1.0-1.el7.x86_64.rpm
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 Database Server 12cR2 Preinstall 是一个专为在x86_64架构的Linux系统上安装Oracle数据库12c Release 2 (12.2)而设计的预配置软件包。这个预安装包的主要目的是简化Oracle数据库服务器的安装流程,预先配置...
oracle-database-server-12cR2-preinstall-1.0-3.el7.x86_64.rpm
c3p0-oracle-thin-extras-0.9.2.1
oracle-rdbms-server-11gR2-preinstall-1.0-4.el7.x86_64.rpm
oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm
oracle-instantclient-basic-11.1.0.1-1.x86_64.rpm
oracle-instantclient11.2-basic-11.2.0.1.0-1.x86_64.rpm client 安装包 rpm -> deb : sudo alien xxx.rpm
oracle-instantclient11.2-basic-11.2.0.4.0-1.i386.rpm
这个压缩包"oracle-instantclient11.2-sdk-11.2.0.1.0-1.x86_64.zip"是Oracle Instant Client的SDK版本,适用于64位(x86_64)操作系统,版本号为11.2.0.1.0。 Oracle Instant Client SDK包含了开发Oracle数据库...
cx_Oracle-5.1.3-11g.win-amd64-py2.7.exe Python 2.7 lib for Oracle 11g.
oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.i386.rpm
我们可以通过查询这些视图,找出所有的主键和外键,从而确定哪些是主表,哪些是从表。 2. **查询`USER_CONSTRAINTS`视图**: ```sql SELECT TABLE_NAME AS "主表/从表", CONSTRAINT_TYPE, COLUMN_NAME, R_...