【问题标题】:Query not running in SQL*Plus查询未在 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) 以设置唯一列很可能是个坏主意。

标签: sql oracle plsql sqlplus


【解决方案1】:

我的 Oracle 会话中出现某种错误,导致我的 .sql 无法将控制权返回给我的 .bat 文件

反正我也修改了调用如下:

退出 | sqlplus -S 用户/密码@数据库@set_date.sql

现在一切都很好。

【讨论】:

    猜你喜欢
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 2015-01-12
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 2019-05-12
    相关资源
    最近更新 更多