查询未在 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 中运行的主要内容,如果未能解决你的问题,请参考以下文章

多个查询未在 FMDB 中运行

如何在 SQL Plus/SQL-PL 中使用迭代或作为函数运行查询?

SQL Plus 与 Toad IDE - 在 SQL Plus 中运行插入需要更长的时间

如何通过批处理文件连接到 SQL Plus 来运行 SQL 查询

未在 H2 数据库上执行的 Sql 查询

SQL Plus 窗口不保留所有查询和输出行