在本指南中,您将了解 Oracle 中的 DBMS_OUTPUT.PUT_LINE 函数的作用,查看一些示例,了解如何在不同的编辑器中启用它,并了解为什么不应在生产代码中使用它。
让我们来看看。
什么是 DBMS_OUTPUT?
DBMS_OUTPUT 是 Oracle 数据库中的一个包。包是包含代码的对象,例如函数和过程。DBMS_OUTPUT 包包含让您在代码中发送和显示消息的代码。
什么是 DBMS_OUTPUT.PUT_LINE?
根据我的经验,DBMS_OUTPUT 包中的 PUT_LINE 函数是使用最广泛的函数之一。
此功能允许您将消息写入屏幕。
它通过将您指定的文本放置到缓冲区来工作。当过程完成时,该缓冲区将写入 IDE 或程序中的屏幕。
它通常用于在PL/SQL 程序中的某些点调试或显示消息。
在调用 PL/SQL 程序完成之前,不会发送 PUT_LINE 函数写入的消息。在运行代码时,无法提前编写它们或“刷新缓冲区”。
什么是限制?
PUT_LINE 函数的最大行大小为 32,767 字节。如果超过此值,您将收到 ORA-20000 和 ORU-10028 错误。
缓冲区的最大大小没有限制,但默认为 20,000 字节,最小为 2,000 字节。它可以在数据库中更改。如果文本对于缓冲区来说太大,您将收到 ORA-20000 错误和 ORU-10027 错误。
示例 – 匿名块
让我们看一个 DBMS_OUTPUT.PUT_LINE 函数的示例。
以下是如何在简单的匿名代码块中使用 PUT_LINE 函数。
BEGIN DBMS_OUTPUT.PUT_LINE('Hello');END;
运行此代码时,您将在 IDE 中看到以下输出:
Hello
这是一个简单的语句,但显示了如何编写消息。
IDE 不显示 PUT_LINE 输出?
您是否正在运行 SQL*Plus、SQL Developer 或其他 IDE,但没有看到任何输出?
默认情况下,许多 IDE 不显示输出。
要查看 SQL*Plus 中的输出,您需要先启用 SERVEROUTPUT。为此,您可以在代码开头添加 SET SERVEROUTPUT ON。
这是使用您的代码启用它的示例。
SET SERVEROUTPUT ON;BEGIN DBMS_OUTPUT.PUT_LINE('Hello');END;
这将在 SQL*Plus 中显示该消息。
要在 SQL Developer 中启用输出,您需要:
-
通过转到查看 > DBMS 输出显示 DBMS_OUTPUT 面板
-
为当前连接添加选项卡
-
运行你的代码
我已经在本指南中解释了这些步骤以及屏幕截图。
示例 – 存储过程
如果您想在存储过程或函数中使用 PUT_LINE,那么您的代码可能如下所示。
此过程计算两个数字的总和并将输出显示到屏幕上。
CREATE OR REPLACE PROCEDURE add_numbers(num1 NUMBER, num2 NUMBER)AS sum_number NUMBER;BEGIN sum_number := num1 + num2; DBMS_OUTPUT.PUT_LINE('The sum is ' || sum_number);END;
创建过程后,您可以运行它。
CALL add_numbers (4, 6);
此调用的输出是:
The sum is 10
这演示了如何在 PL/SQL 过程或函数中使用 DBMS_OUTPUT.PUT_LINE。
为什么你不应该在生产中使用它
此 PUT_LINE 函数有助于在代码的不同点显示值和文本。
编写代码时,在整个代码中放置一堆 PUT_LINE 调用会很有帮助,这样您就可以看到正在执行的操作或变量的值。
但是,有一些原因不应该在可能投入生产的代码中使用它。
Steven Feuerstein写了一篇很棒的文章。他的理由是:
-
除非您通过在 IDE 中设置 serveroutput on 或等效选项来启用它,否则您不会看到输出。
-
它只接受可以转换为字符串的字符串或值。
-
如果程序意外退出,则输出不会显示并丢失。
-
当代码在生产中时,无处可看到输出。
那么解决方案是什么?
Steven 建议使用不同类型的跟踪来监控您的代码。您可以使用诸如Logger之类的开源工具,也可以构建自己的包装器。
这将允许您将任何输出写入开发环境中的屏幕或生产中的表格。您还可以在不调整代码的情况下启用和禁用输出功能。
结论
DBMS_OUTPUT.PUT_LINE 函数使用简单,是编写代码时向屏幕显示消息的好方法。
有几件事需要注意,例如缓冲区限制以及如何在某些 IDE 中启用它,但这是一个非常有用的功能。
原文标题:A Guide to DBMS_OUTPUT.PUT_LINE
原文作者:Ben Brumm
原文链接:https://www.databasestar.com/dbms_output-put_line/




