查询未在 SQL*Plus 中运行
Posted
技术标签:
【中文标题】查询未在 SQL*Plus 中运行【英文标题】:Query not running in SQL*Plus 【发布时间】:2013-10-02 21:19:02 【问题描述】:我有以下代码在 SQL Developer 中运行良好,并且在总运行时间的 1 分钟内完成:
SET TERM ON
SET ECHO ON
DECLARE
max_date date;
max_id number;
BEGIN
select max(LOG_ID) into max_id from RUN_LOG;
select max(TRAN_DT) into max_date from DATA_TX;
insert into RUN_LOG
values(
max_id + 1 /* Log ID */
,1 /* Chain ID */
,1 /* Job ID */
,sysdate /* Start Time-stamp */
,sysdate /* End Time-stamp */
,1 /* Run Result */
,max_date /* Processing Date */
);
COMMIT;
END;
/
当我将它放入 .SQL 文件并在 SQL*Plus 中执行时,它永远不会完成。
批量调用如下:
sqlplus user/password@database @set_date.sql
我在这里错过了什么?
谢谢,
【问题讨论】:
您是否使用LF
字符终止了SQL 文件的最后一行?
你能用sql plus交互运行吗?
您似乎没有-s
标志,但您可能有set feedback off
login.sql
?或者您只是在等待它返回命令提示符 - 如果文件中没有 exit
,这将不会发生。您可能在 SQL Developer 中有未提交的插入吗? (这是您不使用序列作为日志 ID 的原因吗?)
您需要确定会话正在等待什么。也许它正在等待锁。顺便说一句,由于并发性,查询 MAX(ID) 以设置唯一列很可能是个坏主意。
【参考方案1】:
我的 Oracle 会话中出现某种错误,导致我的 .sql 无法将控制权返回给我的 .bat 文件
反正我也修改了调用如下:
退出 | sqlplus -S 用户/密码@数据库@set_date.sql
现在一切都很好。
【讨论】:
以上是关于查询未在 SQL*Plus 中运行的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL Plus/SQL-PL 中使用迭代或作为函数运行查询?
SQL Plus 与 Toad IDE - 在 SQL Plus 中运行插入需要更长的时间