包规范中的NVARCHAR2常量

时间:2014-12-20 06:34:38

标签: oracle plsql

我尝试使用nvarchar2数据类型在包规范中添加常量,但在编译之后,它会在数据库中存储类似???的内容。例如,我尝试为亚美尼亚词մեկ

添加常量
x constant nvarchar2(3) default 'մեկ';

有人可以建议解决这个问题,或者不可能这样做吗?

1 个答案:

答案 0 :(得分:0)

我已经在两个具有不同NLS_CHARACTERSET配置的不同数据库上测试了您的示例。

配置(通过查询获取 -

select * 
 from v$nls_parameters 
 where parameter in ('NLS_NCHAR_CHARACTERSET','NLS_CHARACTERSET','NLS_LANGUAGE')

):

首先:

+----+------------------------+----------+
| id |        PARAMETER       |  VALUE   |
+----+------------------------+----------+
| 1  | NLS_LANGUAGE           | AMERICAN | 
| 2  | NLS_CHARACTERSET       | AL32UTF8 | 
| 3  | NLS_NCHAR_CHARACTERSET | AL16UTF16| 
+----+------------------------+----------+

第二

+----+------------------------+-------------+
| id |        PARAMETER       |    VALUE    |
+----+------------------------+-------------+
| 1  | NLS_LANGUAGE           | RUSSIAN     | 
| 2  | NLS_CHARACTERSET       | CL8MSWIN1251| 
| 3  | NLS_NCHAR_CHARACTERSET | AL16UTF16   | 
+----+------------------------+-------------+

结果如下,在带有charset AL32UTF8变量的数据库上正确显示,在CL8MSWIN1251字符集上有问题' ???'。

我没有改变数据库上的资金来验证我的建议。因此,我建议您将NLS_CHARACTERSET更改为AL32UTF8它应该有所帮助。

我的测试包:

create or replace package question27577711 is
  x constant nvarchar2(3) default 'մեկ';
  function get_constant_x return nvarchar2;
end question27577711;

create or replace package body question27577711 is
  function get_constant_x
  return nvarchar2
  is
  begin
   return x;
  end get_constant_x;
end question27577711;

select question27577711.get_constant_x from dual