DBMS_OUTPUT内置包用于向消息缓冲区发送消息,或者从消息缓冲区获取消息。
DBMS_OUTPUT子程序总览
子程序 | 说明 |
ENABLE Procedure | 启用消息输出。 |
DISABLE Procedure | 禁用消息输出。 |
PUT Procedure | 输入消息至缓冲区。 |
PUT_LINE Procedure | 输出缓冲区中消息。 |
NEW_LINE Procedure | 输入换行符至缓冲区。 |
GET_LINE Procedure | 从缓冲区中获取一行消息。 |
GET_LINES Procedure | 从缓冲区中获取所有行数组。 |
SERVEROUTPUT参数控制消息的输出或输入。
SET SERVEROUTPUT = ON
:将消息输出到标准输出中。( PolarDB默认为ON )。SET SERVEROUTPUT = OFF
:将把消息输入到缓冲区中。
ENABLE Procedure
该存储过程用于允许PUT、PUT_LINE、NEW_LINE和GET_LINE存储过程的调用。
语法
DBMS_OUTPUT.ENABLE(buffer_size IN INTEGER DEFAULT 20000);
参数说明
参数 | 说明 |
buffer_size | (可选参数)消息缓冲区的最大长度。以字节为单位,默认值 20000。 |
示例
该示例展示了如何通过DBMS_OUTPUT.ENABLE允许消息输出存储过程调用的功能。
-- Hello, PolarDB!
BEGIN
DBMS_OUTPUT.ENABLE;
SET SERVEROUTPUT = ON;
DBMS_OUTPUT.PUT_LINE('Hello, PolarDB!');
END;
在SERVEROUTPUT开启时,无需调用DBMS_OUTPUT.ENABLE( )
开启对PUT、PUT_LINE、NEW_LINE和GET_LINE存储过程的调用。
DISABLE Procedure
该存储过程用于清空缓冲区,禁用消息输出。可以通过ENABLE或SERVEROUTPUT参数设置重新启用。
语法
DBMS_OUTPUT.DISABLE();
示例
该示例展示了如何禁用消息输出。
-- NULL
BEGIN
SET SERVEROUTPUT = OFF;
DBMS_OUTPUT.DISABLE;
DBMS_OUTPUT.PUT_LINE('Hello, PolarDB!');
END;
PUT Procedure
该存储过程用于输入消息至缓冲区。
语法
DBMS_OUTPUT.PUT (item IN VARCHAR2);
参数说明
参数 | 说明 |
item | 待输入到缓冲区的消息。 |
示例
该示例展示了如何输入部分行消息到缓冲区。
-- Hello, PolarDB!
BEGIN
DBMS_OUTPUT.PUT('Hello, ');
DBMS_OUTPUT.PUT('PolarDB!');
DBMS_OUTPUT.NEW_LINE;
END;
PUT_LINE Procedure
该存储过程用于输出缓冲区中的消息。
语法
DBMS_OUTPUT.PUT_LINE(item IN VARCHAR2);
参数说明
参数 | 说明 |
item | 待输出的消息。 |
示例
该示例展示了如何输出缓冲区的行消息。
-- Hello, PolarDB!
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello, PolarDB!');
END;
NEW_LINE Procedure
该存储过程用于向缓冲区中写入一个“换行符”。
语法
DBMS_OUTPUT.NEW_LINE();
示例
该示例展示了如何向缓冲区中写入一个“换行符”。
-- Hello, PolarDB!
BEGIN
DBMS_OUTPUT.PUT('Hello, PolarDB!');
DBMS_OUTPUT.NEW_LINE;
END;
GET_LINE Procedure
该存储过程用于从缓冲区中检索一行消息。
语法
DBMS_OUTPUT.GET_LINE (line OUT VARCHAR2,
status OUT INTEGER);
参数说明
参数 | 说明 |
line | 用于从消息缓冲区接收文本行的变量。 |
status | 如果从消息缓冲区返回一行文本,返回0。如果没有文本返回,返回1。 |
示例
该示例展示了如何获取缓冲区中的数据到变量中。
DECLARE
line VARCHAR2;
status INTEGER;
BEGIN
line := '';
set SERVEROUTPUT = OFF;
DBMS_OUTPUT.PUT_LINE('Hello, PolarDB!');
set SERVEROUTPUT = ON;
DBMS_OUTPUT.GET_LINE(line, status);
-- line: Hello, PolarDB! status: 0
DBMS_OUTPUT.PUT_LINE(line || ' ' ||status);
DBMS_OUTPUT.GET_LINE(line, status);
-- status is 1
DBMS_OUTPUT.PUT_LINE(line || ' ' ||status);
END;
GET_LINES Procedure
该存储过程用于从缓冲区中检索行数组。
语法
DBMS_OUTPUT.GET_LINE (lines OUT VARCHAR2[],
numlines INOUT INTEGER);
参数说明
参数 | 说明 |
lines | 用于从消息缓冲区接收文本行的数组。 |
numlines | IN参数表示希望从缓冲区中接收的文本行的数量。 OUT参数返回实际读取到的文本行的数量。 |
示例
该示例展示了如何从缓冲区中检索行数组。
DECLARE
lines VARCHAR2[];
numline INTEGER;
item VARCHAR2;
BEGIN
numline := 3;
SET SERVEROUTPUT = OFF;
DBMS_OUTPUT.PUT_LINE('Hello');
DBMS_OUTPUT.PUT_LINE('PolarDB');
SET SERVEROUTPUT = ON;
DBMS_OUTPUT.GET_LINES(lines, numline);
-- Hello
-- PolarDB
-- Total lines: 2
FOREACH item in ARRAY lines LOOP
DBMS_OUTPUT.PUT_LINE(item);
END LOOP;
DBMS_OUTPUT.PUT_LINE('Total lines:' || numline);
END;