点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
你好
我尝试解决的问题:我有一个数据库表,例如 50列。出于性能原因,我想创建一个内部表,其中包含这些列的子集(n <50)。
数据负载巨大,我想减少计算时间(对ITab的操作) )和" RAM浪费",只需选择真正需要的列即可。
因此列数取决于用户交互(n可以在1到50之间)。
首先,我尝试使用了以下方法,这些方法不适用于所有表(SELECT问题会导致某些表出现Unicode异常):
cl_abap_typedescr => describe_by_name('tablename')< br> cl_alv_table_create => create_dynamic_table
第二次尝试时,我仅使用RTTI方法(这似乎是解决问题的一种非常聪明的方法):
ref_rowtype?= cl_abap_typedescr => describe_by_name('tablename')
ref_tabletype = cl_abap_tabledescr => create(p_line_type = ref_rowtype)
此解决方案效果很好,但我无法减少列(组件)的数量。
有人知道我如何解决"动态选择列"的问题吗,请:)?
亲切的问候,
Michael Kilger
迈克尔你好,
绝对可以使用RTTI:
BR,
Gábor
不要使用cl_alv_table_create => create_dynamic_table,请使用RTTS cf GáborMárián答案(又名RTTC,RTTI)。
HelloGábor,
您的解决方案建议很好。
我不知道如何使用修改后的组件-Tab。
因此,使用方法调用" CL_ABAP_STRUCTDESCR => GET(导出P_COMPONENTS = lit_Components)"(在前面的步骤中修改了lit_Components)是缺少的链接。
非常感谢!
对您(以及所有回答:)的人表示敬意,
Michael Kilger
如果您尝试从数据库表中删除未使用的组件,我建议以相反的方式进行操作:
1。 从数据库表名称中获取所有组件。
2。 取用户选择的列,然后在步骤1中检查是否存在。
3。 创建一个新的表类型,其中包含在步骤2中收集的组件的子集。
很成功。 :-)
在这种情况下,您应该关闭该主题,这样对于每个人来说都很明显,它已经得到了回答。
一周热门 更多>