HANA数据库-将表用户定义函数注入到横向联接中



简而言之

在HANA数据库上,我设置了一个表用户定义函数,它返回一个包含3列的1行表
我想在lateral join中使用它,但到目前为止我的尝试都没有成功。

问题

假设我们有以下伪表用户定义函数:

CREATE OR REPLACE FUNCTION  PBANALYST.  F__ITEM_MBEW(
IN
p_str_MATNR                 NVARCHAR(18)
,   p_str_BWKEY                 NVARCHAR(02)
,   p_str_VALDATE               NVARCHAR(08)
)
RETURNS
TABLE(
VALDATE     NVARCHAR(08)
,   LBKUM       INTEGER
,   VERPR       DECIMAL
,   STPRS       DECIMAL
)
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER

AS
BEGIN
RETURN
SELECT
'20220928'  AS  VALDATE     
,   10          AS  LBKUM       
,   5.3         AS  VERPR       
,   10.5        AS  STPRS       
FROM DUMMY
;
END;

它本身运行良好。但当我试图将它注入lateral join时,我会得到一个错误:

DO
BEGIN
tbl_MATNR_LIST =
SELECT '000000000000824151' AS MATNR , '92' AS div , '20220715' AS  VALDATE FROM dummy
;

SELECT
tbl_MATNR_LIST. *
FROM    :tbl_MATNR_LIST     tbl_MATNR_LIST ,
LATERAL(
SELECT *
FROM F__ITEM_MBEW(
'000000000000824151'
,   '92'
,   '20220715'
)
) MBEW
;
END;  

DataSource.Error : ODBC: ERROR [S1000] [SAP AG][LIBODBCHDB DLL][HDBODBC] General error;318 decimal precision specifier is out of range: -1: (1 to 38)

我该怎么修?谢谢你的帮助。

错误消息

DataSource.Error : ODBC: ERROR [S1000] [SAP AG][LIBODBCHDB DLL][HDBODBC] General error;318 decimal precision specifier is out of range: -1: (1 to 38)

可以通过在用户定义的函数中指定十进制数据类型长度来轻松修复:

TABLE(
VALDATE     NVARCHAR(08)
,   LBKUM       INTEGER
,   VERPR       DECIMAL (10, 2)
,   STPRS       DECIMAL (10, 2)
)

不幸的是,这无助于实现总体目标:以一种有意义的方式在LATERAL联接中使用UDF。

工作原理是这样的:

DO
BEGIN
tbl_MATNR_LIST =
SELECT '000000000000824151' AS MATNR 
, '92' AS div
, '20220715' AS  VALDATE 
FROM dummy;
SELECT
tml. *
FROM    :tbl_MATNR_LIST     tml 
CROSS JOIN LATERAL(
F__ITEM_MBEW(     '000000000000824151'
,   '92'
,   '20220715') 
) MBEW;
END;  

这确实返回了结果,但显然没有使用任何";"横向";参考文献
如果一个人试图使;从旁边抓东西";结果是:

[...]
CROSS JOIN LATERAL(
F__ITEM_MBEW(     '000000000000824151'
,   tml.div
,   '20220715') 
) MBEW;
[...]

SQL Error [7] [HY000]: SAP DBTech JDBC: [7] (at 292): feature not supported: non-field expression with LATERAL: line 13 col 29 (at pos 292)

在这一点上,我想这种使用横向JOIN的方式是不受支持的(在2.00.057版本上(

最新更新