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

GET_LINE 过程从消息缓冲区获取文本行。该文本必须以行结束字符序列终止。

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

语法

阅读语法图跳过直观语法图DBMS_OUTPUT.GET_LINE (line,status)

过程参数

line
类型为 VARCHAR(32672) 的输出自变量,用于从消息缓冲区返回文本行。
status
类型为 INTEGER 的输出自变量,用于指示是否从消息缓冲区返回了行:
  • 0 指示已返回行
  • 1 指示未返回行

权限

对 DBMS_OUTPUT 模块的 EXECUTE 特权。

示例

使用 GET_LINE 过程从消息缓冲区获取文本行。在此示例中,proc1 将一行文本放到消息缓冲区中。proc3 从消息缓冲区获取文本并将其插入到表 messages 中。然后会运行 proc2,但因为已禁用消息缓冲区,所以不会向消息缓冲区添加任何文本。SELECT 语句运行时,它仅返回 proc1 添加的文本。

CALL DBMS_OUTPUT.ENABLE( NULL )@

CREATE PROCEDURE proc1()
BEGIN
  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 line VARCHAR(32672);
  DECLARE status INT;

  CALL DBMS_OUTPUT.GET_LINE( line, status );
  while status = 0 do
    INSERT INTO messages VALUES ( line );
    CALL DBMS_OUTPUT.GET_LINE( line, status );
  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.    

  1 record(s) selected.