Oracle de XMLDB #13 Tweet
● バックナンバー
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
さて、前回SQL*PlusのXQueryコマンドのXQuery宣言ではversion及びencodingが指定できなかったり、先頭行にコメントが書けなかったがSQL/XMLのxmlquery()関数内ではどうなのか確認しておく。
環境はいつものとおり、Oracle11g EE R1 11.1.0.6.0 for Linux x86へMacOSXのTerminalからssh接続して行った。
Last login: Thu Dec 13 07:54:08 on console
Welcome to Darwin!
G5Server:˜ discus$ su - oracle
Password:
G5Server:˜ oracle$ ssh oracle@corydoras
oracle@corydoras's password:
Last login: Wed Dec 12 21:21:43 2007 from 192.168.1.19
[oracle@corydoras ˜]$ sqlplus /nolog
SQL*Plus: Release 11.1.0.6.0 - Production on 木 12月 13 17:03:36 2007
Copyright (c) 1982, 2007, Oracle. All rights reserved.
> conn scott/tiger
接続されました。
SCOTT> l
1 select
2 xmlquery(
3 'xquery version "1.0" encoding "utf-8";
4 declare namespace mo = "http://192.168.1.20/my_namespace";
5 declare function mo:phoneNumber($phone)
6 {
7 $phone/text()
8 };
9 (: Query body :)
10 <result>
11 {
12 for $i in fn:doc("/public/scott/xml/addresslist.xml")//電話番号
13 return
14 <greeting>
15 { fn:concat("Hello, ", mo:phoneNumber($i)) }
16 </greeting>
17 }
18 </result>'
19 returning content
20 )
21 from
22 dual
SCOTT> /
dual
*
行22でエラーが発生しました。:
ORA-19284: バージョン宣言におけるエンコーディング指定はサポートされていません
xmlquery()関数では、SQL*PlusのXQueryコマンドとは異なりencodingは指定できないがversionだけは指定できるようだ。
SCOTT> edit
file afiedt.bufが書き込まれました。
1 select
2 xmlquery(
3 'xquery version "1.0";
4 declare namespace mo = "http://192.168.1.20/my_namespace";
5 declare function mo:phoneNumber($phone)
6 {
7 $phone/text()
8 };
9 (: Query body :)
10 <result>
11 {
12 for $i in fn:doc("/public/scott/xml/addresslist.xml")//電話番号
13 return
14 <greeting>
15 { fn:concat("Hello, ", mo:phoneNumber($i)) }
16 </greeting>
17 }
18 </result>'
19 returning content
20 )
21 from
22* dual
SCOTT> /
XMLQUERY('XQUERYVERSION"1.0";DECLARENAMESPACEMO="HTTP://192.168.1.20/MY_NAMESPAC
--------------------------------------------------------------------------------
<result><greeting>Hello, 03-1234-5555</greeting><greeting>Hello, 090-4321-7878</
greeting><greeting>Hello, 070-7777-8798</greeting><greeting>Hello, 06-1234-5555<
/greeting><greeting>Hello, 06-6860-0001</greeting><greeting>Hello, 090-6666-7878
</greeting><greeting>Hello, 080-9999-8798</greeting><greeting>Hello, 06-6860-000
1</greeting><greeting>Hello, 090-0066-0108</greeting><greeting>Hello, 090-3020-2
897</greeting></result>
SCOTT>
ではSQL*PlusのXQueryコマンドでは先頭行がコメントである場合、XQueryとは解釈されずSQL文として解釈されてしまっていたがxmlquery()関数ではそのような書き方でも問題はない。
SQL*PlusのXQueryコマンドは、XQuery宣言ではなく、SQL*PlusのXQueryコマンドだということを忘れないようにしたい。(混乱しそうだが。。。。)
SCOTT> edit
file afiedt.bufが書き込まれました。
1 select
2 xmlquery(
3 '(: コメントを先頭に :)
4 xquery version "1.0";
5 declare namespace mo = "http://192.168.1.20/my_namespace";
6 declare function mo:phoneNumber($phone)
7 {
8 $phone/text()
9 };
10 (: Query body :)
11 <result>
12 {
13 for $i in fn:doc("/public/scott/xml/addresslist.xml")//電話番号
14 return
15 <greeting>
16 { fn:concat("Hello, ", mo:phoneNumber($i)) }
17 </greeting>
18 }
19 </result>'
20 returning content
21 )
22 from
23* dual
SCOTT> /
XMLQUERY('(:コメントを先頭に:)XQUERYVERSION"1.0";DECLARENAMESPACEMO="HTTP://192.
--------------------------------------------------------------------------------
<result><greeting>Hello, 03-1234-5555</greeting><greeting>Hello, 090-4321-7878</
greeting><greeting>Hello, 070-7777-8798</greeting><greeting>Hello, 06-1234-5555<
/greeting><greeting>Hello, 06-6860-0001</greeting><greeting>Hello, 090-6666-7878
</greeting><greeting>Hello, 080-9999-8798</greeting><greeting>Hello, 06-6860-000
1</greeting><greeting>Hello, 090-0066-0108</greeting><greeting>Hello, 090-3020-2
897</greeting></result>
SCOTT>
| 固定リンク | 0
コメント