oracle - 包规范中的 NVARCHAR2 常量

标签 oracle plsql

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

x constant nvarchar2(3) default 'մեկ';

任何人都可以提出解决这个问题的方法,或者不可能这样做?

最佳答案

我已经在两个不同的数据库上测试了你的例子 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   | 
+----+------------------------+-------------+

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

我没有更改数据库的字符集来验证我的建议。所以我建议你换 NLS_CHARACTERSETAL32UTF8它应该有帮助。

我的测试包:
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

关于oracle - 包规范中的 NVARCHAR2 常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27577711/

相关文章:

oracle - 需要帮助解释这个 sed 命令

asp.net - 即使 System.Data.OracleClient 已经过时,仍然可以使用它吗?

oracle - ORA-04091 : table xx_xx is mutating, 触发器/函数可能看不到它

sql - PLSQL 或 SSRS,如何选择将所有值都放在一个组中?

sql - plsql/cursors 处理异常并返回执行流程

sql - 无法更改密码

sql - Oracle 错误处理

oracle - 创建涉及继承的嵌套表时出错

mysql - 将 Oracle/MySQL 与 .NET Entity Framework 结合使用有什么更好的方法吗?

oracle - Oracle 中的审计