我尝试使用nvarchar2
数据类型在包规范中添加一个常量,但在编译之后它会在数据库中存储类似的东西???
.例如,我尝试为亚美尼亚语单词添加常量???
x constant nvarchar2(3) default '???';
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议解决这个问题或者不可能这样做吗?
我已经在具有不同配置的两个不同数据库上测试了您的示例NLS_CHARACTERSET
。
配置(通过查询接收 -
\n\nselect * \n from v$nls_parameters \n where parameter in ('NLS_NCHAR_CHARACTERSET','NLS_CHARACTERSET','NLS_LANGUAGE')\n
Run Code Online (Sandbox Code Playgroud)\n\n):
\n\n第一的:
\n\n+----+------------------------+----------+\n| id | PARAMETER | VALUE |\n+----+------------------------+----------+\n| 1 | NLS_LANGUAGE | AMERICAN | \n| 2 | NLS_CHARACTERSET | AL32UTF8 | \n| 3 | NLS_NCHAR_CHARACTERSET | AL16UTF16| \n+----+------------------------+----------+\n
Run Code Online (Sandbox Code Playgroud)\n\n第二:
\n\n+----+------------------------+-------------+\n| id | PARAMETER | VALUE |\n+----+------------------------+-------------+\n| 1 | NLS_LANGUAGE | RUSSIAN | \n| 2 | NLS_CHARACTERSET | CL8MSWIN1251| \n| 3 | NLS_NCHAR_CHARACTERSET | AL16UTF16 | \n+----+------------------------+-------------+\n
Run Code Online (Sandbox Code Playgroud)\n\n结果如下,在带有字符集AL32UTF8
变量的数据库上正确显示,在CL8MSWIN1251
带有问题“???”的字符集上。
我没有更改数据库的字符来验证我的建议。所以我建议你改NLS_CHARACTERSET
一下AL32UTF8
它应该会有帮助。
我的测试包:
\n\ncreate or replace package question27577711 is\n x constant nvarchar2(3) default '\xd5\xb4\xd5\xa5\xd5\xaf';\n function get_constant_x return nvarchar2;\nend question27577711;\n\ncreate or replace package body question27577711 is\n function get_constant_x\n return nvarchar2\n is\n begin\n return x;\n end get_constant_x;\nend question27577711;\n\nselect question27577711.get_constant_x from dual\n
Run Code Online (Sandbox Code Playgroud)\n