如何从 oracle 数据库中删除基于列的约束?
How to remove constraint based on columns from oracle database?
有没有办法根据列名删除约束(唯一索引)?
我想做的是删除一个约束,其中 columna name 是 name,并且 name_type。
ALTER TABLE MY_TABLE DROP CONSTRAINT NAME_OF_CONSTRAINT;
我没有名字所以我想这样做...
ALTER TABLE MY_TABLE DROP CONSTRAINT **WHERE COLUMN = col1 AND column = col2**
在约束条件下执行类似操作的任何语法。
- 做一个
SELECT * FROM USER_CONS_COLUMNS
或ALL_CONS_COLUMNS
。这将为您提供所有者的约束名称,table 和列组合。
- 在为列名称返回的多行中,根据需要在
ALTER TABLE ... DROP CONSTRAINT...
语法中使用约束名称。
- 如果您绝对确定可以删除所有行,请使用动态 sql 对循环中的所有行执行此操作。
这将为您提供额外的保护层,这样您就不会意外删除需要的约束。
我不认为这是可能的单条语句,但事实证明它是,如图所示 in the examples in the documentation:
ALTER TABLE MY_TABLE DROP UNIQUE(col1, col2);
一个完整的例子:
更改 TABLE MY_TABLE 添加唯一 (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
另一种方法是查询 USER_CONSTRAINTS
和 USER_CONS_COLUMNS
视图以找到匹配的约束名称 - 可能是系统生成的或者您已经知道 - 然后使用该名称。如果您需要将此作为脚本执行,则可以在 PL/SQL 块中查询,并将找到的约束名称插入动态 ALTER TABLE
语句。
有没有办法根据列名删除约束(唯一索引)?
我想做的是删除一个约束,其中 columna name 是 name,并且 name_type。
ALTER TABLE MY_TABLE DROP CONSTRAINT NAME_OF_CONSTRAINT;
我没有名字所以我想这样做...
ALTER TABLE MY_TABLE DROP CONSTRAINT **WHERE COLUMN = col1 AND column = col2**
在约束条件下执行类似操作的任何语法。
- 做一个
SELECT * FROM USER_CONS_COLUMNS
或ALL_CONS_COLUMNS
。这将为您提供所有者的约束名称,table 和列组合。 - 在为列名称返回的多行中,根据需要在
ALTER TABLE ... DROP CONSTRAINT...
语法中使用约束名称。 - 如果您绝对确定可以删除所有行,请使用动态 sql 对循环中的所有行执行此操作。
这将为您提供额外的保护层,这样您就不会意外删除需要的约束。
我不认为这是可能的单条语句,但事实证明它是,如图所示 in the examples in the documentation:
ALTER TABLE MY_TABLE DROP UNIQUE(col1, col2);
一个完整的例子: 更改 TABLE MY_TABLE 添加唯一 (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
另一种方法是查询 USER_CONSTRAINTS
和 USER_CONS_COLUMNS
视图以找到匹配的约束名称 - 可能是系统生成的或者您已经知道 - 然后使用该名称。如果您需要将此作为脚本执行,则可以在 PL/SQL 块中查询,并将找到的约束名称插入动态 ALTER TABLE
语句。