【问题标题】:Oracle command works in database but not in SQLPlusOracle 命令在数据库中有效,但在 SQLPlus 中无效
【发布时间】:2019-08-07 06:22:59
【问题描述】:

我目前正在尝试实现一个在一天结束时运行的 bash 脚本,该脚本运行一个简单的 oracle 查询。该命令在 Oracle 中运行良好,但在 .sql 文件中时它无法运行。

我尝试将所有代码放在一行中并添加分号。


批处理文件的内容(用户/密码已更改):

sqlplus username/password@database @set_changed.sql

set_changed.sql 文件内容:

UPDATE ris_web a
SET a.changed = 0
where exists
(
    select modified_date from invn_sbs b
    where b.item_sid = a.item_sid
        and b.modified_date <= sysdate-1
);
COMMIT;
END;

【问题讨论】:

  • 你在使用EXIT的时候是否得到同样的错误信息;而不是 END; ?
  • 您的批处理文件中管道| 的用途是什么?您将exit 命令的输出传递给sqlplus 的输入,所以什么也没有。这真的是你想要的吗?
  • @nebulopathy 将END; 替换为EXIT; 后,我只是看到光标在显示“已连接到:Oracle Database 12c 标准版版本 12.1.0.2.0 - 64 位生产”后闪烁
  • @aschipfl 这并不重要。我把它拿出来了。这只是我正在试验的东西。

标签: oracle batch-file sqlplus


【解决方案1】:

在 SQLPlus 中,您应该在单独的行上使用 / 来终止 SQL 语句或 PL/SQL 块,而不是使用分号,因此将文件更改为

UPDATE ris_web a
SET a.changed = 0
where exists
(
    select modified_date from invn_sbs b
    where b.item_sid = a.item_sid
        and b.modified_date <= sysdate-1
)
/

SHOW ERRORS
/

COMMIT
/

SHOW ERRORS
/

END

You might also want to have a look at this question

【讨论】:

  • 嗨@bobjarvis。谢谢您的答复。当我更改我的 set_changed.sql 文件以匹配您的响应时,它只是挂在命令行上。我已尝试尝试使用您的解决方案以使其正常工作,但我仍然无法找到任何成功。
【解决方案2】:

脚本末尾有end; 命令,但没有BEGIN

只需将END; 替换为/

【讨论】:

  • 嗨@Tejash----ORA-00980。谢谢您的答复。我尝试用/ 替换END; 并添加BEGIN,但我仍然没有设法让它工作。
  • 不,您不必添加BEGIN。只需将END 替换为/
  • 对。我在原始查询中将END 替换为/,但它仍然不起作用。
【解决方案3】:

原来的语法是正确的。 sqldeveloper 中有未提交的更改导致 .sql 文件永远无法完成运行。感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 2021-11-01
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 2019-07-30
    • 2021-07-18
    • 2013-10-14
    • 2013-01-31
    相关资源
    最近更新 更多