abap - 选择到深层结构
问题描述
我对 ABAP 比较陌生,所以我仍然需要习惯内部表等,所以目前我在如何在 ABAP 中使用 SQL 来填充嵌套结构时有点挣扎。
例如:
TYPES: BEGIN of <<mystructure>>,
someID type sometype,
relatedItemsInDataModel type table of sometabletype,
END of <<mystructure>>.
DATA wa type <<mystructure>>.
<<SELECT INTO STATEMENT>>
DATA(lv_json) = /ui2/cl_json=>serialize( data = wa compress abap_true ... ).
所以基本上,我在字典中有一个表(A),它与另一个表(B)有一对多的关系,我想选择 A 中的所有项目,并且 AI 中的每个项目都想选择所有相关的该记录的 B 项。
我想这样做的原因是因为我后来想将该数据转换为 JSON,如下所示:
[
{
"someID": "someValue",
"relatedItemsInDataModel": [{...}, {...}]
},
{
"someID": "someValue2",
"relatedItemsInDataModel": [{...}, {...}, {...}, ...]
},
...
]
那么,我是否首先以正确的方式接近这一点,我怎样才能实现我刚才描述的目标?
解决方案
SELECT
s 只检索平面表。因此,您需要在多个步骤中检索嵌套数据并将其组装到 ABAP 代码中。
您的示例可能如下所示:
DATA the_ids_i_want TYPE RANGE OF sometype.
SELECT <field-list>
FROM table_a
INTO TABLE @DATA(selection_a)
WHERE some_id IN @the_ids_i_want.
SELECT <field-list>
FROM table_b
INTO TABLE @DATA(selection_b)
WHERE parent_id IN @the_ids_i_want.
LOOP AT selection_a INTO DATA(row_a).
DATA(result_row) =
VALUE <<mystructure>>(
some_id = row_a-some_id ).
LOOP AT selection_b INTO DATA(row_b)
WHERE parent_id = row_a-some_id.
INSERT VALUE #(
field_a = row_b-field_a
... )
INTO TABLE row_a-relatedItemsInDataModel.
ENDLOOP.
ENDLOOP.
有很多方面可以优化,具体取决于您的数据。例如,WHERE
条件可能会根据外键关系的类型而有所不同,您可能需要考虑将排序键添加到内部表中以加快LOOP ... WHERE
查找速度,程序集可能会有更短的变体,使用FOR
代替LOOP AT
等 -但基本上,这就是你所需要的。
推荐阅读
- signalr - SignalR 恢复连接
- android - android中水平recyclerview的问题
- sql - 从块中选择一个单词
- c - 在 C 中使用 malloc 后需要将变量分配给数组
- asp.net-mvc - 无法使用 webAPI 将文件夹文件上传到 .Net MVC 中的 Google Drive?
- html - 我想在单击按钮时隐藏和显示输入字段
- swift - 致命异常:使用格式化程序将字符串转换为日期时出现 NSInternalInconsistencyException
- sql - SQL中如何将表名作为参数传递并更新表名
- excel - Excel找到最后3个数字的中位数?
- python - 通过鼠标单击将图像的坐标分配给变量