如何从Oracle数据库中删除基于列的约束?

kin*_*ong 3 oracle constraints

有没有一种方法可以根据列名删除约束(唯一索引)?

我想做的是删除列名是name和name_type的约束。

ALTER TABLE MY_TABLE DROP CONSTRAINT NAME_OF_CONSTRAINT;

我没有名字,所以我想这样。

ALTER TABLE MY_TABLE DROP CONSTRAINT **WHERE COLUMN = col1 AND column = col2**

在约束上执行类似此操作的任何语法。

Ale*_*ole 5

我认为仅凭一条语句就不可能做到这一点,但事实证明确实如此,如文档中的示例所示:

ALTER TABLE MY_TABLE DROP UNIQUE(col1, col2);
Run Code Online (Sandbox Code Playgroud)

一个完整的例子:ALTER TABLE MY_TABLE ADD UNIQUE(col1,col2);

Table my_table altered.

SELECT CONSTRAINT_NAME, INDEX_NAME
FROM USER_CONSTRAINTS
WHERE TABLE_NAME = 'MY_TABLE';

CONSTRAINT_NAME                INDEX_NAME                    
------------------------------ ------------------------------
SYS_C0092455                   SYS_C0092455                   

ALTER TABLE MY_TABLE DROP UNIQUE(col1, col2);

Table my_table altered.

SELECT CONSTRAINT_NAME, INDEX_NAME
FROM USER_CONSTRAINTS
WHERE TABLE_NAME = 'MY_TABLE';

no rows selected
Run Code Online (Sandbox Code Playgroud)

另一种方法是查询USER_CONSTRAINTSUSER_CONS_COLUMNS视图以找到匹配的约束名称(大概是系统生成的,或者您已经知道了),然后使用该名称。如果您需要以脚本形式执行此操作,则可以在PL / SQL块中进行查询,然后将找到的约束名称插入动态ALTER TABLE语句中。