2

クエリの選択部分で次のステートメントを使用しています。

extract(XMLTYPE(doc.payload),'/SHOW_SHIPMENT_005/DATAAREA/SHOW_SHIPMENT/SHIPMENT/SHIPITEM/DOCUMNTREF/DOCUMENTID')

が宣言なしでdoc.payload含まれている場合はうまく機能しますが、宣言が存在する場合、Oracle はドキュメントを検証しようとしますが、.XMLDTDDTDDTD

XMLこのクエリの検証を無効にする方法は? この件に関して、セッション設定やグローバル システム設定に影響を与えたくありません。

4

1 に答える 1

4

XMLTYPE を作成するときに検証をオフにできます。コンストラクターの署名は次のようになります。

XMLType(
   xmlData IN varchar2,
   schema IN varchar2 := NULL,
   validated IN number := 0,
   wellformed IN number := 0)

したがって、次のように検証を無効にできます。

   extract(XMLTYPE(doc.payload, NULL, 1, 1),
'/SHOW_SHIPMENT_005/DATAAREA/SHOW_SHIPMENT/SHIPMENT/SHIPITEM/DOCUMNTREF/DOCUMENTID')

ただし、外部の DTD 参照がある場合、これは役に立ちません。それでもロードしようとします。DTD ファイルを XMLDB リポジトリにアップロードすることはできませんか? それが最も簡単な解決策になります。そうでない場合、「適切な」解決策はありません。XMLTYPE を作成する前に、DTD 参照を削除する必要があります。

   extract(XMLTYPE(REGEXP_REPLACE(doc.payload, '<!DOCTYPE[^<]*>', '')),
'/SHOW_SHIPMENT_005/DATAAREA/SHOW_SHIPMENT/SHIPMENT/SHIPITEM/DOCUMNTREF/DOCUMENTID')
于 2009-03-12T14:31:40.713 に答える