【问题标题】:sqlplus print running statementsqlplus 打印运行语句
【发布时间】:2013-05-04 04:27:36
【问题描述】:

有没有办法让 sqlplus 打印它执行的语句。 我的意思是我有一些在 bash 脚本中运行的 .sql 文件。当我读取日志文件时,我需要知道 sqlplus 运行了哪个语句。

示例: 假设我有这个 test.sql 文件:

set timing on
create table foo (a varchar2(10));
create table bar (b varchar2(10));
exit

当我检查日志时,我得到了这个:

Table created.

Elapsed: 00:00:00.02

Table created.

Elapsed: 00:00:00.01

这不是信息。有没有办法让我得到这样的输出:

Table foo created.

Elapsed: 00:00:00.02

Table bar created.

Elapsed: 00:00:00.01

甚至像这样:

create table foo (a varchar2(10));

Table created.

Elapsed: 00:00:00.02

create table bar (b varchar2(10));

Table created.

Elapsed: 00:00:00.01

我知道我可以在每个语句之前使用 PROMPT,但是我有很大的 sql 脚本,并且在每个语句之前编写 PROMPT 会很乏味。

编辑:

为了让 Allan 的解决方案始终有效(即使用“set echo on”),您应该避免以下情况:

1) 不要在 sqlplus 中使用 -S 选项,因为这会抑制命令回显的显示。

2) 不要像这样将你的脚本“猫”到 sqlplus:

cat test.sql | sqlplus scott/tiger@orcl

【问题讨论】:

    标签: oracle sqlplus


    【解决方案1】:

    如果您需要知道对象的确切创建时间,您可以查询 DBA_OBJECTS 或 ALL_OBJECTS 的 CREATED 列。

    【讨论】:

      【解决方案2】:

      您要查找的命令是SET ECHO ON,它将重复发出的每个语句。

      【讨论】:

      • 谢谢。这通过避免两件事起作用。请参阅我更新的问题。
      • 这在运行@script.sql 时不起作用。在这种情况下,脚本中的命令会得到回显,但原始命令 (@script.sql) 不会得到回显。出于可追溯性的目的,我确实需要记录用户命令。
      • (但在所有其他情况下,set echo on 效果很好)
      • 这仍然不适用于我的此处文档。像cat 这样有问题吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-07
      • 2018-02-09
      相关资源
      最近更新 更多