我正在尝试select
行以进行最后一次日期更改= 30天。
我在LAEDA = ( sy-datum -30 )
子句中尝试了where
,但是它始终会产生错误。我连接到sap Abap database
。
消息错误:
[EIS材质1]错误:ERPConnect.ERPException:错误 接收函数返回值:SYSTEM_FAILURE发生错误 同时解析动态条目。在 ERPConnect.RFCAPI.ReceiveFunctionResults(UInt32 connectionHandle, 导入RFC_PARAMETER [],更改RFC_PARAMETER [],RFC_TABLE [] 表格,编码apiEncoding)在 ERPConnect.RFCFunction.ReceiveFunctionArguments(RFC_TABLE []& apiTables)位于ERPConnect.RFCFunction.CallClassicAPI()处 ERPConnect.RFCFunction.ExecuteRFC(Byte [] tid)在 XtractKernel.Extractors.TableExtractor.GetPackage(RFCFunction&func)
在XtractKernel.Extractors.TableExtractor.Extract()在 XtractKernel.Extractors.ExtractorBase`1.Extract(ProcessResultCallback XtractIS.XtractSourceTable.PrimeOutput(Int32上的processResult) 输出,Int32 [] outputID,PipelineBuffer []缓冲区)位于 Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostPrimeOutput(IDTSManagedComponentWrapper100 包装器,Int32输出,Int32 []输出ID,IDTSBuffer100 []缓冲区, IntPtr ppBufferWirePacket)
答案 0 :(得分:3)
因此,您正在使用第三方工具从SAP系统提取数据。根据该错误消息,该环将进行远程功能调用(RFC),并将SQL移交给ABAP后端。然后,无论后面的数据库是什么,您的where条件都必须是有效的ABAP / Open SQL语法。
您的呼叫(简化)在ABAP中看起来像这样(带有新的@语法):
DATA(lf_dat) = sy-datum - 30.
SELECT matnr
FROM mara
WHERE laeda >= @lf_dat
INTO TABLE @DATA(lt_matnr)
.
问题是,据我所知,您不允许在语句中进行此计算,因此必须使用变量。但是,由于您的第三方工具仅允许您编写where条件,因此除了条件中带有静态日期外,我看不到任何处理方法。
laeda >= '20190106' "YYYYMMDD
您可以在问题中添加ABAP标签,以吸引更多有关该ABAP特定主题的专家。
答案 1 :(得分:1)
我在Xtract IS联机帮助中看到,ABAP端安装了一个名为Z_THEO_READ_TABLE
的自定义功能模块,该模块执行Xtract IS发送的SQL。该模块有2种版本,一种是ABAP> = 740 SP 5,所以我想它是ABAP SQL严格模式的版本。
所以,我想也许您可以使用“主机表达式”编写类似于ABAP的Where子句,该表达式在ABAP SQL严格模式下有效:
LAEDA = @( sy-datum - 30 )
根据您收到的错误消息“解析动态条目时发生错误”,我猜想此功能模块的作用类似于SELECT (dyn-columns) FROM (dyn-table) WHERE (dyn-condition)
,即所有元素在运行时都是动态定义的。
不幸的是,“ ABAP documentation sql_cond - (cond_syntax)说:“ 动态逻辑表达式中不允许主机表达式。”
很长时间以来,无法根据需要创建where子句。
可能有很多方法可以绕过此限制(例如在SAP中创建SAPquery或BAPI并从Xtract IS调用它等),但这是另一个问题。
答案 2 :(得分:0)
在mySQL / MariaDB中,这有效:
select ...
from ...
where date >= DATE_ADD(CURDATE(), INTERVAL -30 DAY)
但是我们需要知道您正在使用哪个数据库。
答案 3 :(得分:0)
如果使用SQL数据库,则可以尝试:
Select DATEADD(Month, -1, getdate())
答案 4 :(得分:0)
您不能通过SAP Open SQL指定ABAP公式。
不是直接解决您的难题(因为您有产品限制),这是通过AecorSoft工具实现动态过滤的方法:
(DT_WSTR, 4)(DATEPART("yy" , GETDATE())) + RIGHT("0" + (DT_WSTR, 4)DATEPART("mm" , GETDATE()),2) + RIGHT("0" + (DT_WSTR, 4)DATEPART("dd" , GETDATE()),2)
有关完整的用例,您可以查看博客SAP Table Delta Extract Made Easy through Dynamic Filters