sql - 无法验证,使用 novalidate 选项

标签 sql oracle plsql

您好,我在表格中插入了一些日期。由于某些原因,我不得不禁用我的约束。约束与索引相关联。我用过这行代码:

ALTER TABLE my_table DISABLE CONSTRAINT "my_constraint" drop index

而 my_constraint 处于禁用状态。 不,我想启用此约束,但在调用此行之后:

ALTER TABLE my_table ENABLE NOVALIDATE CONSTRAINT "my_constraint";\

我收到一个错误:

ORA-02299: cannot validate (USER.my_constraint) - - duplicate keys found

最佳答案

您不能使用具有唯一索引的非唯一值。但是您可以使用由非唯一索引强制执行的唯一约束来拥有非唯一值。即使您最初创建了一个非唯一索引,drop indexenable 语法也会尝试重新创建一个唯一索引,除非您在 using index 中提供了更多详细信息 部分。

例如:

SQL> create table my_table(my_column number,
  2     constraint my_constraint unique (my_column));

Table created.

SQL> alter table my_table disable constraint my_constraint drop index;

Table altered.

SQL> insert into my_table select 1 from dual union all select 1 from dual;

2 rows created.

SQL> alter table my_table enable novalidate constraint my_constraint;
alter table my_table enable novalidate constraint my_constraint
*
ERROR at line 1:
ORA-02299: cannot validate (USER.MY_CONSTRAINT) - duplicate keys found


SQL> alter table my_table enable novalidate constraint my_constraint
  2     using index (create index my_index on my_table(my_column));

Table altered.

SQL> --The constraint is enforced, even though other rows violate it.
SQL> insert into my_table values(1);
insert into my_table values(1)
*
ERROR at line 1:
ORA-00001: unique constraint (USER.MY_CONSTRAINT) violated

关于sql - 无法验证,使用 novalidate 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7981221/

相关文章:

database - 无法启动 Oracle Database XE 18.4 Docker 容器

java - 如何向 Oracle 触发器发送任意参数?

sql - Oracle PL/SQL : How to DEREF from a VARRAY of REFs?

php - 如何使用 PHP PDO 运行 Transact-SQL

mysql - 运行 CREATE TABLE 脚本时出现错误 1064

mysql - MySQL 中的子查询非常慢

c# - 使用 .NET 中的类型化数据集将 SQL 参数传递给 IN() 子句

java - 为什么单线程使我的 Java 程序速度如此之快?

python - 如何更改 sqlalchemy 的 create_engine 中的编码选项?

java - 如何在调用 Java Web 服务之前检查它是否已启动并在 PL/SQL 中运行