理论教育 应用技术:SELECT语句中的技巧与优化建议

应用技术:SELECT语句中的技巧与优化建议

时间:2023-06-12 理论教育 版权反馈
【摘要】:SELECT SINGLE WHERE条件要确定唯一记录;SELECT UP TO 1 ROWS可以确定多条记录,只取第一条,一般用来进行存在性检查。最多占4个占位符,一个&为50个字节长,加上MESSAGE自身共有的长度为240。向LOOP套SELECT的时候用2个表,为了提升效率用FOR ALL ENTRIES。

应用技术:SELECT语句中的技巧与优化建议

1.自定义搜索帮助有几种方式?如何实现?

■SE11创建搜索帮助。

■调用函数F4IF_INT_TABLE_VALUE_REQUEST。

在POV中或者AT SELECTION-SCREEN ON VALUE-REQUEST FOR中使用自定义的搜索帮助可以使用函数“F4IF_FIELD_VALUE_REQUEST”。

2.怎么创建编码范围(Number Range)?

首先使用事务代码SNUM/SNRO创建,在使用编码范围的编号时,需要首先将其锁定(函数:NUMBER_RANGE_ENQUEUE),然后取出编号(函数:NUMBER_GET_NEXT),最后解锁(函数:NUMBER_RANGE_DEQUEUE)。

3.函数中,如何给出错误消息?

有以下两种方式:

■在TABLES参数中增加返回表(Return Table),可以将执行过程中产生的错误消息返回,在函数外对返回表做处理。

■定义EXCEPTION,当出现错误时,用RASING语句抛异常,RASING语句会直接影响SY-SUBRC的值,函数外可以直接根据SY-SUBRC来做处理。

4.如何优化ABAP程序?

■可通过运行事务代码SE30,运行待检查的程序,查看各操作的百分比

■避免在循环语句中使用SELECT语句,而是通过FOR ALL ENTRIES IN语句抽取数据到内表中。

■通过运行事务代码SLIN进行扩展检查,根据SAP提供的反馈信息优化代码。

5.前导零的处理方式

CALL FUNCTION‘CONVERSION_EXIT_ALPHA_INPUT’添加前导0

CALL FUNCTION‘CONVERSION_EXIT_ALPHA_OUTPUT’去掉前导0

SHIFT物料编码LEFT DELETING LEADING '0'.去掉前导0

6.怎样从文件服务器上读取文件?怎样写文件到文件服务器上?

从服务器上打开文件时,要确定文件的操作方式,调用语句:

从服务器上读取文件时,access用output替换,再调用语句:

写文件到服务器上access用input替换,再在调用语句:

7.在使用ABAP内存的程序间进行数据交换时用到的两个语句是什么?

EXPORT TO MEMORY ID用于将数据复制到ABAP内存,IMPORT FROM MEMORY ID用于将数据从ABAP内存复制到程序中。

在ABAP内存间进行交换的数据必须在两个程序中都进行声明,并包含同样的数据声明。8.SELECT SINGLE和SELECT UP TO 1 ROWS的区别是什么?

SELECT SINGLE WHERE条件要确定唯一记录;SELECT UP TO 1 ROWS可以确定多条记录,只取第一条,一般用来进行存在性检查。

9.清空内表命令CLEAR、REFRESH和FREE的区别?

如果内表有表头行:

CLEAR ITAB同时清空内表数据行和表头行的内容;

CLEAR ITAB[]只清空内表本身,保留表头行的内容;

REFRESH只清空内表本身,保留表头行的内容。

如果内表没有表头行:

CLEAR和REFRESH一样,清空内表。

CLEAR ITAB.:带表头行时只清空表头行,不带表头行时清空整个内表。

CLEAR ITAB[].:只清空整个内表对象数据,不清空表头行。

REFRESH ITAB或REFRESH ITAB[].:只清空整个内表对象数据,不清空表头行。

FREE ITAB.或FREE ITAB[].:只清空整个内表对象数据,不清空表头行,同时释放内存。

10.FORM中USING、CHANGING、USING VALUE、CHANGING VALUE的区别?

■USING、CHANGING引用传递,改变值。

■USING VALUE值传递,值不改变。

■CHANGING VALUE值传递,当正常结束后值改变。

11.MESSAGE参数最多几个占位符,占位符对应的消息文本长度最长?屏幕显示消息文本的长度最长?

最多占4个占位符,一个&为50个字节长,加上MESSAGE自身共有的长度为240。

所有的消息都存储在系统数据库表T100中,该表包括四个字段:

SPRSL(Language Key):语言代码。

ARBGB(Message class):消息类,用于将消息按应用分类储存。(www.daowen.com)

MSGNR(Message number):三个数字的消息序列号

TEXT(Message text):消息文本,是显示在屏幕中的信息文字,最多可以有72个字符。

消息类型共六种:A(终止)、E(错误)、I(信息)、S(成功)、W(警告)、X(退出)。

12.使用FOR ALL ENTRIES时的注意事项有哪些?

类似外连接的时候,用一个表的某一字段为条件,从另一数据库表中取得数据。

向LOOP套SELECT的时候用2个表,为了提升效率用FOR ALL ENTRIES。

■使用前要检查内表是否为空,否则会查询出全部数据。

■要尽可能多的用关键字,否则会把重复的删掉。

■此子句中不能使用LIKE、BETWEEN、IN、ORDER BY。

13.删除内表重复数据前应该做什么,如果要按照给定字段如何删除?

删除前应做SORT排序,如果要按照给定字段进行删除则需要COMPARING语句指定字段。

14.哈希表和排序表的注意事项是什么?

排序表(SORTED TABLE)与标准表相同,也具有一个逻辑索引,但其按关键字升序排序后再进行存储,其访问方式与标准表相同。

哈希表(HASHED TABLE)没有索引,只能通过关键字来访问。系统用哈希算法管理表中的数据,因而其检索到一个数据行的时间与表的行数无关。

15.怎样做带按钮的选择画面?

类似CHECKBOX和RADIOBUTTON,可通过PARAMETER进行设置。

16.求和函数(COLLECT)的注意事项?

■所附加的内表必须具有扁平结构(组件中不可包含内表)。

■工作区必须与内表的行类型兼容(不仅仅是可相互转换)。

■所有的非表关键字段必须是数字类型。

■将新行附加至内表末尾,已存在相同表关键字值的行,不附加新行,而是将数字字段的值累计到已有数据行。

17.请列举ABAP程序的运行方式?它们一般表现为什么类型的程序?

可以分配事务代码并通过事务代码运行,用于完成一项系统功能,可以添加到最终用户的系统定制菜单中。

可执行程序(Report):模块池程序。

不能直接通过事务代码运行的程序:功能组、ABAP类库、ABAP接口库、子程序、类型组包含程序。

18.COLLECT和APPEND的区别,以及COLLECT命令的限制是什么?

要逐行填充内表,可以使用APPEND、COLLECT或INSERT语句。COLLECT用于添加无相同表关键字的内表行,APPEND可以添加相同表关键字的内表行。

COLLECT命令的限制事项:

■要填充没有重复条目的内表,应该使用COLLECT。

■COLLECT语句无法用于带深层结构的内表(组件中不可以包含内表)。

■为COLLECT指定的工作区域必须与内表的行类型兼容(不仅仅是可互相转换)。

■所有的非表关键字段必须是数字类型。

19.APPEND与INSERT对内表操作的区别?

语法:

前者不能用于HASHED表,后者不能用于SORTED表的NON-UNIQUE操作。

20.排序表还能插入和删除吗?

语法是允许的,但是规范里不推荐。因为会引起索引重排而导致的性能问题。

21.AT FIRST、AT NEW、AT END OF有什么区别?

■AT FIRST:当前循环为内表的第一行,即当第一次循环操作时,系统会执行控制语句块。

■AT LAST:当前循环为内表的最后一行。

■AT NEW f:行组的开头,行组指的是字段f和f前面(即左边)的全部字段,如果行组中的任何字段内容不同于上一行,执行语句块中的内容。

■AT END OF f:行组的结尾,如果下一行行组中的任何字段内容不同于上一行,执行语句块中的内容。

22.AT NEW、AT END OF指定字段之后的字段将发生怎样的变化,应该注意什么?

在AT/END AT语句块内部,目标区域并没有用当前表格行进行填充,而是将进行下述操作:对于AT FIRST和AT LAST,系统用“*”填充所有标准关键字段内容;对于AT NEW f和AT END OF f,系统用“*”填充目标区域中所有出现在指定字段f后面(右边)的标准关键字段。对于所有非标准关键字段,将进行初始化

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈