如何跳过打印 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 值?的主要内容,如果未能解决你的问题,请参考以下文章