我有一个批处理文件,可以使用sqlplus命令运行多个.sql文件。我遇到一个问题,其中一个.sql文件挂起并导致我退出批处理作业。
我没有遇到错误代码,但是我已经使批处理文件在这一部分运行了12个小时以上,但没有成功。当我在sqldeveloper中手动运行此.sql文件时,它在大约2分钟内完成。 sql代码是一条插入语句,该语句插入少于40万行的5列。最初,此代码是一个较大的.sql文件的一部分,该文件在同一个表中插入了4条插入语句,但是我将每个插入语句分成了自己的文件,然后进入批处理文件以尝试解决此问题。其他3个文件运行都没有问题,并且运行时间与手动运行类似。
我尝试过更改其运行顺序,并将此代码制成自己的单独批处理文件,但没有帮助。
代码从带有多个变量的声明语句开始,然后执行:
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 );
对于“ SUBQUERIES”,它具有嵌套的子查询,这些子查询保持连接状态,并内部连接到其他子查询。我认为该步骤可能太复杂并导致错误,但不确定。
它以COMMIT语句结束IF-THEN,其后是:
ELSE
NULL;
END IF;
END;
在4个文件之间唯一改变的是插入语句。我该如何解决这个问题,以找出导致它挂在批处理文件中的原因,而不是挂在sqldeveloper中。
答案 0 :(得分:1)
它未完成的一个原因,尤其是如果它运行的时间比预期的长得多,可能是因为还有另一个会话阻止它完成。查询此问题的解决方案在这里:Finding query from oracle which is blocking session
您还可以检查由于某种原因该查询仍未运行。但是,如果您已经在SQL Dev中测试了完全相同的脚本,那似乎不太可能。 How to check Oracle database for long running queries
此外,IF
大小写也可以删除。它什么也不做,ELSE
不需要UnboundLocalError: local variable 'pause' referenced before assignment
子句。