2

テーブルからUnicode文字を含むファイルにデータをスプールするにはどうすればよいですか?

SQL * Plus画面から実行するSQLファイルがあり、その内容は次のとおりです。

SET ECHO OFF
SET FEEDBACK OFF
SET HEADING OFF
SET PAGESIZE 0
SPOOL STREET_POINT_THR.BQSV
SELECT GEOX||'`'||GEOY||'`'||UNICODE_DESC||'`'||ASCII_DESC 
FROM GEO.STREET_POINTS;
SPOOL OFF
4

2 に答える 2

2

適切な設定を使用すると、スクリプトはSQL*Plusで機能します。これが私がそれをテストするためにしたことです:

  • (明らかに)データベースはUnicodeをサポートしている必要があります。必要に応じてNVARCHAR2を使用します。
  • クライアントアプリケーションを正しくセットアップします。NLS_LANG変数が正しく設定されていることを確認してください。Unicodeをサポートしている必要があります。私は私のものをに設定しましたAMERICAN_ENGLISH.UTF8。SQL * PlusのDOSウィンドウにはすべてのUnicode文字が表示されるわけではありませんが、ファイルに正しくスプールされます。
  • (明らかに)スプールファイルを読み取るアプリケーションが正しい文字セットでファイルを開くことを確認してください。

スクリプトについて:

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

これにより、ロシア語の文字が挿入されますЙЖ

SQL> SPOOL STREET_POINT_THR.BQSV
SQL> SELECT * FROM STREET_POINTS;
ðÖðû
SQL> SPOOL OFF

正しい文字セット(UTF-8)を使用してテキストエディタ(私の場合はjEdit)で開いたファイルは、文字を正しく表示します。

于 2009-11-17T15:32:42.660 に答える
0

SQLPlus(少なくともWindowsでは)がUnicodeをサポートしているとは思いません。ここでテストしたところ、機能していないようです。ここでこれについて言及してもよいかどうかはわかりませんが、私自身のツール「Golden 6」は、Windowsのみですが、Unicodeスプーリングをサポートしています。正しいエンコーディングを選択するには、spoolコマンドの前に「SETENCODING [UNICODE | UTF-8 |ANSI][NOBOM]」を使用する必要があることに注意してください。

マークフォード
底生ソフトウェア
www.benthicsoftware.com

編集:ヴィンセントが指摘したように、それは機能しています。作成されたUTF-8ファイルにはBOMはありませんが、UTF-8ファイルであることに注意してください。

于 2009-11-17T14:59:20.283 に答える