我正在通过程序员在项目中编写的一段Oracle PL-SQL代码来禁用约束,然后在启用第一个"启用时使用novalidate"然后立即"验证"它。 我无意中理解了下面的理由:
EXECUTE IMMEDIATE
'ALTER TABLE '
|| i_table_name
|| ' ENABLE NOVALIDATE CONSTRAINT '
|| i_constraint_name;
EXECUTE IMMEDIATE
'ALTER TABLE '
|| i_table_name
|| ' ENABLE VALIDATE CONSTRAINT '
|| i_constraint_name;
上述单一陈述中有什么问题? 例如:" ALTER TABLE EMP ENABLE EMP_PK"
请清除这个疑问。
答案 0 :(得分:1)
Oracle在the documentation
中推荐此订单有效使用诚信约束:程序
使用诚信 约束状态按以下顺序可以确保最佳效益:
- 禁用状态。
- 执行操作(加载,导出,导入)。
- 启用无效状态。
- 启用状态。
使用约束的一些好处 这个顺序是:
- 没有锁定。
- 所有约束都可以同时启用状态。
- 约束启用是并行完成的。
- 允许在桌面上进行并发活动。
答案 1 :(得分:0)
从实践的角度来看,您可能会遇到由于某些数据问题(例如某种遗留数据迁移问题)而导致遗留/旧数据无法通过验证,而只是新数据无法通过验证的情况。
在这种情况下,您希望启用约束,但将其设置为NOVALIDATE。
这为将来的数据启用了约束,但是并没有验证过去的失败(已在数据库中)。
当然,这应该是一个临时措施,因为最终您想修复数据问题,然后使用VALIDATE启用约束,以避免将来出现类似问题。