Edit: note that the best way to handle UTF in Oracle is to create a database using the AL32UTF8 character set of the database and using regular varchar2 columns. One of the problems with using nchar columns is that the oracle cannot use indexes for regular char / varchar2 columns when arguments are sent as nchar by default.
In any case: if you cannot convert the database:
Firstly, unicode literals must have the prefix "n", for example:
select n'Language - Sprรฅk - Jฤzyk' from dual;
*) 8-bit encodings cannot process this text
Unfortunately, this is not enough.
For some reason, the default behavior for database clients is to translate all string literals into the database character set, so that the values โโwill be changed before the database sees the string.
Clients need some configuration in order to be able to insert a Unicode character in an NCHAR or NVARCHAR column:
SQL Plus on Unix
These environmentemnet variables set the unix and sqlplus environment to use UTF-8 files, as well as configure sqlplus to send string literals to unicode.
NLS_LANG=AMERICAN_AMERICA.AL32UTF8 LC_CTYPE="en_US.UTF-8" ORA_NCHAR_LITERAL_REPLACE=true
(en_US.UTF-8 for Solaris - Linux or other systems may need different lines, use locale -a to display supported locales.)
Jdbc driver
Applications that use the Orales JDBC driver must have the following system property defined for sending Unicode string literals.
-Doracle.jdbc.defaultNChar=true -Doracle.jdbc.convertNcharLiterals=true
SQL developer
Locate sqldeveloper.conf and add the following lines:
AddVMOption -Doracle.jdbc.defaultNChar=true AddVMOption -Doracle.jdbc.convertNcharLiterals=true
SQL Plus on Microsoft Windows
I have not tried if SQLplus on Microsoft Windows or Toad handles utf-8 at all. Sqlplusw.exe can do this, and the following registry settings can do the trick.
NLS_LANG=AMERICAN_AMERICA.AL32UTF8 ORA_NCHAR_LITERAL_REPLACE=true