Oracle 过程给出不同的 ASCII 输出
Oracle procedure giving different ASCII outputs
此过程打印字符串中每个字符的 ASCII
代码。
如果在 TOAD 中执行,它会打印这些 ASCII 代码:55 48 48 32 32 32 32 32 32 32 49
这是正确的代码。
如果通过 SQLPLUS
在 UNIX
服务器上执行并将 DBMS_OUTPUT.PUT_LINE (v_String);
的输出假脱机到文本文件,复制该输出并将其分配给 v_String并在 TOAD 中执行程序,我得到以下 ASCII
代码 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;
这是 SQL*Plus 在 Unix 上的默认行为,由 its tab
setting 控制:
SET TAB {ON | OFF}
Determines how SQL*Plus formats white space in terminal output. OFF
uses spaces to format white space in the output. ON
uses the TAB
character. TAB
settings are every eight characters. The default value for TAB
is system dependent.
SQL*Plus 是 'helpfully' 在输出到终端时替换制表符。这与 PL/SQL 或 dbms_output
无关 - 你会看到同样的事情:
select '700 1' from dual;`
您看到的是前三个字符,然后是制表符而不是五个空格(最多 8 个字符),然后是最后两个空格和最后一个字符。
在您的 SQL*Plus 会话中,在开始之前设置 set tab off
。
您可能希望在脚本或登录文件中进行设置,以便始终应用。
(请注意,这仅适用于终端输出,不适用于假脱机文件;您的问题是指假脱机,但我认为您实际上必须以其他方式重定向或捕获输出。)
此过程打印字符串中每个字符的 ASCII
代码。
如果在 TOAD 中执行,它会打印这些 ASCII 代码:55 48 48 32 32 32 32 32 32 32 49
这是正确的代码。
如果通过 SQLPLUS
在 UNIX
服务器上执行并将 DBMS_OUTPUT.PUT_LINE (v_String);
的输出假脱机到文本文件,复制该输出并将其分配给 v_String并在 TOAD 中执行程序,我得到以下 ASCII
代码 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;
这是 SQL*Plus 在 Unix 上的默认行为,由 its tab
setting 控制:
SET TAB {ON | OFF}
Determines how SQL*Plus formats white space in terminal output.
OFF
uses spaces to format white space in the output.ON
uses theTAB
character.TAB
settings are every eight characters. The default value forTAB
is system dependent.
SQL*Plus 是 'helpfully' 在输出到终端时替换制表符。这与 PL/SQL 或 dbms_output
无关 - 你会看到同样的事情:
select '700 1' from dual;`
您看到的是前三个字符,然后是制表符而不是五个空格(最多 8 个字符),然后是最后两个空格和最后一个字符。
在您的 SQL*Plus 会话中,在开始之前设置 set tab off
。
您可能希望在脚本或登录文件中进行设置,以便始终应用。
(请注意,这仅适用于终端输出,不适用于假脱机文件;您的问题是指假脱机,但我认为您实际上必须以其他方式重定向或捕获输出。)