如何跳过打印 SQL 脚本但仍显示 DBMS 值?

Posted

技术标签:

【中文标题】如何跳过打印 SQL 脚本但仍显示 DBMS 值?【英文标题】:How can I skip printing an SQL script but still show the DBMS values? 【发布时间】:2019-09-24 04:00:09 【问题描述】:

我正在开发一个代码,并希望在结果中只看到实际值,而不是我执行的脚本。

所以我正在尝试开发一个“表格行计数器”并且我已经相当成功了,但是当我只需要它的结果时,我仍然可以获得完整的执行脚本。

比方说,我的代码是:

DECLARE
VAR_1 NUMBER := 0;

BEGIN
    SELECT IMITM INTO VAR_1 FROM PRODDTA.F4101 WHERE ROWNUM <= 1;
    DBMS_OUTPUT.PUT_LINE('DUMMY TEST 1' || VAR_1);
    DBMS_OUTPUT.PUT_LINE('DUMMY TEST 2');

END;
/

好吧,点击 F5 我会看到:

DUMMY TEST 150041087
DUMMY TEST 2
 PL/SQL procedure successfully completed.

在完整的代码中,它仅读取大约 200 行代码,所以...

如何只获取输出行,在这种情况下,删除“PL/SQL 过程...”图例?

我尝试过关闭“SET FEED”和“SET TERM”,但没有成功。

【问题讨论】:

在 SQL*Plus 中没有 F5 或单击。你确定这不是 PL/SQL Developer 或 TOAD 或其他什么?如果是 SQL*Plus,你的echo 设置是什么? 我确实做到了。将发布我所做的。 您是否关闭了回声?通常,当您运行脚本时不会打印脚本本身,echo on 是唯一可以执行此操作的设置。另外,我仍然很想知道您使用的是什么工具。 我不知道为什么,但我会在我的结果之前得到脚本。验证关闭删除它并让我只使用 DBMS 输出。 【参考方案1】:

根据Oracle documentation:

SET FEEDBACK OFF 还会关闭对帐单确认消息 例如“表已创建”和“PL/SQL 过程已成功完成” 在成功的 SQL 或 PL/SQL 语句之后显示。

您需要使用SET FEEDBACK OFF,如下:

SQL> SET SERVEROUT ON
SQL> SET FEEDBACK OFF
SQL> DECLARE
  2      VAR_1   NUMBER := 0;
  3  BEGIN
  4      SELECT
  5          1
  6      INTO VAR_1
  7      FROM
  8          DUAL
  9      WHERE
 10          ROWNUM <= 1;
 11
 12      DBMS_OUTPUT.PUT_LINE('DUMMY TEST 1' || VAR_1);
 13      DBMS_OUTPUT.PUT_LINE('DUMMY TEST 2');
 14  END;
 15  /
DUMMY TEST 11
DUMMY TEST 2
SQL>
SQL>

干杯!!

【讨论】:

嗨,不确定这是否解决。我正在使用第一个 SET SERVEROUT ON;然后设置反馈关闭; & 我仍然得到完整的 SQL 脚本参考,而不仅仅是我的 DBMS 输出。但是,它确实删除了“PL/SQL”语句。 您知道是否可以删除(例如在查询的输出中)执行的 SQL 和命令,以便仅获取 DBMS? 顺便说一句,我的工具是 Toad for Oracle v 11.~. 所以这一直是蟾蜍的问题?它被标记为 SQL*Plus,而不是 Toad。【参考方案2】:

我实际上是通过探索 SET 命令来做到这一点的。

对于 SQL 脚本“acknolwedgement”,我们可以使用以下命令跳过它:

要在实际执行之前禁用 SQL 和变量验证,请使用:

SET VERIFY OFF

要禁用执行后注释,正如 Tejash 已经指出的那样,使用:

SET FEEDBACK OFF

所以我的序幕最终是:

SET SERVERTOUTPUT ON;
SET VERIFY OFF;
SET FEEDBACK OFF;

非常感谢您的回答和cmets。

【讨论】:

在你的问题中你说你得到了“完整的执行脚本”。从这个答案听起来你没有。 是的,在验证关闭之前,我会在实际执行之前显示完整执行的脚本,而它们唯一需要的输出是实际的 DBMS 消息。 脚本都是一行吗? verify 只影响包含替换变量的行。 不,脚本有好几行。

以上是关于如何跳过打印 SQL 脚本但仍显示 DBMS 值?的主要内容,如果未能解决你的问题,请参考以下文章

如何跳过sql查询中的前n行

如何从sql中跳过一行?

为啥在PL/Sql程序运行时打印新旧值。?

如果不与其他表共享 ID,如何从 SQL 中跳过值

PL_SQL学习

如何让 cURL 不显示进度条但仍提供统计信息?