Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml ORA-19025-使用extractValue时节点过多_Xml_Oracle - Fatal编程技术网

Xml ORA-19025-使用extractValue时节点过多

Xml ORA-19025-使用extractValue时节点过多,xml,oracle,Xml,Oracle,如果PartNumber=“926-AA”?如何选择“USPrice”值 我的选择总是以ORA-19025结尾 SELECT extractValue(OBJECT_VALUE, '/PurchaseOrder/Items/Item/USPrice/text()') "PRICE" FROM TMP_TABLE WHERE extractValue(OBJECT_VALUE,'/PurchaseOrder/Items/Item[@PartNumber]') = '926-AA'; 以下是DDL

如果PartNumber=“926-AA”?如何选择“USPrice”值

我的选择总是以ORA-19025结尾

SELECT extractValue(OBJECT_VALUE, '/PurchaseOrder/Items/Item/USPrice/text()') "PRICE" FROM TMP_TABLE
WHERE extractValue(OBJECT_VALUE,'/PurchaseOrder/Items/Item[@PartNumber]') = '926-AA';
以下是DDL:

CREATE TABLE TMP_TABLE OF XMLType;
INSERT INTO TMP_TABLE VALUES (XMLType(bfilename('XMLDIR', 'purchaseOrder.xml'),nls_charset_id('AL32UTF8')));
以下是数据:

<PurchaseOrder PurchaseOrderNumber="99503" OrderDate="1999-10-20">
  <Address Type="Shipping">
    <Name>Ellen Adams</Name>
    <Street>123 Maple Street</Street>
    <City>Mill Valley</City>
    <State>CA</State>
    <Zip>10999</Zip>
    <Country>USA</Country>
  </Address>
  <Address Type="Billing">
    <Name>Tai Yee</Name>
    <Street>8 Oak Avenue</Street>
    <City>Old Town</City>
    <State>PA</State>
    <Zip>95819</Zip>
    <Country>USA</Country>
  </Address>
  <DeliveryNotes>Please leave packages in shed by driveway.</DeliveryNotes>
  <Items>
    <Item PartNumber="872-AA">
      <ProductName>Lawnmower</ProductName>
      <Quantity>1</Quantity>
      <USPrice>148.95</USPrice>
      <Comment>Confirm this is electric</Comment>
    </Item>
    <Item PartNumber="926-AA">
      <ProductName>Baby Monitor</ProductName>
      <Quantity>2</Quantity>
      <USPrice>39.98</USPrice>
      <ShipDate>1999-05-21</ShipDate>
    </Item>
  </Items>
</PurchaseOrder>

艾伦·亚当斯
枫树街123号
米尔山谷
加利福尼亚州
10999
美国
大仪
橡树大道8号
老城
帕
95819
美国
请把包裹放在车道旁的棚里。
割草机
1.
148.95
确认这是电动的
婴儿监视器
2.
39.98
1999-05-21

提前谢谢你

听起来你想做:

select extractvalue(object_value, '/PurchaseOrder/Items/Item[@PartNumber="926-AA"]/USPrice/text()') price
from tmp_table;
或者,如果要针对多行运行此操作,最好使用
XMLTABLE
,因为
EXTRACTVALUE
自11gR1以来一直被弃用:

select *
from   tmp_table tt
       cross join xmltable('/PurchaseOrder/Items/Item'
                           passing tt.object_value
                           columns partnumber varchar2(20) path '@PartNumber',
                                   usprice number path 'USPrice') x
where  x.partnumber = '926-AA';

好的,我必须在xpath语法中使用条件,而不是在带有EXTRACTVALUE的where语句中使用它。美好的但是XMLTABLE的代码示例运行在错误ORA-01722中:-(当您引用Oracle错误号时,请将相应的错误消息放在一起好吗?不能指望任何人记住所有错误及其相关的错误代码!此外,强迫试图帮助您的人浪费时间查找您指尖上的东西既耗时又浪费。(对不起,小淘气,你碰巧是压坏骆驼背的稻草!)。最后,如果usprice节点可以包含非数字的信息,则将xmltable列声明中的数据类型更改为varchar2。我理解并承诺改进。感谢您的帮助性回答。现在一切正常。我很高兴您能够解决问题*{:-D