为什么dbms_output.put会切断此示例中的行

时间:2016-10-30 00:45:18

标签: sql oracle plsql

我试图一次放多行:

dbms_output.put('1   2   3   4   5   6   7   8   9 '
                 || chr(10) || 
                '1   2   3   4   5   6   7   8   9 '
                 || chr(10) || 
                '1   2   3   4   5   6 ');
dbms_output.new_line;

这是我预期的结果:

1   2   3   4   5   6   7   8   9 
1   2   3   4   5   6   7   8   9 
1   2   3   4   5   6

这就是我得到的:

1   2   3   4   5   6   7   8   9 
1   2   3   4   5   6   7   8   9 
1   2   3
4   5   6

这里发生了什么? 为什么在最后一行结尾之前有换行符?
有没有办法得到我正在寻找的结果?

只是为了让事情变得更加模糊:

dbms_output.put('1   2   3   4   5   6   7   8   9 '
                || chr (13) || chr(10) ||
                '1   2   3   4   5   6   7   8   9 '
                || chr (13) || chr(10) ||
                '1   2   3   4   5   6 ');
dbms_output.new_line;

给出这个输出:

1   2   3   4   5   6   7   8   9 
1   2   3   4   5   6   7   8   9 
1   2
3   4   5   6

Oracle版本:

--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0  Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

2 个答案:

答案 0 :(得分:0)

为什么要烦恼这个问题?只需使用In all the scanning functions, a carriage return followed immediately by a newline is treated as a plain newline (\r\n means the same as \n).

dbms_output.put_line()

答案 1 :(得分:0)

DBMS_OUTPUT.PUT_LINE的每行记录限制为32767字节,因为它接受VARCHAR2。

除此之外,它只是将VARCHAR2值存储在数组中。

客户端(例如SQL * Plus)将对DBMS_OUTPUT.GET_LINES进行后续调用,以将这些行复制到客户端的内存中。然后它将(客户端)执行某些操作以在输出中呈现这些行。对于命令行客户端,这可能涉及某些特定于OS的处理换行符(在OS平台之间不一致)。

一旦开始在字节流中粘贴其他非打印控制字符,您将限制代码的可移植性。