« Dashboard Widget Top50 - 2007/12/15 | トップページ | Safari3 - Inline find(インライン検索) »

2007年12月16日 (日) / Author : Hiroshi Sekiguchi.

Oracle de XMLDB #15

さて、まだ脱線は続きます。(いつ戻るんだ〜〜!)

Oracle de XMLDB #13でXqueryのencodingが指定できないと書いたが、どうしても文字コードを変えたい場合はどうするんだろうか?

思い出したのがOracle de XMLDB #7 - 何かが違うでも書いたクライアント側のNLS_LANG環境変数で制御する方法。




● バックナンバー
Oracle de XMLDB #1
Oracle de XMLDB #2
Oracle de XMLDB #3 - Oracle10g XEではどうよ?
Oracle de XMLDB #4
Oracle de XMLDB #5 - Oracle11g環境再構築完了
Oracle de XMLDB #6 - Linux x86版再び。
Oracle de XMLDB #7 - 何かが違う!?
Oracle de XMLDB #8 - またまた少々脱線
Oracle de XMLDB #9 - またまた少々脱線の続き
Oracle de XMLDB #10 - 三度脱線
Oracle de XMLDB #11 - 三度脱線のおまけ
Oracle de XMLDB #12
Oracle de XMLDB #13
Oracle de XMLDB #14


●このテスト環境の文字エンコーディングの概略図
NLS_LANG環境変数を変換したい文字コードへ変更すればうまく変換できるはず・・・・


Diagram_encoding

● まずは全てUTF-8で統一させている場合の例から。

MacOSXのterminalの文字エンコーディングもUTF-8にすることをお忘れなく。
Utf8


> conn scott/tiger
接続されました。
SCOTT> !echo $NLS_LANG
japanese_japan.AL32UTF8

SCOTT> set sqlterm off
SCOTT> set pagesize 1000
SCOTT> set long 4000
SCOTT>
SCOTT> select
2 xmlquery(
3 'xquery version "1.0";
4 <result>
5 {
6 for $i in fn:doc("/public/scott/xml/addresslist.xml")//電話番号
7 return $i
8 }
9 </result>'
10 returning content
11 )
12 from
13* dual
SCOTT> /

XMLQUERY('XQUERYVERSION"1.0";<RESULT>{FOR$IINFN:DOC("/PUBLIC/SCOTT/XML/ADDRESSLI
--------------------------------------------------------------------------------
<result><電話番号 区分="自宅">03-1234-5555</電話番号>
<電話番号 区分="携帯">090-4321-7878</電話番号>
<電話番号 区分="携帯">070-7777-8798</電話番号>
<電話番号 区分="自宅">06-1234-5555</電話番号>
<電話番号 区分="会社">06-6860-0001</電話番号>
<電話番号 区分="携帯">090-6666-7878</電話番号>
<電話番号 区分="携帯">080-9999-8798</電話番号>
<電話番号 区分="会社">06-6860-0001</電話番号>
<電話番号 区分="携帯">090-0066-0108</電話番号>
<電話番号 区分="携帯">090-3020-2897</電話番号>
</result>

SCOTT> exit


● クライアント側のNLS_LANG=japanese_japan.JA16SJISTILDE、MacOSXのTerminalの文字エンコーディングもShift_JISへ変更して実行する。

Sjis

[oracle@corydoras ˜]$ export NLS_LANG=japanese_japan.JA16SJISTILDE
[oracle@corydoras ˜]$ sqlplus /nolog

SQL*Plus: Release 11.1.0.6.0 - Production on 金 12月 14 23:10:29 2007

Copyright (c) 1982, 2007, Oracle. All rights reserved.

> conn scott/tiger
接続されました。

SCOTT> !echo $NLS_LANG
japanese_japan.JA16SJISTILDE

SCOTT> set sqlterm off
SCOTT> set pagesize 1000
SCOTT> set long 4000
SCOTT>
SCOTT> select
2 xmlquery(
3 'xquery version "1.0";
4 <result>
5 {
6 for $i in fn:doc("/public/scott/xml/addresslist.xml")//電話番号
7 return $i
8 }
9 </result>'
10 returning content
11 )
12 from
13* dual
SCOTT> /

XMLQUERY('XQUERYVERSION"1.0";<RESULT>{FOR$IINFN:DOC("/PUBLIC/SCOTT/XML/ADDRESSLI
--------------------------------------------------------------------------------
<result><電話番号 区分="自宅">03-1234-5555</電話番号>
<電話番号 区分="携帯">090-4321-7878</電話番号>
<電話番号 区分="携帯">070-7777-8798</電話番号>
<電話番号 区分="自宅">06-1234-5555</電話番号>
<電話番号 区分="会社">06-6860-0001</電話番号>
<電話番号 区分="携帯">090-6666-7878</電話番号>
<電話番号 区分="携帯">080-9999-8798</電話番号>
<電話番号 区分="会社">06-6860-0001</電話番号>
<電話番号 区分="携帯">090-0066-0108</電話番号>
<電話番号 区分="携帯">090-3020-2897</電話番号>
</result>


これではなんとなく分かりずらいですね。ということで結果をHTMLへスプールして確認してみましょう。

SCOTT> set markup html on spool on
SCOTT> set echo off
<br>
SCOTT> spool result.html
<br>
SCOTT> /
<br>

・・・・・中略・・・・・

SCOTT> spo off
<br>
SCOTT> set markup html off
<br>
SCOTT> set echo on
SCOTT> !cat result.html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=SHIFT_JIS">
<meta name="generator" content="SQL*Plus 11.1.0">
<style type="text/css">
body {font:10pt Arial,Helvetica,sans-serif;
color:black; background:White;}
p {font:10pt Arial,Helvetica,sans-serif;
color:black; background:White;}
table,tr,td {font:10pt Arial,Helvetica,sans-serif;
color:Black; background:#f7f7e7;
padding:0px 0px 0px 0px; margin:0px 0px 0px 0px;}
th {font:bold 10pt Arial,Helvetica,sans-serif;
color:#336699; background:#cccc99; padding:0px 0px 0px 0px;}
h1 {font:16pt Arial,Helvetica,Geneva,sans-serif;
color:#336699; background-color:White;
border-bottom:1px solid #cccc99;
margin-top:0pt; margin-bottom:0pt;
padding:0px 0px 0px 0px;}
h2 {font:bold 10pt Arial,Helvetica,Geneva,sans-serif;
color:#336699; background-color:White;
margin-top:4pt; margin-bottom:0pt;}
a {font:9pt Arial,Helvetica,sans-serif;
color:#663300; background:#ffffff;
margin-top:0pt; margin-bottom:0pt; vertical-align:top;}
</style>
<title>
SQL*Plus レポート
</title>
</head>
<body>
SCOTT> /
<br>
<p>
<table border="1" width="90%" summary="Script output">
<tr>
<th scope="col">
XMLQUERY('XQUERYVERSION"1.0";<RESULT>{FOR$IINFN:DOC("/PUBLIC/SCOTT/XML/ADDRESSLI
</th>
</tr>
<tr>
<td>
<result><電話番号 区分="自宅">03-1234-5555</電話番号>
<電話番号 区分="携帯">090-
4321-7878</電話番号>
<電話番号 区分="携帯">070-7777-8798</電話番号>
<電話番号 区
分="自宅">06-1234-5555</電話番号>
<電話番号 区分="会社">06-6860-0001</電話番号>

<電話番号 区分="携帯">090-6666-7878</電話番号>
<電話番号 区分="携帯">080-9999-87
98</電話番号>
<電話番号 区分="会社">06-6860-0001</電話番号>
<電話番号 区分="携帯
">090-0066-0108</電話番号>
<電話番号 区分="携帯">090-3020-2897</電話番号>
</resu
lt>
</td>
</tr>
</table>
<p>

SCOTT> spo off
<br>
</body>
</html>

SCOTT>

SQL*PlusでHTMLとして結果をSPOOLするコマンドがありますが、その機能を利用して文字エンコーディングがShift_JISになっているか確認しています。(太字で赤色で強調してある部分)
うまくShift_JISへ変換できているようです。
NLS_LANG環境変数で制御するしかないのはかなりトリッキーではあるけれど・・・)

| |

トラックバック


この記事へのトラックバック一覧です: Oracle de XMLDB #15:

コメント

コメントを書く