请在下面找到我的功能:
CREATE OR REPLACE FUNCTION TESTER_TESTING ( P_STRING IN VARCHAR2)
RETURN NUMBER IS
BEGIN
Dbms_Output.Put_Line('P_STRING:'||P_STRING);
return 1;
END TESTER_TESTING;
/
当我使用 sqlplus 执行时:
DECLARE
RetVal NUMBER;
P_STRING VARCHAR2(32767);
BEGIN
P_STRING := '006µ-540';
RetVal := VISION.TESTER_TESTING ( P_STRING );
DBMS_OUTPUT.Put_Line('RetVal = ' || TO_CHAR(RetVal));
DBMS_OUTPUT.Put_Line('');
COMMIT;
END;
/
输出为: P_STRING:006??-540 保留值 = 1
请告知为什么特殊字符没有被传递以及如何修复它。
-Oracle Version: 11g
-Linux: RHEL 7.2
-Script executed using sqlplus.
最佳答案
SQL*Plus 从命令行继承字符编码。您可以通过chcp
进行询问。
在启动 sqlplus 之前,您必须相应地设置 NLS_LANG
参数,例如
C:\>chcp
Active code page: 850
C:\>SET NLS_LANG=.WE8PC850
C:\>sqlplus ...
当然,反之亦然,例如
C:\>echo %NLS_LANG%
NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252
C:\>chcp 1252
Active code page: 1252
C:\>sqlplus ...
NLS_LANG
也可以在注册表中设置,请分别参阅 HKLM\SOFTWARE\ORACLE\KEY_%ORACLE_HOME_NAME%\NLS_LANG
(对于 64 位)。 HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_%ORACLE_HOME_NAME%\NLS_LANG
(适用于 64 位 Windows 上的 32 位 Oracle)。
查看这篇文章以了解更多详细信息:OdbcConnection returning Chinese Characters as "?"
我才知道,你用的是Linux,不是Windows。使用 locale charmap
或 echo $LANG
而不是 chcp
来获取终端的字符集。
关于oracle - 未传递输入参数中的 PLSQL 特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44278790/