如何从oracle数据库中删除基于列的约束?
是否有方法删除基于列名称的约束(唯一索引) 我想做的是删除columna name为name,name_type的约束如何从oracle数据库中删除基于列的约束?,oracle,constraints,Oracle,Constraints,是否有方法删除基于列名称的约束(唯一索引) 我想做的是删除columna name为name,name_type的约束 ALTER TABLE MY_TABLE DROP CONSTRAINT NAME_OF_CONSTRAINT 我没有名字,所以我想这样做 ALTER TABLE MY_TABLE DROP CONSTRAINT**,其中COLUMN=col1和COLUMN=col2** 对约束执行类似操作的任何语法 执行从用户列或所有列中选择*。这将为所有者、表和列组合提供约束名称 在为列名
ALTER TABLE MY_TABLE DROP CONSTRAINT NAME_OF_CONSTRAINT代码>
我没有名字,所以我想这样做
ALTER TABLE MY_TABLE DROP CONSTRAINT**,其中COLUMN=col1和COLUMN=col2**
对约束执行类似操作的任何语法
执行从用户列
或所有列
中选择*。这将为所有者、表和列组合提供约束名称
在为列名返回的多行中,根据需要在ALTER表中使用约束名称。。。删除约束…
语法
如果您完全确定可以删除循环中的所有行,请使用动态sql对它们执行此操作
这将为您提供一个额外的保护层,这样您就不会意外地删除所需的约束。我认为一条语句不可能做到这一点,但事实证明是这样的,如图所示:
一个完整的例子:
ALTER TABLE MY_TABLE ADD UNIQUE(col1、col2)
另一种方法是查询USER\u约束
和USER\u CONS\u列
视图,找到匹配的约束名称(可能是系统生成的或您已经知道的),然后使用该名称。如果需要作为脚本执行此操作,则可以在PL/SQL块中进行查询,并将找到的约束名称插入动态ALTER TABLE
语句中
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';
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