GET_LINES 过程 - 从消息缓冲区获取多行

GET_LINES 过程从消息缓冲区获取一行或多行文本并将该文本存储在集合中。该文本的每行必须以行结束字符序列终止。

提示: 要将行结束字符序列添加至消息缓冲区,请使用 PUT_LINE 过程,或者在对 PUT 过程进行一系列调用后使用 NEW_LINE 过程。

语法

阅读语法图跳过直观语法图DBMS_OUTPUT.GET_LINES (lines,numlines)

过程参数

lines
类型为 DBMS_OUTPUT.CHARARR 的输出自变量,用于从消息缓冲区返回文本行。类型 DBMS_OUTPUT.CHARARR 在内部定义为 VARCHAR(32672) ARRAY[2147483647] 数组。
numlines
类型为 INTEGER 的输入和输出自变量。用作输入时,指定要从消息缓冲区检索的行数。用作输出时,指示从消息缓冲区检索到的实际行数。如果 numlines 的输出值小于输入值,那么消息缓冲区中没有其他行。

权限

对 DBMS_OUTPUT 模块的 EXECUTE 特权。

示例

使用 GET_LINES 过程从消息缓冲区获取文本行并将该文本存储在数组中。数组中的文本可插入到表中并可供查询。

CALL DBMS_OUTPUT.ENABLE( NULL )@

CREATE PROCEDURE proc1()
BEGIN
  CALL DBMS_OUTPUT.PUT_LINE( 'PROC1 put this line in the message buffer.' );
  CALL DBMS_OUTPUT.PUT_LINE( 'PROC1 put this line in the message buffer.' );
END@

CREATE PROCEDURE proc2()
BEGIN
  CALL DBMS_OUTPUT.PUT_LINE( 'PROC2 put this line in the message buffer.' );
END@

CREATE TABLE messages ( msg VARCHAR(100) )@

CREATE PROCEDURE proc3()
BEGIN
  DECLARE lines DBMS_OUTPUT.CHARARR;
  DECLARE numlines INT DEFAULT 100;
  DECLARE i INT;

  CALL DBMS_OUTPUT.GET_LINES( lines, numlines );
  SET i = 1;
  WHILE i <= numlines DO
    INSERT INTO messages VALUES ( lines[i] );
    SET i = i + 1;
  END WHILE;
END@

CALL proc1@

CALL proc3@

CALL DBMS_OUTPUT.DISABLE@

CALL proc2@

CALL proc3@

SELECT * FROM messages@
此示例生成以下输出:
MSG                                       
------------------------------------------
PROC1 put this line in the message buffer.  
PROC1 put this line in the message buffer 

  2 record(s) selected.