- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在 Oracle 数据库上执行一堆(最多约 1000000 条)sql 语句。这些语句最后应该导致引用一致的状态,如果发生错误,所有语句都应该回滚。这些语句不是按引用顺序出现的。因此,如果启用了外键约束,其中一个语句可能会导致外键冲突,即使此冲突将通过稍后执行的语句来修复。
我尝试先禁用外键,然后在执行所有语句后启用它们。我以为当实际发生外键违规时我可以回滚。但是我错了,我发现 Oracle 中的每个 DDL 语句都以提交开始,因此无法以这种方式回滚语句。这是我禁用外键的脚本:
begin
for i in (select constraint_name, table_name from user_constraints
where constraint_type ='R' and status = 'ENABLED')
LOOP execute immediate 'alter table '||i.table_name||' disable constraint
'||i.constraint_name||'';
end loop;
end;
最佳答案
有几种潜在的方法。
首先要考虑的是,您在表级别所做的任何事情都将适用于使用该表的所有 session 。如果您没有对该表的独占访问权限,您可能不想删除/重新创建约束,或禁用/启用它们。
要考虑的第二件事是您可能不希望回滚一百万次插入/更新。回滚可能很慢。
通常我会加载到一个临时表中。然后从临时表向目标表执行一次 INSERT。作为单个语句,Oracle 将在最后应用所有检查约束。
如果您无法通过临时表(例如更新现有数据),请在开始之前进行约束 deferrable initially immediate .然后,在您的 session 中,
SET CONSTRAINTS emp_job_nn, emp_salary_min DEFERRED;
关于自治事务中的 Oracle DDL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2353592/
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
在 Netbeans 中,我能够运行 NetLogo 并将数据传输到另一个 java 程序(两个不同的线程)。 现在,我想构建一个可执行的 java 程序以便按原样使用它。 问题是当我启动 exe 时
我正在使用 XA(两阶段)事务。我想通过日志类和实体管理器记录到一个日志表。我在 EJB Session bean 中的方法如下所示: private void logError(Throwable
我是一名优秀的程序员,十分优秀!