Oracle处理超过32767字符输出的解决方案咨询
解决PL/SQL中CLOB内容通过DBMS_OUTPUT输出的问题
DBMS_OUTPUT.PUT_LINE单条输出最多支持32767字节的内容,直接输出大CLOB会触发报错。要查看超过32767字符的输出,得把CLOB拆分成小段逐段输出,具体实现如下:
1. 先创建一个分段输出CLOB的存储过程
这个过程会自动把CLOB按最大允许长度拆分,逐段调用DBMS_OUTPUT.PUT_LINE输出:
CREATE OR REPLACE PROCEDURE print_clob(p_clob IN CLOB) IS v_offset NUMBER := 1; v_chunk_len NUMBER := 32767; -- DBMS_OUTPUT支持的单段最大长度 v_chunk VARCHAR2(32767); BEGIN IF p_clob IS NULL THEN RETURN; END IF; WHILE v_offset <= DBMS_LOB.GETLENGTH(p_clob) LOOP v_chunk := DBMS_LOB.SUBSTR(p_clob, v_chunk_len, v_offset); DBMS_OUTPUT.PUT_LINE(v_chunk); v_offset := v_offset + v_chunk_len; END LOOP; END print_clob; /
2. 修改你的原代码
把输出变量改成CLOB类型,调用上面的过程输出内容:
DECLARE v_output CLOB; BEGIN v_output := shell('ls -ltr /opt/ibm/'); print_clob(v_output); END; /
注意事项
- 如果你的
shell函数原本返回VARCHAR2类型,得先把它的返回值改成CLOB,否则函数本身会先因为输出超长报错,没法把结果传给CLOB变量。 - 要是用的是UTF8这类多字节字符集,建议把
v_chunk_len调小(比如设为32000),避免单段内容的字节数超过DBMS_OUTPUT的限制。
内容的提问来源于stack exchange,提问作者Amir
相关产品推荐
相关产品推荐

