2014-12-20 20 views
5

我嘗試使用nvarchar2數據類型在包規範中添加常量,但在編譯之後,它將存儲在數據庫中,如???。例如,我嘗試添加一個常數亞美尼亞字մեկ包規範中的NVARCHAR2常量

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

任何人都可以提出一個解決這個問題,或者是不可能這樣做呢?

+2

什麼是數據庫字符集和國家字符集? –

+1

[當我們在plsql中編譯時如何避免Σ轉爲S?](http://stackoverflow.com/questions/27519203/how-to-avoid-%ce%a3-turning-to-s-when -we-compile-in-plsql) – user272735

+0

@JustinCave nls_characterset = WE8MSWIN1252 and nls_nchar_characterset = AL16UTF16 – arminrock

回答

0

我測試過你在兩個不同的數據庫上使用不同的NLS_CHARACTERSET配置的例子。

配置(通過查詢recived -

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_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