GET_LINES 过程 - 从消息缓冲区获取多行
GET_LINES 过程从消息缓冲区获取一行或多行文本并将该文本存储在集合中。该文本的每行必须以行结束字符序列终止。
提示: 要将行结束字符序列添加至消息缓冲区,请使用 PUT_LINE
过程,或者在对 PUT 过程进行一系列调用后使用 NEW_LINE 过程。
语法
过程参数
- 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.
