ABAP基础:数据类型及关键字总结
作者:mmseoamin日期:2023-12-18

1、数据类型-Data Type

定义程序中可以使用的数据类型,使用前要先定义;利用 TYPES语句声明数据类型,只能在该程序中使用。 TYPES可用来声明TABLE、WORK、AREA的数据,不占内存 示例:   TYPES:BEGIN OF ty_table.            TYPES: name_first TYPE but000-name_first.            TYPES: name_last TYPE but000-name_last.                         INCLUDE TYPE zibf_s_006.            TYPES: END OF ty_table. ABAP基本数据类型: ABAP基础:数据类型及关键字总结,第1张 ABAP基础:数据类型及关键字总结,第2张 ABAP基础:数据类型及关键字总结,第3张 2、数据变量: 数据变量是在程序中参照数据类型定义的值。 常用方法是用 Data语句定义变量。 注意:变量实际指数据对象,数据对象在程序执行期间占用内存空间 ABAP基础:数据类型及关键字总结,第4张 3、DATA语句: 用于定义数据变量,变量名可以包含_, 长度最长30位。 DATA  <变量名>(长度)  TYPE  <数据类型>  VALUE  < 初始值 >
  • TYPE——定义变量数据类型
  • LIKE——定义与前一个变量相同类型变量
  • VALUE——设置变量初始值
  • LENGTH——指定变量字段长度,仅适用【C/N/P/X】类型
  • DECIMALS——指定1-14位小数,仅适用【P】类型 CONSTANTS——声明变量。【 CONSTANT <变量名>(长度) TYPE <数据类型> VALUE <默认值> 】 WRITE——输出变量。【WRITE  / <变量>.多个加“:”】 指针类型定义:     FIELD-SYMBOLS:   TYPE any. 类型转换—— DESCRIBE FIELD    TYPE any. TABLES: 定义数据表、视图、结构体。 4、数据类型转换:
    • 浮点数—— 转换成char类型            function  QSS0_FLTP_TO_CHAR_CONVERSION
      • char类型 —— 转换成 浮点数            function  QSS0_CHAR_FLTP_CONVERSION ABAP基础:数据类型及关键字总结,第5张 5、判断字符串数据类型是否为数字 function   NUMERIC_CHECK     ABAP基础:数据类型及关键字总结,第6张 注:【如果是纯数字 没有小数点,这么判断是可以的(注意NUMC是会自动补0的,仅用于判断类型没问题),但是如果有小数就会变成CHAR】 另一种判断方法: IF cl_abap_matcher=>matches(   pattern = '^(-?[1-9]\d*(\.\d*[1-9])?)|(-?0\.\d*[1-9])$'   text = '数字' ) = abap_true. ENDIF. 6、 最常用的系统变量有: SY-SUBRC:  系统执行某指令后,表示执行成功与否的变量,’0’ 表示成功 SY-UNAME:  当前使用者登入SAP的USERNAME; SY-DATUM:  当前系统日期;( SY-DATLO ) SY-UZEIT:  当前系统时间;( SY-TIMLO ) SY-TCODE:  当前执行程序的Transaction code SY-REPID:  ABAP 程式名,目前的主程式 SY-CPROG:  ABAP 程式名 SY-SYSID : R/3 系統,R/3 系統名稱, SY-UCOMM:   画面,PAI 驱动的功能代码,一般用來參照定义变量 SY-INDEX :  当前LOOP循环过的次数   READ TABLE it_po INDEX 1  此時變量值1           SY-TABIX:  当前处理的是internal table 的第几笔 7、字符串操作关键字
        • 拼接—— CONCATENATE str1 str2 into str SEPARATED BY   ' '. 【SEPARATED BY 指的是两个字符串合并按照指定空格或其他符号 】【 CONCATENATE str1 str2 into str  RESPECTING BLANKS   运用是会在拼接时保留字符串前后空格】
        • 拆分—— SPLIT str AT space into str1 str2. 【按照space空格或者其他符号进行拆分】
        • 去除空格—— CONDENSE str.【每个连接字符串中间会保留一个空格】【后面加“ NO-GAPS ”所有空格去除】
        • 转换—— TRANSLATE str TO UPPER/LOWER CASE. 【大小写转换】            STR = 'Barbcbdbarb'.             TRANSLATE STR  USING 'ABBAabba'.            ABAP基础:数据类型及关键字总结,第7张
          • 取字符串长度—— STRLEN.【len = strlen( str )  长度获取数据类型必须是C/N/D/T】 ABAP基础:数据类型及关键字总结,第8张
            • 截取字符串           ABAP基础:数据类型及关键字总结,第9张 8、字符串操作符号
              操作符 说明 示例 含义
              CO 操作字符串1中每个字符都在操作字符串2中存在,则表达式为true,反之为false.表达式为true时sy-fdpos = 操作字符串1的长度 ,为false时,sy-fdpos =  操作字符串1中不在操作字符串2中的字符所在作字符串1中第一个位置。 s1 CO s2 如果s1仅包含s2中的字符,逻辑表达式为真
              CN 操作字符串1中不是每个字符都在操作字符串2中存在,则表达式为true,反之为false.表达式为false时sy-fdpos = 操作字符串1的长度 ,为true时,sy-fdpos =  操作字符串1中不在操作字符串2中的字符所在作字符串1中第一个位置。 s1 CN s2 如果s1还包含s2之外的字符,逻辑表达式为真
              CA 操作字符串1中任意字符在操作字符串2中存在,则表达式为true,sy-fdpos = 第一个出现在操作字符串2中的字符所在操作字符串1中的第一个位置。反之为false ,sy-fdpos = 操作字符串1长度。 s1 CA s2 如果s1包含任何一个s2中的字符,逻辑表达式为真
              NA 操作字符串1中任意字符在操作字符串2中不存在,则表达式为true,sy-fdpos = 操作字符串1长度。反之为false ,sy-fdpos = 第一个出现在操作字符串2中的字符所在操作字符串1中的第一个位置。 s1 NA s2 如果s1不包含s2的任何字符,逻辑表达式为真
              CS 操作字符串1中任意字符串在操作字符串2中存在,则表达式为true,sy-fdpos = 第一个出现在操作字符串2中的字符串的第一个字符所在操作字符串1中的第一个位置。反之为false ,sy-fdpos = 操作字符串1长度。如果操作字符串1为空操作字符串2不空则表达式为false,sy-fdpos = 0. s1 CS s2 如果s1包含字符串s2,逻辑表达式为真
              NS  操作字符串1中任意字符串在操作字符串2中不存在,则表达式为true,sy-fdpos = 操作字符串1长度。反之为false ,sy-fdpos = 第一个出现在操作字符串2中的字符串的第一个字符所在操作字符串1中的第一个位置。 s1 NS s2 如果s1不包含字符串s2,逻辑表达式为真
              CP  操作字符串1与操作字符串2中字符完全匹配,操作字符串2中输入通配符 “*”代表任意字符串,“+”任意字符。如果匹配则表达式为true,sy-fdpos = 操作字符串1中与操作字符串2中除操作通配符外的第一个字符位置。反之为false ,sy-fdpos =操作字符串1的长度。 s1 CP s2 如果s1包含模式s2,逻辑表达式为真
              NP   操作字符串1与操作字符串2中字符不完全匹配,操作字符串2中输入通配符 “*”代表任意字符串,“+”任意字符。如果匹配则表达式为true,sy-fdpos =操作字符串1的长度。反之为false ,sy-fdpos = 操作字符串1中与操作字符串2中除操作通配符外的第一个字符位置。 s1 NP s2 如果s1不包含模式s2,逻辑表达式为真
              注: 【CO,CN,CA,NA比较时区分大小写,且尾部空格也在比较范围之内,CS,NS,CP,NP比较时忽略尾部空格且不区分大小写,比较结束后,如果结果为真,SY-FDPOS将给出s2在s1中的偏移量信息.模式表示可以使用通配符,”*”用于替代任何字符串,”+”用于替代单个字符.】 option可以取以下值:          'EQ' , 'NE'    等于,不等于          'GT' , 'LT'     大于 ,小于          'GE' , 'LE'     大于等于,小于等于          'CP' ,  'NP'               'BT' ,  'NB' 9、算术运算关键字与函数 数字运算:
              • ABS, 返回绝对值, ABS(-100)renturn 100
              • SIGN, 返回符号, 负数return -1, 0 return 0, 整数return 1
              • CEIL, 返回不小于该值的最小整数, ceil*1.3) ceil(1.7) 返回最小整数2
              • FLOOR, 返回不大于该值的最大整数, floor(1.3) ceil(1.7) 返回整数1
              • TRUNC取整, trunc(1.3) trunc(1.7)返回整数1
              • FRAC取小数, frac('2.9') 返回0.9
              • DIV—— c = a div b,得到的c的值就是a除b的商。
              • /—— c = a / b,如果c是i数据类型的,这个语法会进行四舍五入的。
              • MOD—— c = a mod b,得到的c的值的就是a除b的余数。 浮点函数:
                • ACOS/ASIG/ATAN/COS/SIN/TAN三角函数
                • COSH/SIGNH/TANH 双曲线函数
                • EXP 指数函数
                • LOG 自然对数函数, 以e为底
                • LOG10 常用对数函数, 以10为底
                • SQRT 平方根函数, 开方 结构体计算:ADD-CORRESPONDING(加)、ADD TO                       SUBTRACT-CORRESPONDING(减)、subtract from m-n                     MULTIPLAY-CORRESPONDING(乘)、MULTIPLY BY                     DIVIDE-CORRESPONDING(除)。DIVIDE BY M/N 10、内表与数据表操作关键字
                  • APPEND:将结构内容附加到内部表。本操作仅可针对标准表进行。 【COLLECT[ INTO ] 计算字段之和】                   append to    “ 不带表头行的填充                   append                 “ 带隐式表头行的填充                   APPEND LINES OF:将内部表中若干行的内容附加到另一个标准表。
                    • INSERT:将结构内容插入内部表、数据库表。(数据库表、内表不存在的数据)                  INSERT INTO dbtab VALUES wa.                  INSERT INTO dbtab FROM wa.                  INSERT dbtab FROM TABLES itab.                  INSERT dbtab FROM TABLE itab ACCEPTING DUPLICATE KEYS. 【ACCEPTING DUPLICATE的效果是:若出现关键字相同,返回4,并跳过其再更新所有的其他。】
                      • MODIFY:利用结构内容覆盖内部表行。                  MODIFY dbtab FROM wa.                  MODIFY dbtab FROM TABLE itab.
                        • UPDATE:将结构更新到数据库表中(数据库表、内表中已经存在的数据)                  UPDATE dbtab SET f1=g1 ... fn=gn WHERE . UPDATE dbtab FROM wa.                  UPDATE dbtab SET f1=g1 ... fi=gi [WHERE ]. UPDATE target FROM TABLE itab.
                          • MOVE: 整体复制内表,目标内表原有内容被覆盖。                  MOVE TO         不带表头行的内表之间进行复制                  MOVE [] TO [].   带表头行的内表之间进行复制                  MOVE TO [].    不带表头行的内表复制到带表头行的内表                  MOVE-CORRESPONDING TO 复制内表1中与内表2具有相同结构的字段进行复制,同样适用于工作区
                            • SORT:排序ASCENDING和DESCENDING指定升序还是降序排列,如果不指定,缺省排序方式是升序                SORT [ASCENDING | DESCENDING] [AS TEXT ]  【TEXT按照字段排序,不指定按照内部编码或语言首字母字符排序】
                              • READ TABLE:将表行内容复制给结构。(WITH KEY :数据关键字;WITH TABLE KEY:表关键字)                  READ TABLE [INTO ] WITH KEY [BINARY SEARCH].                  READ TABLE [INTO ] INDEX .
                                • LOOP AT .. . ENDLOOP:LOOP 语句会将内部表的表行逐行放置到在INTO 子句中指定的结构内。在LOOP 中,可输出或更改结构的当前内容,并写回表中。                  Loop at into .                                           endloop.                                     “ 带表头行的内表循环操作                  Loop at .                                         endloop.                                     “ 不带表头行内表操作             循环体的 MODIFY,DELETE等语句不必指定 INDEX项,系统默认处理当前行 .             如果不需要读取所有的内表行,可以使用 WHERE选项进行限制              LOOP AT [WHERE ]
                                  • DELETE:删除内部表中满足逻辑条件 的所有行。                  DELETE FROM dbtab WHERE . 删除单行数据                         或 DELETE dbtab FROM wa.                  DELETE FROM dbtab WHERE .  删除多行数据:                  DELETE dbtab [CLIENT SPECIFIED] FROM TABLE itab.                     DELETE .在循环中删除行                 DELETE INDEX . 用索引删除行                  DELETE ADJACENT DUPLICATE ENTRIES FROM [COMPARING ].     删除邻近的 重复条目                 DELETE [ FROM 1>] [ TO 2>] [ WHERE ].删除选定行
                                    • CLEAR/REFRESH/FREE:清空数据                  clear itab. 清表头(如果没有表头,清表体) 保存内存区                  clear itab[]. 清表体 保存内存区                  refresh itab. = clear itab[]. 清表体 保存内存区                  free itab. 清表体 同时释放内存区 11、数据库关联关系