oracle存储函数返回clob,如何从Oracle存储过程查看TOAD中的CLOB输出参数?

您会考虑将CLOB打印为结果集吗?然后,您可以使用PIPELINED函数(此处更多关于它们:PIPELINED functions by Tim Hall),它将逐行返回CLOB,请看下面的示例:

CREATE TABLE my_clob_tab (

id NUMBER,

clob_col CLOB

)

/

INSERT INTO my_clob_tab

VALUES (1,

to_clob('first line' || chr(10) ||

'second line, a longer one' || chr(10) ||

'third'))

/

CREATE OR REPLACE TYPE t_my_line_str AS TABLE OF VARCHAR2(2000)

/

CREATE OR REPLACE FUNCTION print_clob_func(p_id IN NUMBER)

RETURN t_my_line_str PIPELINED

AS

v_buffer VARCHAR2(32767);

v_clob CLOB;

v_len NUMBER;

v_offset NUMBER := 1;

v_line_break_pos NUMBER;

v_amount NUMBER;

BEGIN

SELECT clob_col

INTO v_clob

FROM my_clob_tab

WHERE id = p_id;

IF v_clob IS NOT NULL THEN

v_len := dbms_lob.getlength(v_clob);

WHILE v_offset < v_len

LOOP

v_line_break_pos := instr(v_clob, chr(10), v_offset);

IF v_line_break_pos = 0 THEN

v_amount := v_len - v_offset + 1;

ELSE

v_amount := v_line_break_pos - v_offset;

END IF;

dbms_lob.read(v_clob, v_amount, v_offset, v_buffer);

v_offset := v_offset + v_amount + 1;

PIPE ROW (v_buffer);

END LOOP;

END IF;

END;

/

(可以更改该功能,使其从您的程序中获取CLOB作为参数)

代码逐行读取CLOB的内容(我假设行分隔符为CHR(10) - 如果您在Windows上,则可以将其更改为CHR(10) || CHR(13))和PIPE语句的每一行SELECT。

读取clob的函数也可以通过dbms_output.put_line将输出打印到标准输出,但是它会更复杂,因为你必须考虑到标准输出的最大行长度是有限的,纠正我,如果我错了,2000个字符,但它是可行的(不幸的是现在不能尝试解决方案)。同时,请检查以上建议,如果这对您有用,请给我一些反馈。

回到解决方案,现在我们可以发出这个SELECT声明:

SELECT COLUMN_VALUE AS clob_line_by_line FROM TABLE(print_clob_func(1));

这会给我们以下输出:

CLOB_LINE_BY_LINE

-------------------------

first line

second line, a longer one

third

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值