1

xmlデータを含むテーブルにClob列があります。クエリを記述してデータを抽出しようとしています。

select XMLTYPE.createxml(e.cdxml_index).extract('//page/fragment/text()') from chemical_structures e where e.primary_key=20;

私が受け取るエラーメッセージは次のとおりです。

エラーレポート:SQLエラー:ORA-31020:操作は許可されていません。理由:セキュリティ上の理由から、サーバー側ではXDBリポジトリを介したftpおよびhttpアクセスは許可されていません。ORA-06512:「SYS.XMLTYPE」の531020行目。 00000-"操作は許可されていません。理由:%s" *原因:試行された操作は許可されていません*アクション:理由を確認し、有効な操作に変更してください。

clob列のデータは次のとおりです。

(CLOB) <?xml version="1.0"  ?>
<!DOCTYPE CDXML SYSTEM "http://www.***.com/xml/cdxml.dtd" >
<CDXML
 <page
 id="12"
 BoundingBox="0 0 540 719.75"
><fragment
 id="9"
 BoundingBox="91.5 111.75 104.01 123.21"
><n
id="8"
p="94.94 117.6"
Z="2"
Element="35"
NumHydrogens="0"
Charge="-1"
AS="N"
><t
id="7"
p="91.5 121.5"
BoundingBox="91.5 111.75 104.01 123.21"
><s font="3" size="10" face="96">Br-</s></t></n></fragment></page></CDXML>

xmlのDOCTYPE宣言と関係があるフォーラムで読みました。

誰かが私がそれを機能させることができる方法を提案できますか?

ありがとう

4

1 に答える 1

3

回避策を見つけました。

xml dtd検証を無効にする必要がありましたが、さまざまな掲示板で言及されているいくつかのことを試した後、それは機能しませんでした。

最後に、xmlのdoctype宣言を無視することにしました。そのために、REGEXP_REPLACEメソッドを使用しました。

次のクエリは私が探していたものを私に与えました:

select extract(XMLTYPE(REGEXP_REPLACE(e.cdxml_index, '<!DOCTYPE CDXML SYSTEM "http://***/xml/cdxml.dtd" >', '')),'//page/fragment/n') from chemical_structures e where e.primary_key=20;

次の出力が得られます。

<n
id="8"
p="94.94 117.6"
Z="2"
Element="35"
NumHydrogens="0"
Charge="-1"
AS="N"
><t
id="7"
p="91.5 121.5"
BoundingBox="91.5 111.75 104.01 123.21"
><s font="3" size="10" face="96">Br-</s></t></n>
于 2012-07-20T15:07:57.193 に答える