gpt4 book ai didi

sql - 在 Oracle ALL_CONSTRAINTS 中仅查找用户定义的检查约束

转载 作者:行者123 更新时间:2023-12-04 14:17:48 24 4
gpt4 key购买 nike

考虑这个表定义:

CREATE TABLE foo (
a int not null, -- Implicit not null constraint
b int check (b is not null), -- Explicit not null constraint
c int check (c > 1) -- Explicit constraint
);

我想发现所有显式检查约束,即用户使用 CHECK 在其 DDL 语句中定义的约束。句法。这些约束可能会也可能不会被命名。在上面的例子中,它们没有被命名。如何只发现“显式”检查约束,而忽略隐式约束?

例如。当我查询 ALL_CONSTRAINTS :

SELECT *
FROM all_constraints
WHERE constraint_type = 'C'
AND table_name = 'FOO';

我没有看到任何区分显式/隐式的方法:

CONSTRAINT_NAME   SEARCH_CONDITION   GENERATED
---------------------------------------------------
SYS_C00120656 "A" IS NOT NULL GENERATED NAME
SYS_C00120657 b is not null GENERATED NAME
SYS_C00120658 c > 1 GENERATED NAME

最佳答案

我当然可以使用确切的 "COLUMN_NAME" IS NOT NULL 对某人的可能性进行启发式分析。语法(包括双引号):

SELECT *
FROM all_constraints
WHERE constraint_type = 'C'
AND table_name = 'FOO'
AND search_condition_vc NOT IN (
SELECT '"' || column_name || '" IS NOT NULL'
FROM all_tab_cols
WHERE table_name = 'FOO'
AND nullable = 'N'
);

这给了我想要的结果:

CONSTRAINT_NAME   SEARCH_CONDITION   GENERATED
---------------------------------------------------
SYS_C00120657 b is not null GENERATED NAME
SYS_C00120658 c > 1 GENERATED NAME

我把它作为答案放在这里,因为这对某些人来说可能已经足够了,但我真的想要一个更可靠的解决方案。

关于sql - 在 Oracle ALL_CONSTRAINTS 中仅查找用户定义的检查约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55417180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com