【发布时间】:2019-04-23 02:51:39
【问题描述】:
此过程为字符串中的每个字符打印ASCII 代码。
如果在 TOAD 中执行,它会打印这些 ASCII 代码:55 48 48 32 32 32 32 32 32 32 49,它们是正确的。
如果通过UNIX 服务器上的SQLPLUS 执行并将DBMS_OUTPUT.PUT_LINE (v_String); 的输出假脱机到一个文本文件,复制该输出并将其分配给v_String 并在TOAD 中执行该过程,我得到以下@ 987654326@代码55 48 48 9 32 32 49。
为什么要用 9 代替 32 32 32 32 32。本质上是一个制表符。
CREATE OR REPLACE PROCEDURE My_Test
AS
v_String VARCHAR2 (25);
BEGIN
v_String := RPAD ('700', 10) || '1';
-- v_String:='700 1';
DBMS_OUTPUT.PUT_LINE (v_String);
DBMS_OUTPUT.PUT_LINE ('');
FOR i IN 1 .. LENGTH (v_String)
LOOP
DBMS_OUTPUT.PUT_LINE (ASCII (SUBSTR (v_String, i, 1)));
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE (SQLERRM);
END;
【问题讨论】:
-
嗯,你到底是在使用
spool命令写入文件,还是将终端输出重定向到文件?
标签: oracle unix sqlplus dbms-output