【问题标题】:Oracle is dropping my table before select statement finishes在 select 语句完成之前 Oracle 正在删除我的表
【发布时间】: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?您说“两个查询” - 但您的代码只显示一个。

标签: sql oracle


【解决方案1】:

TRUNCATE是Oracle中的一个DDL语句,意思是它可以修改表和数据库的结构,而不是使用TRUNCATE为什么不尝试将其更改为简单的DELETE,这是一个简单的DML Oracle 中只更改数据的语句。

【讨论】:

  • 为什么?因为涉及大量数据,所以删除将需要 ages 才能完成,使用大量撤消和其他东西?谁知道(妮可除外)。
【解决方案2】:

如果 2 个选择语句(一个后跟一个截断)在单独的会话中运行,您所描述的只能是这种情况。在同一个会话中运行,问题就会得到解决,尽管您可能失去了并行运行它们的性能优势。

【讨论】:

    猜你喜欢
    • 2019-03-16
    • 1970-01-01
    • 2023-04-10
    • 2020-12-16
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    相关资源
    最近更新 更多