lon*_*day 2 sql oracle sqlplus
在Windows上使用sqlplus 11g在11g数据库上运行sql脚本.如果在脚本中留下插入行,则Sqlplus挂起.如果我注释掉插入行,脚本将返回记录.
在sql developer中运行时,脚本执行时间<1秒.
我试图使插入语句一个连续的行与相同的resutls.
使用echo on,它在sql最后一行(...为null;)之后立即挂起并显示一个新行开始,从不处理commit.我假设我的insert语句没有正确的语法在sqlplus中运行
命令行调用:
sqlplus e_fraud/e_fraud@eftst2 @"C:\temp\Actimize_ETL\Versions\03\sql\merge2000_insert_new_bank_keys.sql"
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
如果语法错误,它会告诉你,不要挂起.
目前尚不清楚是否在SQL Developer中从SQL*Plus尝试之前或之后成功运行它.我的猜测是你首先在那里运行插入,并且没有提交或回滚该事务,导致锁定 - 表明其中一个e_fraud列可能存在唯一约束.或者可能不太可能,您已在一个会话中插入并提交,但随后在另一个会话中,您在重新运行之前删除了记录但未提交.
您的SQL*Plus会话正在等待某个其他事务以任何方式完成,因此它可以执行插入或报告约束违规,但此时它处于不确定状态.确保您已在每个已打开的会话中提交或回滚.如有必要,有办法检查锁.
顺便提一下,由于Oracle对空值和空字符串进行相同处理,因此您不需要任何一个!= ''子句.