DBMS_OUTPUT

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;