在传递子查询列时是否有使用 XMLTABLE 函数的解决方法?

问题描述 投票:0回答:1

我是 SAP HANA 中 SQL 世界的新手。我正在尝试将虚拟函数的结果处理为 XMLTABLE,以便生成我所接收的数据的更易于理解的视图。

我尝试使用下一个脚本:

SELECT XTABLE.* FROM
(SELECT SOAP_BODY FROM "ABASTECIMIENTO_DEV"."INICIATIVA_310_MBTU_invoke"('<SOAP_PARAMETERS>')) SOAP,
XMLTABLE (
    '/doc/item' PASSING SOAP.SOAP_BODY
    COLUMNS
    "id" NVARCHAR(10) path 'id'
) XTABLE;

我期望发生的是它应该返回一个只有一列名为“id”的表。相反,我收到了下一个错误:

Error: (dberror) 259 - invalid table name: table does not exist > SOAP: line 4 col 24 (at pos 409)

有没有可能将子查询的结果传递到xmltable中?

sql hana hana-sql-script sap
1个回答
0
投票

错误告诉您它正在第 4 行查找名为

SOAP
的表

如果你看第 4 行,肯定有对

SOAP.SOAP_BODY

的引用

其中的第一部分(句点之前)是表名称或表别名。

因此,您需要在代码中向上查找是否使用了名为“SOAP”的表,或者创建了表别名

SOAP
- 没有名为“SOAP”的表,也没有别名“SOAP” ”

因此,由于您不需要名为“SOAP”的实际表,因此您需要声明一个表别名

SELECT XTABLE.* 
FROM (
   SELECT SOAP_BODY 
   FROM "ABASTECIMIENTO_DEV"."INICIATIVA_310_MBTU_invoke"('<SOAP_PARAMETERS>')) AS SOAP -- alias
   , XMLTABLE (
    '/doc/item' PASSING SOAP.SOAP_BODY  -- refers to alias
    COLUMNS
    "id" NVARCHAR(10) path 'id'
    ) AS XTABLE

如果您仍然没有取得进展,请运行以下命令:

SELECT SOAP_BODY FROM "ABASTECIMIENTO_DEV"."INICIATIVA_310_MBTU_invoke"('<SOAP_PARAMETERS>');

确定您是否收到有效的 XML。

© www.soinside.com 2019 - 2024. All rights reserved.