gpt4 book ai didi

SQLPlus 命令行脚本在插入记录时挂起

转载 作者:行者123 更新时间:2023-12-02 07:13:15 27 4
gpt4 key购买 nike

在 windows 上使用 sqlplus 11g 在 11g 数据库上运行 sql 脚本。如果插入行留在脚本中,则 Sqlplus 会挂起。如果我注释掉插入行,脚本会返回记录。

在 sql developer 中运行时,脚本执行时间 < 1 秒。

我试图使插入语句成为一条具有相同结果的连续行。

使用 echo on,它会在 sql 最后一行之后挂起(...为空;)并显示新行开始,永远不会处理提交。我假设我的插入语句语法不正确,无法在 sqlplus 中运行

命令行调用:

sqlplus e_fraud/e_fraud@eftst2 @"C:\temp\Actimize_ETL\Versions\03\sql\merge2000_insert_new_bank_keys.sql"

sql脚本:

--insert into e_fraud.bank 
select stg.bank_key bank_key, stg.bank_key bank_name from
(
select distinct account_bank bank_key
from e_fraud.rgbk_stg_account
where account_bank is not null
or account_bank != ''
UNION
select distinct bank_key
from e_fraud.rgbk_stg_branch
where bank_key is not null
or bank_key != ''
) stg
left outer join e_fraud.bank b
on stg.bank_key = b.bank_key
where b.bank_key is null;

commit;

exit;

最佳答案

如果语法错误,它会告诉你,而不是挂起。

不清楚您是在从 SQL*Plus 尝试之前还是之后在 SQL Developer 中成功运行它。我的猜测是您首先在那里运行插入,并且没有提交或回滚该事务,从而导致锁定 - 表明其中一个 e_fraud 列可能存在唯一约束。或者不太可能,您已经在一个 session 中插入并提交,但随后在另一个 session 中您在重新运行之前删除了记录但提交。

您的 SQL*Plus session 正在等待某个其他事务以任何一种方式完成,因此它可以执行插入或报告约束违规,但目前处于不确定状态。确保您已在打开的每个 session 中提交或回滚。如有必要,有一些方法可以检查锁。

顺便说一句,由于 Oracle 将 null 和空字符串视为相同,因此您不需要任何 != '' 子句。

关于SQLPlus 命令行脚本在插入记录时挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3591277/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com