我在一个AMDP类中有一个sqlscript。我得到了以下语句的转储:
sel1 = select mandt, equnr,
ROW_NUMBER() OVER ( PARTITION BY equnr ORDER BY equnr, idate, itime, mdocm) as rnum,
to_date(idate) as idate,
cast(to_varchar(idate) || to_varchar(itime) as "$ABAP.type( TSTMP_BW_EXTRACT )" ) AS mytimestmp,
LEAD(cast(to_varchar(idate) || to_varchar(itime) as "$ABAP.type( TSTMP_BW_EXTRACT )" )) OVER ( ORDER
BY equnr, idate, itime, MDOCM) timdelta,
to_decimal('0.0',25,6) as mydiff,
VLCOD,
LEAD(vlcod, 1) OVER ( ORDER BY equnr,idate,itime,MDOCM) as nxtVlcod,
TO_DECIMAL('0.0',25,6) as T_PRESS_RUN,
TO_DECIMAL('0.0',25,6) as T_PRESS_DWN,
TO_DECIMAL('0.0',25,6) as T_UPRESS_DWN
from :sel_imrg
where equnr = :v_equnr
and idate between v_date_begin and v_date_end
order by mandt, equnr, idate, itime, MDOCM;问题似乎是将单独的idate和itime字段转换为时间戳。我尝试过许多不同的时间戳值数据类型,比如上面显示的时间戳和ABAP类型。我还尝试过to_timestamp()、cast()、to_decimal()等。
奇怪的是,几乎完全相同的语句在HANA sidecar中的HANA studio SQL控制台中工作得很好。
转储显示CX_AMDP_EXECUTION_FAILED SQL错误339 "339无效编号异常:无效编号:"TST"."SAPTST"."ZCL_TEST_CLASS=>EXECUTE#stb2#20210405110801":|| l“
系统为HANA 2.00.048.00.1591276203上的S/4 1809 SAP_ABA 75D SP5
我感谢你们所有人能提供的任何帮助。
发布于 2021-05-25 04:16:08
SAP支持帮助我解决了这个问题。
尽管SAP支持没有特别提到它,但hana sql脚本(或未记录的功能,取决于您如何看待它)中似乎存在一个错误
如果您尝试从单独的日期和时间值形成时间戳值,则必须将日期和时间连接在一起,并在'YYYY-MM-DD HH24:MI:SS‘之间加上一个空格。然而,你不能仅仅使用‘’来表示空格。您必须使用空格的ascii表示:char(32)。
正如我之前提到的。这段代码的原始版本在HANA studio的匿名块中工作得很好。只有当它在AMDP中时,它才会转储。
此代码在AMDP内成功执行,没有转储:
sel1 = select mandt,
EQUNR,
ROW_NUMBER() OVER ( PARTITION BY equnr ORDER BY equnr, idate, itime, MDOCM) as rnum,
to_date(idate) as idate,
ifnull(to_timestamp( idate || char(32) || itime, 'YYYY-MM-DD HH24:MI:SS'), '0001-01-01 00:00:00') AS mytimestmp,
ifnull(LEAD(to_timestamp( idate || char(32) || itime, 'YYYY-MM-DD HH24:MI:SS')) OVER ( ORDER BY equnr, idate, itime, MDOCM), '0001-01-01 00:00:00') timdelta,
to_decimal('0.0',25,6) as mydiff,
VLCOD,
LEAD(vlcod, 1) OVER ( ORDER BY equnr,idate,itime,MDOCM) as nxtVlcod,
TO_DECIMAL('0.0',25,6) as T_PRESS_RUN,
TO_DECIMAL('0.0',25,6) as T_PRESS_DWN,
TO_DECIMAL('0.0',25,6) as T_UPRESS_DWN
from :sel_imrg
where equnr = :v_equnr
and idate between v_date_begin and v_date_end
order by mandt, equnr, idate, itime, MDOCM;发布于 2021-04-15 05:31:00
错误消息"[339] (range 3) invalid number exception: invalid number表示字符串到number数据类型的转换失败。
这意味着,这是关于将数字或字符串转换为date或timestamp数据类型的而不是。
导致隐式转换的一个潜在原因是WHERE子句的这一部分:
where equnr = :v_equnr 如果:v_equnr是数值数据类型,而equnr列是字符数据类型,则需要执行隐式类型转换,即字符串equnr gets类型转换为数值数据类型。当列equnr包含任何字符时,这将产生OP遇到的错误。
因此,这不仅取决于语句和表结构,还取决于表中的实际数据,这可能是同一语句在另一个系统上工作的原因。
https://stackoverflow.com/questions/67096405
复制相似问题