在sqldeveloper中运行但放入批处理文件时从未完成的.sql代码的疑难解答

在sqldeveloper中运行但放入批处理文件时从未完成的.sql代码的疑难解答,sql,oracle,batch-file,cmd,oracle-sqldeveloper,Sql,Oracle,Batch File,Cmd,Oracle Sqldeveloper,我有一个批处理文件,它使用sqlplus命令运行多个.sql文件。我遇到一个问题,其中一个.sql文件挂起,导致我退出批处理作业 我没有遇到错误代码,但我让批处理文件在这一部分上运行了12个多小时,但没有成功。当我在sqldeveloper中手动运行这个.sql文件时,它大约在2分钟内完成。sql代码是一个insert语句,它插入的行数少于400k,包含5列。最初,这段代码是一个更大的.sql文件的一部分,该文件有4个insert语句插入到同一个表中,但我将每个insert语句分离到自己的文件中

我有一个批处理文件,它使用sqlplus命令运行多个.sql文件。我遇到一个问题,其中一个.sql文件挂起,导致我退出批处理作业

我没有遇到错误代码,但我让批处理文件在这一部分上运行了12个多小时,但没有成功。当我在sqldeveloper中手动运行这个.sql文件时,它大约在2分钟内完成。sql代码是一个insert语句,它插入的行数少于400k,包含5列。最初,这段代码是一个更大的.sql文件的一部分,该文件有4个insert语句插入到同一个表中,但我将每个insert语句分离到自己的文件中,并在批处理文件中执行步骤以尝试修复该问题。其他3个文件运行时没有问题,运行时间与手动运行类似

我尝试过改变它的运行顺序,并将此代码作为自己的单独批处理文件,但没有任何帮助

代码以包含多个变量的declare语句开始,然后执行以下操作:

BEGIN
    SELECT VARIABLE INTO DECLARED VARIABLE
    FROM TABLE;
etc...
它对批处理文件中的所有sql文件执行此操作。 然后它有一个IF语句(与其他sql文件具有相同的测试),后跟:

  THEN
       INSERT INTO TABLE (
            SELECT VAR1,
                   VAR2,
                   CASE WHEN COLUMN1 IS NOT NULL AND COLUMN2 IN (VALUE)
                            THEN COLUMN1 || 'D' || RNK
                        ELSE COLUMN1
                       END AS VAR3
            FROM( SUBQUERIES );
对于“子查询”,它有嵌套的子查询,这些子查询与其他子查询左连接和内连接。我认为这一步可能太复杂并导致错误,但不确定

它以COMMIT语句结束IF-THEN,后跟:

   ELSE
       NULL;
   END IF;
END;

这4个文件之间唯一的变化是insert语句。如何对此进行故障排除,以找出是什么原因导致它挂起在批处理文件中,而不是在sqldeveloper中。

它没有完成的原因之一,特别是如果它运行的时间比预期的长得多,可能是另一个会话阻止它完成。查询该问题的解决方案如下:

您还可以检查查询是否由于某种原因仍在运行。不过,如果您已经在sqldev中测试了完全相同的脚本,那么这似乎不太可能

此外,还可以删除
ELSE NULL
案例。它不执行任何操作,并且如果
不需要
ELSE
子句,则执行
操作