Abap 选择进入深层结构
我对ABAP比较陌生,所以我仍然需要习惯内部表格之类的东西, 因此,目前我正在努力研究如何在ABAP中使用SQL来填充嵌套结构 例如:Abap 选择进入深层结构,abap,opensql,Abap,Opensql,我对ABAP比较陌生,所以我仍然需要习惯内部表格之类的东西, 因此,目前我正在努力研究如何在ABAP中使用SQL来填充嵌套结构 例如: TYPES: BEGIN of <<mystructure>>, someID type sometype, relatedItemsInDataModel type table of sometabletype, END of <<mystructure>>. D
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 ... ).
那么,首先,我的方法正确吗?我如何才能实现我刚才描述的目标?选择仅检索平面表。因此,您需要分多个步骤检索嵌套数据,并将其组装到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.
根据您的数据,有许多方面可以优化。例如,其中的条件可能取决于外键关系的类型,您可能需要考虑将排序键添加到内部表以加快循环。在查找中,程序集可能有较短的变体,使用for而不是LOOP AT等。但基本上,这是您所需要的。仅选择检索平面表格。因此,您需要分多个步骤检索嵌套数据,并将其组装到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.
根据您的数据,有许多方面可以优化。例如,其中的条件可能取决于外键关系的类型,您可能需要考虑将排序键添加到内部表以加快循环。在查找中,程序集可能有较短的变体,使用for而不是LOOP AT等-但基本上,这就是您所需要的。我认为不可能用标准SQL填充嵌套的结构化结构,因为SQL是关系型而不是层次型的。我认为不可能用标准SQL填充嵌套的结构化结构,因为SQL是关系型而不是层次型的。非常感谢!我自己也找到了一个类似的解决方案,但你的回答很好地解释了这一点。非常感谢,非常感谢!我自己也找到了一个类似的解决方案,但你的回答很好地解释了这一点。谢谢。