oracle - 未传递输入参数中的 PLSQL 特殊字符

标签 oracle plsql oracle11g sqlplus

请在下面找到我的功能:

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

Output

请告知为什么特殊字符没有被传递以及如何修复它。

-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 charmapecho $LANG 而不是 chcp 来获取终端的字符集。

关于oracle - 未传递输入参数中的 PLSQL 特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44278790/

相关文章:

sql - 选择最近的行,优化 (Oracle SQL)

xml - 如何解析Oracle CLOB XML数据获取节点值?

sql - Oracle:在包和过程中设置 session 参数

oracle11g - oracle 11g 如何确定表空间的大小

c# - C# 中 Oracle 依赖项的更改通知

oracle - 如何在 oracle 11g 中从 SELECT 语句创建表

linux - 如何在 Linux 中查找 Oracle Forms 编译器的版本

sql - 使用 LIKE (SQL) 连接表

Oracle Spatial(定位器)- 查找一定距离/半径内的多边形

java - 如何从java后端在oracle数据库中使用事务?