了解有关约束性质的更多信息?

时间:2011-12-17 15:57:38

标签: sql oracle constraints

我正在运行的一段遗留代码,它会破坏一个名为REF_REQUEST的约束。

我通过以下方式查找此约束:

select * from all_constraints where constraint_name='REF_REQUEST'

这告诉我constraint_type是'R',它给我表名为CORRESPONDENCE。

但是,我仍然不知道......我在CORRESPONDENCE中缺少什么价值,或者我试图插入的是导致问题的地方,以及每个列的相关内容。如何通过查询dB来了解此信息?

2 个答案:

答案 0 :(得分:3)

或者,您知道它是基于您从all_constraints(constraint_type = R)中选择的参照完整性约束,因此您只需查询all_cons_columns即可获得答案:

SELECT table_name, column_name
  FROM all_cons_columns
 WHERE constraint_name = 'REF_REQUEST'
 ORDER by position;

答案 1 :(得分:2)

使用get_ddl包中的dbms_metadata方法获取有关约束的更多详细信息

SELECT CAST(DBMS_METADATA.GET_DDL('CONSTRAINT','REF_REQUEST','CERTIFICATION') AS VARCHAR2(4000)) 
FROM DUAL

那应该告诉你约束对哪些列起作用


其中一个重载方法接受模式名称,因此您可以将其作为参数传递。

DBMS_METADATA.GET_DDL (
object_type     IN VARCHAR2,
name            IN VARCHAR2,
schema          IN VARCHAR2 DEFAULT NULL,
version         IN VARCHAR2 DEFAULT 'COMPATIBLE',
model           IN VARCHAR2 DEFAULT 'ORACLE',
transform       IN VARCHAR2 DEFAULT 'DDL')
RETURN CLOB;

进一步阅读: