13

私は Oracle を初めて使用し、おそらく些細なことですが、select に問題があります。(私は Oracle 10g Express Edition を使用しています)。

フィールド CLOB を持つ DB があります: mytab.xml この列には、次のような XML があります。

<?xml version="1.0" encoding="iso-8859-1"?>
<info>
<id> 954 </id>
<idboss> 954 </idboss>
<name> Fausto </name>
<sorname> Anonimo </sorname>
<phone> 040000000 </phone>
<fax> 040000001 </fax>
</info>

たとえば、「fax」タグの値を取得するために「単純な」選択をしようとしています。しかし、私は少し問題があり、エラーを理解できません。例えば:

select extract(xml, '//fax').getStringVal() from mytab;
ORA-00932: inconsistent datatypes: expected - got

select extract(xmltype(xml), '//fax').getStringVal() from mytab;
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "SYS.XMLTYPE", line 254

「extractvalue」でも試しましたが、同じ問題があります。これを行うにはどこが間違っていますか?

4

7 に答える 7

30

代わりにこれを試してください:

select xmltype(t.xml).extract('//fax/text()').getStringVal() from mytab t
于 2011-02-03T09:46:08.997 に答える
3

を使ってみてくださいxmltype.createxml(xml)

のように、

select extract(xmltype.createxml(xml), '//fax').getStringVal() from mytab;

それは私のために働いた。

さらに改善または操作したい場合。

このようなことを試してください。

Select *
from xmltable(xmlnamespaces('some-name-space' as "ns", 
                                  'another-name-space' as "ns1",
                           ), 
                    '/ns/ns1/foo/bar'
                    passing xmltype.createxml(xml) 
                    columns id varchar2(10) path '//ns//ns1/id',
                            idboss varchar2(500) path '//ns0//ns1/idboss',
                            etc....

                    ) nice_xml_table

それが誰かを助けることを願っています。

于 2012-02-20T21:50:54.567 に答える
0

CLOB XML から DBMS_XMLPARSER.parser オブジェクトを作成してみて、そこから DBMS_XMLDOM.DOMDocument オブジェクトを取得できます。次に、DBMS_XMLDOM パッケージのメソッドを使用して、任意のノードの値を取得します。

   xml_            CLOB := 'X';
   p               DBMS_XMLPARSER.parser;
   doc_            DBMS_XMLDOM.DOMDocument;

      -- Convert the CLOB into a XML-document
      P := DBMS_XMLPARSER.newparser();
      -- Parse the clob and get the XML-document
      DBMS_XMLPARSER.parseclob(p, xml_);
      doc_ := DBMS_XMLPARSER.getDocument(p);

次に、以下のメソッドを使用してノード値を抽出します

DBMS_XMLDOM.getElementsByTagName(doc_, 'NodeName'); DBMS_XMLDOM.GetNodeValue(node_obj_);

DBMS_XMLDOM メソッドの詳細については、こちらを参照してください。

于 2016-06-16T07:11:01.437 に答える
0

私の場合、このクエリは完全に実行されます

select xmltype(t.axi_content).extract('//Lexis-NexisFlag/text()').getStringVal() from ax_bib_entity t
于 2013-05-29T11:32:28.557 に答える