我有一个带有xml列的表,并试图在xml标记中进行值之和。
表创建:创建表XML_TABLE6 ( XML_COL VARCHAR2(2000字节) );
Insert into XML_TABLE6
(XML_COL)
Values
('<a><b>1</b><b>2</b></a>');
COMMIT;
我使用下面的select语句返回数据类型"double“中的表达式。但我得到的错误"ORA-00905:缺失关键字“。
SQL查询:
从XMLCast中选择XMLQuery(‘sum(a/b)’返回内容)为double;
预期产出: 3.0
发布于 2022-09-25 23:44:19
查询中存在一些问题:
XML_passing_clause
)double
数据类型。请参阅文档中的数值数据类型。XMLCAST
函数:数据类型参数可以是数据类型 NUMBER、VARCHAR2、CHAR、CLOB、BLOB、REF和任何日期时间数据类型。
在您修复了这个问题之后,它可以正常工作:
with XML_TABLE6(XML_COL) as (
select '<a><b>1</b><b>2</b></a>'
from dual
)
select xmlcast(
XMLQuery('sum(a/b)' passing xmltype(XML_COL) RETURNING CONTENT)
as binary_double
) as res
from XML_TABLE6
|RES|
|:--|
|3.0E+000|
发布于 2022-09-25 23:44:47
在甲骨文中,ANSI数据类型是double precision
,而不仅仅是double
。
您还需要传入实际的列值,因为这是一个字符串,所以将其转换为XMLType:
select
XMLCast(
XMLQuery('sum(a/b)' PASSING XMLType(xml_col) RETURNING CONTENT)
as double precision)
from xml_table6;
或者使用普通的number
数据类型:
select
XMLCast(
XMLQuery('sum(a/b)' PASSING XMLType(xml_col) RETURNING CONTENT)
as number
)
from xml_table6;
select
XMLCast(
XMLQuery('sum(a/b)' PASSING XMLType(xml_col) RETURNING CONTENT)
as binary_double
)
from xml_table6;
https://stackoverflow.com/questions/73850659
复制