0

Oracle BI Publisher 11g (11.1.1.3.0) を実行しており、データベース テーブルに格納されている XML データにアクセスしようとしています。残念ながら、私はいくつかの問題を抱えており、現時点ではかなり混乱しています。

私はテーブルを持っています:

create table xml_test(
  id number,
  data1 clob,
  data2 xmltype
);

desc xml_test
 Name                                         Null?    Type
 -------------------------------------------- -------- ---------------------------
 ID                                                    NUMBER
 DATA1                                                 CLOB
 DATA2                                                 PUBLIC.XMLTYPE

XML データで満たされています。

insert into xml_test values (
  1,
  to_clob(xmltype.createxml('<top><foo>I''m first foo !</foo><bar>I''m first bar !</bar></top>')),
  xmltype.createxml('<top><foo>I''m first foo !</foo><bar>I''m first bar !</bar></top>')
);
insert into xml_test values (
  2,
  to_clob(xmltype.createxml('<top><foo>I''m second foo !</foo><bar>I''m second bar !</bar></top>')),
  xmltype.createxml('<top><foo>I''m second foo !</foo><bar>I''m second bar !</bar></top>')
);
insert into xml_test values (
  3,
  to_clob(xmltype.createxml('<top><foo>I''m third foo !</foo><bar>I''m third bar !</bar></top>')),
  xmltype.createxml('<top><foo>I''m third foo !</foo><bar>I''m third bar !</bar></top>')
);

commit;

そして、sqlplus でクエリを実行できます。

column id format 99
column data1 format a35
column data2 like data1

select * from xml_test;

 ID DATA1                               DATA2
--- ----------------------------------- -----------------------------------
  1 <top><foo>I'm first foo !</foo><bar <top>
    >I'm first bar !</bar></top>          <foo>I&apos;m first foo !</foo>
                                          <bar>I&apos;m first bar !</bar>
                                        </top>

  2 <top><foo>I'm second foo !</foo><ba <top>
    r>I'm second bar !</bar></top>        <foo>I&apos;m second foo !</foo>
                                          <bar>I&apos;m second bar !</bar>
                                        </to

  3 <top><foo>I'm third foo !</foo><bar <top>
    >I'm third bar !</bar></top>          <foo>I&apos;m third foo !</foo>
                                          <bar>I&apos;m third bar !</bar>
                                        </top>

select xt.id,
       xmlcast(xmlquery('//foo' passing xt.data2 returning content) as varchar2(30)) "FOO",
       xmlcast(xmlquery('//bar' passing xt.data2 returning content) as varchar2(30)) "BAR"
from xml_test xt;

 ID FOO                            BAR
--- ------------------------------ ------------------------------
  1 I'm first foo !                I'm first bar !
  2 I'm second foo !               I'm second bar !
  3 I'm third foo !                I'm third bar !

select xt.id, t.*
from xml_test xt,
     xmltable('//top' passing xt.data2
              columns "FOO" varchar2(15) path 'foo',
                      "BAR" varchar2(15) path 'bar') t;

 ID FOO             BAR
--- --------------- ---------------
  1 I'm first foo ! I'm first bar !
  2 I'm second foo  I'm second bar
  3 I'm third foo ! I'm third bar !

これまでのところすべて問題ないように見えますが、BI Publisher でデータ モデルを作成しようとすると、いくつかの問題が発生します。

Oracle のドキュメントによると、データ モデルで Character Large Object (CLOB) として格納されたデータを使用すると、データ モデラーで data1 列の CLOB タイプを XML タイプに変更できるはずです。私のインストールでは、ドキュメントに示されているドロップダウン メニューが表示されないため、これを行うことができません。このオプションが利用できないのはなぜですか? 表の作成が間違った方法で行われたか、データの挿入が間違った方法で行われたか、またはBI PublisherまたはOracleデータベースのインストールまたは構成が間違っていませんか? それとも椅子とキーボードの間の問題ですか?ただし、XML 生成を実行すると、data1 の値が (正しく) CLOB として表示されます。

<ID>1</ID>
<DATA1>
<top><foo>I'm first foo !</foo><bar>I'm first bar !</bar></top>
</DATA1>
<DATA2/>

ただし、列data2(XMLTYPEの型)はXMLとしてまったく認識されませんが、BI Publisherはそれが文字列であることを示し、XMLが生成されるとnullを返します(上記を参照)。

BI Publisher は XMLTYPE をまったく認識しないため、回避策を試しました。BI Publisher Query Builder では、次のようになります。

select "XML_TEST"."ID" as "ID",
       xmlcast(xmlquery('//foo' passing "XML_TEST"."DATA2" returning content) as varchar2(30)) as "FOO",
       xmlcast(xmlquery('//bar' passing "XML_TEST"."DATA2" returning content) as varchar2(30)) as "BAR"

 from  "XML_TEST" "XML_TEST"

期待どおりに動作します:

<ID_1>1</ID_1>
<BAR>I'm first bar !</BAR>
<FOO>I'm first foo !</FOO>

しかし、驚くべきことに(私にとって)これは失敗します:

/* This works on Query Builder but XML generation fails. */

select "xt"."ID" as "ID", t.bar_xml_test as "B1", t.foo_xml_test as "B2"
from   "XML_TEST" "xt",
       xmltable('//top' passing xt.data2
              columns "foo_xml_test" varchar2(15) path 'foo',
                      "bar_xml_test" varchar2(15) path 'bar') as t

クエリ ビルダーは問題ないと判断しますが、XML の生成は失敗します。

XML Parsing Error: no element found

xmlcast + xmlquery は機能するのに、xmltable は機能しないのはなぜですか? BI Publisher は仮想テーブルを好みませんか?

4

1 に答える 1

0

Oracle のドキュメントによると、データ モデルでCharacter Large Object (CLOB) として格納されたデータを使用すると、データ モデラーで data1 列の CLOB タイプを XML タイプに変更できるはずです。私のインストールでは、ドキュメントに示されているドロップダウン メニューが表示されないため、これを行うことができません。

私の同僚は、この機能がBI Publisher 11.1.1.5でのみ使用可能であり、11.1.1.3 を実行していることを知りました。11.1.1.5 にアップグレードすると、機能は正常に動作します。

于 2011-06-17T11:17:08.280 に答える