com as configurações corretas, seu script funciona com o SQL*Plus. Aqui está o que eu fiz para testar:
- (obviamente) seu banco de dados deve suportar unicode. Use NVARCHAR2 se necessário.
- Configure seu aplicativo cliente corretamente. certifique-se de que sua variável NLS_LANG esteja configurada corretamente, ela deve suportar unicode. Configurei o meu para
AMERICAN_ENGLISH.UTF8
. Embora a janela DOS do SQL*Plus não exiba todos os caracteres unicode, eles serão colocados em spool corretamente no arquivo. - (obviamente também) certifique-se de que o aplicativo que lê o arquivo em spool o abra no conjunto de caracteres correto.
Agora para o roteiro:
SQL> select * from v$nls_parameters where parameter = 'NLS_CHARACTERSET';
PARAMETER VALUE
------------------ ------
NLS_CHARACTERSET UTF8
SQL> create table street_points (data varchar2(10));
Table created
SQL> INSERT INTO street_points VALUES (chr(53401)||chr(53398));
1 row inserted
Isto irá inserir os caracteres russos ЙЖ
SQL> SPOOL STREET_POINT_THR.BQSV
SQL> SELECT * FROM STREET_POINTS;
ðÖðû
SQL> SPOOL OFF
O arquivo, aberto com um editor de texto (jEdit no meu caso) com o conjunto de caracteres correto (UTF-8) exibe os caracteres corretamente.