2014-12-20 11 views
5

Ich versuche, eine Konstante in Paketspezifikation mit nvarchar2 Datentyp hinzufügen, aber nach der Kompilierung speichert es in der Datenbank etwas wie ???. Zum Beispiel versuche ich eine Konstante für armenisch Wort մեկNVARCHAR2 Konstanten in Paketspezifikation

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

jemand eine Lösung für dieses Problem kann hinzufügen vorschlagen oder ist es unmöglich, dies zu tun?

+2

Was die Datenbank-Zeichensatz und den nationalen Zeichensatz ist? –

+1

mögliches Duplikat von [Wie vermeidet man, dass man sich bei der Kompilierung in plsql an S wendet?] (Http://stackoverflow.com/questions/27519203/how-to-avoid-%ce%a3-turning-to-s-when -we-compile-in-plsql) – user272735

+0

@JustinCave nls_characterset = WE8MSWIN1252 und nls_nchar_characterset = AL16UTF16 – arminrock

Antwort

0

Ich habe Sie Beispiel auf zwei verschiedenen Datenbanken mit verschiedenen NLS_CHARACTERSET Konfigurationen getestet.

Konfigurationen (durch Abfrage recived -

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

):

Erstens:

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

Zweitens:

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

Und das Ergebnis folgt, auf DB mit Zeichensatz AL32UTF8 Variable zeigt korrekt an, Zeichensatz CL8MSWIN1251 mit Fragen '???'.

Ich habe Charsests in Datenbanken nicht geändert, um meinen Vorschlag zu validieren. Also schlage ich vor, Sie ändern NLS_CHARACTERSET zu AL32UTF8 es sollte helfen.

Mein Paket für Tests:

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