首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SSIS从MARA中选择最近30天的行

使用SSIS从MARA中选择最近30天的行
EN

Stack Overflow用户
提问于 2019-02-07 17:24:47
回答 5查看 1.2K关注 0票数 0

我正在尝试select最后一次日期更改= 30天的行。

我在where子句中尝试了LAEDA = ( sy-datum -30 ),但总是产生错误。我连接到sap Abap database

消息error:

[EIS-Material 1]错误: ERPConnect.ERPException:接收函数返回值时出错: SYSTEM_FAILURE解析动态条目时出错。at ERPConnect.RFCAPI.ReceiveFunctionResults(UInt32 connectionHandle,RFC_PARAMETER[] importing,RFC_PARAMETER[] changing,RFC_TABLE[] tables,Encoding apiEncoding) at ERPConnect.RFCFunction.ReceiveFunctionArguments(RFC_TABLE[]& apiTables) at ERPConnect.RFCFunction.CallClassicAPI() at ERPConnect.RFCFunction.ExecuteRFC(Byte[] tid) at XtractKernel.Extractors.TableExtractor.GetPackage(RFCFunction& func)

at XtractKernel.Extractors.TableExtractor.Extract() at XtractKernel.Extractors.ExtractorBase`1.Extract(ProcessResultCallback processResult) at XtractIS.XtractSourceTable.PrimeOutput(Int32输出,Int32[] outputID,PipelineBuffer[]缓冲区) at Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostPrimeOutput(IDTSManagedComponentWrapper100 wrapper,Int32输出,Int32[] outputID,IDTSBuffer100[] buffers,IntPtr ppBufferWirePacket)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-02-07 19:13:27

因此,您正在使用第三方工具从SAP系统中提取数据。根据错误消息,toole进行远程函数调用(RFC)并将SQL传递给ABAP后端。那么,您的where条件必须是有效的ABAP/Open SQL语法,而不管后面的数据库是什么。

在ABAP中,您的调用(简化)将如下所示(使用新的@-语法):

代码语言:javascript
复制
DATA(lf_dat) = sy-datum - 30.

SELECT matnr
FROM mara
WHERE laeda >= @lf_dat
INTO TABLE @DATA(lt_matnr)
.

问题是,据我所知,你不能在语句中进行这个计算,所以你必须使用一个变量。但是,由于您的第三方工具只允许您编写where条件,我认为没有办法处理此问题,除非在条件中使用静态日期:

代码语言:javascript
复制
laeda >= '20190106' "YYYYMMDD

您可以将ABAP标签添加到您的问题中,以吸引更多关于此ABAP特定主题的专家。

票数 4
EN

Stack Overflow用户

发布于 2019-02-08 03:57:38

我在Xtract IS联机帮助中看到,ABAP端安装了一个名为Z_THEO_READ_TABLE的自定义函数模块,它执行Xtract IS发送的SQL语句。该模块提供了两种风格,一种是用于ABAPSQL740SP5的,所以我猜它是用于>=的版本。

因此,我想也许您可以通过使用“主机表达式”来编写类似ABAP的Where子句,这在ABAP SQL严格模式下是有效的:

代码语言:javascript
复制
 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调用它,等等)。但这是另一个问题。

票数 1
EN

Stack Overflow用户

发布于 2019-02-07 17:32:24

在mySQL / MariaDB中,这是可行的:

代码语言:javascript
复制
select ...
from ...
where date >= DATE_ADD(CURDATE(), INTERVAL -30 DAY)

但我们需要知道您使用的是哪个数据库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54570034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档