我通过以下命令将sql文件传递给sqlplus:
sqlplus -s user/pass@//10.8.249.22:1521/homhyp @E:\PQS\Integracao_14\LDCSVDP\regiao\BIN\merge_tables.sql
但是它被卡住了,似乎什么也没做。
我的sql文件的内容是:
MERGE INTO TB_DP_REGIAO B
USING TMP_DP_REGIAO P
ON (P.DS_PROTHEUS_CODE = B.DS_PROTHEUS_CODE)
WHEN MATCHED THEN UPDATE SET B.DS_PLANNING_CODE = CASE WHEN B.DT_LOAD < P.DT_LOAD THEN
P.DS_PLANNING_CODE ELSE B.DS_PLANNING_CODE END,
B.DT_LOAD = CASE WHEN B.DT_LOAD < P.DT_LOAD THEN P.DT_LOAD
ELSE B.DT_LOAD END
WHEN NOT MATCHED THEN INSERT(DS_PROTHEUS_CODE, DS_PLANNING_CODE, DT_LOAD) VALUES
(P.DS_PROTHEUS_CODE, P.DS_PLANNING_CODE, P.DT_LOAD)
/
EXIT
从BAT文件中调用sqlplus,直到我按Ctrl+C
才会显示任何内容。它只显示:
E:\PQS\Integracao_14\LDCSVDP\regiao\BIN>sqlplus user/pass@// 10.8.249.22:1521/homhyp @E:\PQS\Integracao_14\LDCSVDP\regiao\BIN\merge_tables.sq l
SQL*Plus: Release 12.1.0.1.0 Production on Thu Feb 20 13:34:15 2014
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options
有人可以帮助我吗?
提前致谢!
答案 0 :(得分:3)
在sql语句后添加exit
。
我认为该陈述完成了应该做的事情。然后等待输入更多语句。由于您使用-s
启动了SQL * Plus,因此您将不会注意到。
答案 1 :(得分:1)
我现在对你实际运行的内容感到困惑。您的merge_tables.sql
脚本应包含:
MERGE INTO TB_DP_REGIAO B
USING TMP_DP_REGIAO P
ON (P.DS_PROTHEUS_CODE = B.DS_PROTHEUS_CODE)
WHEN MATCHED THEN UPDATE
SET B.DS_PLANNING_CODE = CASE WHEN B.DT_LOAD < P.DT_LOAD
THEN P.DS_PLANNING_CODE ELSE B.DS_PLANNING_CODE END,
B.DT_LOAD = CASE WHEN B.DT_LOAD < P.DT_LOAD
THEN P.DT_LOAD ELSE B.DT_LOAD END
WHEN NOT MATCHED THEN INSERT (DS_PROTHEUS_CODE, DS_PLANNING_CODE, DT_LOAD)
VALUES (P.DS_PROTHEUS_CODE, P.DS_PLANNING_CODE, P.DT_LOAD);
EXIT
或者:
MERGE INTO TB_DP_REGIAO B
USING TMP_DP_REGIAO P
ON (P.DS_PROTHEUS_CODE = B.DS_PROTHEUS_CODE)
WHEN MATCHED THEN UPDATE
SET B.DS_PLANNING_CODE = CASE WHEN B.DT_LOAD < P.DT_LOAD
THEN P.DS_PLANNING_CODE ELSE B.DS_PLANNING_CODE END,
B.DT_LOAD = CASE WHEN B.DT_LOAD < P.DT_LOAD
THEN P.DT_LOAD ELSE B.DT_LOAD END
WHEN NOT MATCHED THEN INSERT (DS_PROTHEUS_CODE, DS_PLANNING_CODE, DT_LOAD)
VALUES (P.DS_PROTHEUS_CODE, P.DS_PLANNING_CODE, P.DT_LOAD)
/
EXIT
您需要在命令末尾使用语句分隔符(;
),或者在下一行中使用/
(但不是两者都行,或者它将执行两次)。然后René说你需要在最后退出脚本。
如果对要合并的表TB_DP_REGIAO
进行了未提交的更改,那么合并本身可能会在等待释放锁时挂起 - 这将在提交或滚动其他更改时发生回来了,但是这次合并会无限期地等待。你不会看到错误,它只是什么都不做,如果你有命令执行(通过;
或/
)和{{1},这似乎就是这里发生的事情}}