【发布时间】:2019-12-10 20:47:43
【问题描述】:
在工作中,我们有一个大型 Oracle SQL 查询,旨在根据先前脚本中的分析和表组合输出两个选择语句。在这些选择语句的末尾,我们截断了创建的临时表。我的问题是在选择语句有时间运行之前表被截断,导致查询和空表的输出均为 0,现在需要再次运行整个过程以正确填充表。这是我试图帮助自动化的事情,但我一直坚持如何让 Oracle 在触发截断之前等待 select 语句完成处理。很简单,它看起来像:
Select * from temp;
Truncate Table temp;
commit;
【问题讨论】:
-
这看起来很奇怪。 TRUNCATE - 据我所知 - 等到上一个命令完成,所以在 SELECT 返回结果之前它不可能截断 TEMP 表。因此,要么你做错了什么,要么你的“非常简单”的代码看起来不像那样。此外,没有必要提交。 TRUNCATE 是一个 DDL,它会隐式提交。
-
您将向我们展示完整的代码。
-
唉,这个问题没有更多细节是无法回答的。
-
代码看起来不像我写的那样,我不确定如何在不花费大量时间编辑表和列名的情况下匿名化它,但它是一个基本的选择语句,然后是截断语句如下。每次我选择整个查询并运行它时,输出都是空白的,但是当我选择除查询的截断部分之外的所有内容时,我会返回结果。不知道为什么老板决定添加提交..
-
@NicoleGagne APC 是对的,我们需要更多细节。代码是如何执行的?在命令行中,在 GUI 中,通过 java 应用程序中的 JDBC?您说“两个查询” - 但您的代码只显示一个。