Oracle中的XMLCAST

sdnqo3pr  于 2022-10-04  发布在  Oracle
关注(0)|答案(2)|浏览(340)

我有一个包含一个XML列的表,并尝试在一个XML标记中求值的和。

创建的表:CREATE TABLE 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查询:

从XML_Table6中选择XMLCast(XMLQuery(‘sum(a/b)’Returning Content)as Double);

预期产量:3.0

rdrgkggo

rdrgkggo1#

查询中存在一些问题:

  • 您没有指定要作为输入的列(XML_passing_clause)
  • 需要将该列显式强制转换为XMLType示例,才能使用XML函数进行处理。
  • Oracle没有double数据类型。请参阅文档中的数字数据类型。XMLCAST函数:

数据类型参数可以是数据类型NUMBER、VARCHAR2、CHAR、CLOB、BLOB、REF XMLTYPE和任何DATETIME数据类型。

在您修复此问题后,它可以正常工作:

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

kyvafyod

kyvafyod2#

在Oracle中,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;

binary_double

select 
  XMLCast(
    XMLQuery('sum(a/b)' PASSING XMLType(xml_col) RETURNING CONTENT)
    as binary_double
   )
from xml_table6;

db<>fiddle

相关问题