Oracle 10g:从 XML(CLOB 类型)中提取数据(选择)
我是 Oracle 的新手,我在选择中遇到了一个问题(也许是微不足道的)。 (我使用的是 Oracle 10g Express 版)。
我有一个带有 CLOB 字段的数据库: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>
我正在尝试执行“简单”选择来获取“传真”标签的值。但我有一点问题,我无法理解我的错误。例如:
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”,但我遇到了同样的问题。 我这样做哪里错了?
I'm new in Oracle and I've - maybe trivial - a problem in a select. (I'm using Oracle 10g Express Edition).
I've a DB with a field CLOB: mytab.xml
This column have an XML like this:
<?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>
I'm trying to do a 'simple' select to get, for example, the value of 'fax' tag. But I've a bit of problem and I'm not able to understand my error. For example:
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
I've tryed also with 'extractvalue', but I've the same problems.
where I'm wrong to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
试试这个:
Try this instead:
尝试使用
xmltype.createxml(xml)
。就像,
它对我有用。
如果你想进一步改进或操纵。
尝试这样的事情。
希望它能帮助某人。
Try using
xmltype.createxml(xml)
.As in,
It worked for me.
If you want to improve or manipulate even further.
Try something like this.
Hope it helps someone.
这个查询在我的情况下完美运行
this query runs perfectly in my case
您可以使用以下查询来实现
select extract(xmltype(xml), '//fax/text()').getStringVal() from mytab;
select extractvalue(xmltype(xml), '//fax') from mytab;
You can achieve with below queries
select extract(xmltype(xml), '//fax/text()').getStringVal() from mytab;
select extractvalue(xmltype(xml), '//fax') from mytab;
您可以尝试从 CLOB XML 创建 DBMS_XMLPARSER.parser 对象,并从中获取 DBMS_XMLDOM.DOMDocument 对象。然后使用DBMS_XMLDOM包方法获取任意节点的值。
然后使用以下方法提取节点值
DBMS_XMLDOM.getElementsByTagName(doc_, 'NodeName');
DBMS_XMLDOM.GetNodeValue(node_obj_);
有关 DBMS_XMLDOM 方法的更多信息,请参阅此处。
You can try creating DBMS_XMLPARSER.parser object from the CLOB XML and get a DBMS_XMLDOM.DOMDocument object from it. Then use DBMS_XMLDOM package methods to get the value of any node.
Then use the below methods to extract node value
DBMS_XMLDOM.getElementsByTagName(doc_, 'NodeName');
DBMS_XMLDOM.GetNodeValue(node_obj_);
Refer more about DBMS_XMLDOM methods here.
如果是:
查询:
In case of :
Query :
如果 XML 存储在数据库表的 CLOB 字段中。例如,对于此 XML:
这是提取查询:
In case the XML store in the CLOB field in the database table. E.g for this XML:
This is the Extract Query: