首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >oracle中的XMLCAST

oracle中的XMLCAST
EN

Stack Overflow用户
提问于 2022-09-25 23:13:34
回答 2查看 42关注 0票数 0

我有一个带有xml列的表,并试图在xml标记中进行值之和。

表创建:创建表XML_TABLE6 ( XML_COL VARCHAR2(2000字节) );

代码语言:javascript
运行
AI代码解释
复制
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

EN

回答 2

Stack Overflow用户

发布于 2022-09-25 23:44:19

查询中存在一些问题:

  • 您没有指定要作为输入的列(XML_passing_clause)
  • 您需要显式地将该列转换为XMLType实例,以便使用XML函数处理它。
  • Oracle没有double数据类型。请参阅文档中的数值数据类型XMLCAST函数:

数据类型参数可以是数据类型 NUMBER、VARCHAR2、CHAR、CLOB、BLOB、REF和任何日期时间数据类型。

在您修复了这个问题之后,它可以正常工作:

代码语言:javascript
运行
AI代码解释
复制
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|

db<>fiddle

票数 2
EN

Stack Overflow用户

发布于 2022-09-25 23:44:47

在甲骨文中,ANSI数据类型double precision,而不仅仅是double

您还需要传入实际的列值,因为这是一个字符串,所以将其转换为XMLType:

代码语言:javascript
运行
AI代码解释
复制
select
  XMLCast(
    XMLQuery('sum(a/b)' PASSING XMLType(xml_col) RETURNING CONTENT)
    as double precision)
from xml_table6;

或者使用普通的number数据类型:

代码语言:javascript
运行
AI代码解释
复制
select 
  XMLCast(
    XMLQuery('sum(a/b)' PASSING XMLType(xml_col) RETURNING CONTENT)
    as number
   )
from xml_table6;

binary_double

代码语言:javascript
运行
AI代码解释
复制
select 
  XMLCast(
    XMLQuery('sum(a/b)' PASSING XMLType(xml_col) RETURNING CONTENT)
    as binary_double
   )
from xml_table6;

db<>fiddle

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73850659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档