内联声明的表,其中包含SQL查询的结果。 可以在子例程中使用它吗?

2020-08-18 01:27发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)专家您好, 在进行SQL查询时...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好,

在进行SQL查询时,我一直非常享受ABAP 7.40的功能,而不必担心耗时的类型声明。

能够做这样的事情真是太好了(Horst Keller关于主机表达式的博客文章中的示例):

选择carrid,connid,cityfrom,cityto
从spfli
在哪里carrid =
@(值spfli-carrid(carrier [键名
carrname =名称] -carrid
可选) )
插入表@DATA(结果)。

我的问题是,假设我做了这个SQL,然后我想使用新创建的内部表 result 作为子例程的参数。 问题是,该表是内联创建的,没有类型。 有没有一种方法可以将其传递给子例程,使我可以循环,直接访问字段等?

谢谢很多人

7条回答
暮风yp
2020-08-18 02:09

Hello Horst,

我阅读了文档,现在我看到目标内联声明是从结果集中派生的,这当然是有道理的。 感谢您指出子例程已过时! 我仍然经常在工作中看到它们,这就是为什么我仍然不喜欢它们的原因。

无论如何,如果我将SQL的内联结果表作为参数传递给方法,我仍然必须将其作为通用类型(如TYPE ANY TABLE等)传递,对吗? 如果类型是由编译器在内联声明中静态派生的,那么为什么涉及参数的泛型类型呢? 编译器不能像内联声明中那样推断类型吗?

我个人认为,将内联与新的构造函数表达式结合使用起来使ABAP的编程变得轻而易举,并且与声明类型和助手的"传统方式"相比,更加有趣。 我认为能够内联SQL结果表并避免费力地为4个表联接定义结构类型,以便将其传递给具有完全静态类型的方法的机械部分,将是很棒的。 动态键入几乎结束了使用内联的直接性,对吗? 如果我只是"手动"声明类型,则在可能进行完全键入的情况下使用泛型键入是完全错误的。

只是我的意见。 您可能会说,我认为类型的声明很无聊,呵呵

一周热门 更多>