大家好,
在为HANA迁移项目的套件工作时,作为一名ABAPer,我需要执行"代码修正"活动,并且必须对ABAP代码进行一些更改,企业开发软件,以避免迁移到HANA时出现潜在的功能问题。
最初,在开始我的项目活动之前,我参考了许多SAP博客和SAP学习中心的资料。现在,根据我的工作经验和来自多个SAP博客的参考资料,我准备了一份在进行补救和代码更改时要遵循的指南列表。我也有相同的看法。
1)问题:
如果使用SELECT SINGLE语句,并且WHERE条件不唯一,则结果将不明确。(要点:选择单个)
指南:
选择单个文件名称案例:检查WHERE子句是否对DB表的所有键字段都有"="或"EQ"检查。如果WHERE子句中的所有键字段都带有"EQ"或"="复选框,则select是唯一的,不需要"ORDER BY PRIMARY key"。但如果选择不是唯一的,则结果将是不明确的,应予以纠正。*****************************************************************************选择单个*案例:检查WHERE子句是否对DB表的所有键字段都有"="或"EQ"检查。如果WHERE子句中的所有键字段都带有"EQ"或"="复选框,则select是唯一的,淘客文案,不需要"ORDER BY PRIMARY key"。但如果选择不唯一,则结果将不明确,应予以更正。
建议解决方案:
选择单个文件名案例:如果需要,更正将是:
选择field1 field2…。从数据库表…。西澳州其中条件1…。按主键排序。出口。ENDSELECT.或
选择field1 field2…。最多1行到表itab的相应字段中从dbtable WHERE condition1…。按主键排序。将表itab读入wa索引1。************************************************选择单个*案例:如果需要,更正将是:
选择*最多1行…。从数据库表…。西澳州其中条件1…。按主键排序。ENDSELECT.或
从dbtable选择*表itab中最多1行其中条件1…。按主键排序。将表itab读入wa索引1.
2)问题:
依赖SELECT语句的隐式排序。(关键点:按主键排序)
指导原则:
有一种常见的观点,即SELECT语句返回按所用语句隐式排序的结果索引。另一个通常认为,云呢拿,池/集群表上的SELECT语句总是按主键排序返回。HANA遵循SQL标准。SQL标准不能保证数据库的隐式行为。SQL标准要求ORDER BY语句返回排序的结果集。
此问题可以在以下模式中找到:–阅读…。语句结果的二进制搜索–删除语句结果的相邻重复项–阅读表格…。索引…。–修改/删除SELECT语句结果的索引–删除语句结果的…FROM/TO–在itab FROM/TO处循环语句结果–在itab循环。在终点。对于语句的结果
建议的解决方案:
总是对DB查询的结果集进行显式排序
示例:选择*…。从数据库表…。进入表itab,大数据时代,其中条件1…按主键排序。
将表itab读入wa,大数据算法,使用键条件二进制搜索或从itab中删除相邻的重复项比较
3)问题:
尽量减少数据传输的次数(关键点:嵌套的SELECT循环和SELECT ENDSELECT循环)
准则:
此规则适用于数据库和应用服务器之间发生大量跳闸的情况。这妨碍了程序的执行。这样的编码实例需要通过使用连接来更改a) 而不是嵌套的选择循环,b) 避免SELECT ENDSELECT循环和c) 优先选择CRUD(创建、更新、删除)功能的数组操作。
建议解决方案
4)问题:
最小化搜索开销(关键点=1>选择单入环,2>选择无位置,3> MOVE-in-place-MOVE-CORRESPONDING
指南:
推荐解决方案
5)问题:
最小化数据传输量(要点1)避免选择*&2)使用聚合函数)
指南:
从数据库读取数据时,应用程序应仅获取数据以供进一步计算。业务逻辑上的条件应作为WHERE条件或过滤器进行传输,以减少获取的数据量。这可以通过a) 避免选择*,b) 使用MAX、SUM等聚合函数
推荐解决方案
6)问题:
HANA的ABAP优化:ABAP水平的变化–>这些指南建议在ABAP级别进行优化,而无需进入HANA modeler,可以从HANA中获益。
(要点=1)BAPI/FM在循环中,2)表缓冲区旁路和3)逻辑数据库使用)
指南:
建议解决方案
7)问题
HANA的ABAP优化:HANA级别的更改:为了从HANA中获得最大的好处,我们需要在modeler端创建工件,这可能需要使用存储过程和工件大量更改代码,而不是ABAP级应用程序编程。
**要点->>对所有条目限制使用>>在同一数据库表上重复点击>>嵌套选择/循环>>聚合使用>>货币转换格式
指南:
建议解决方案
8)问题
保持结果集较小(关键点=检查/退出循环)
指南:
不要从数据库检索记录,并使用检查或退出循环将其丢弃在应用程序服务器中。通过正确使用WHERE子句只检索必要的记录。这样,结果集就尽可能小,传输的数据量也就减少了。
建议的解决方案:
必须正确使用Where子句来限制不必要的记录传输到应用服务器
9)问题
访问物理表池/群集
指导原则: