1.定义DATA ,TYPES

TYPES关键字用于创建自定义数据类型,就像JAVA里面创建类一样,用TYPES创建的数据类型可以被其它变量引用(类似于实例化对象),而本身不能直接引用或者赋值。

DATA关键字用于定义结构体,可以自定义结构体或者参考某一个自定义类型创建对象,我把它称为实例化对象。

之前看到别人这么说的:

TYPES: 定义的是取款机, 不能直接用以写入数据,还需再定义内表;另TYPES不用于定义单个变量,

DATA: 定义的是人民币,可以直接用以写入数据;单个变量一般用data 定义;

如 data:l_matnr,临时用来记录料号。

2. ABAP中的系统变量SY-INDEX与SY-TABIX

系统变量SY-INDEX与SY-TABIX是用来记录循环的次数或者索引的,

不同的是SY-INDEX在DO....ENDDO中是有效的,
而SY-TABIX在LOOP....ENDLOOP中及READ内表时获取相应的索引。

3. ABAP中USING与CHANGING的用法

ABAP中FORM参数的传递有以下几种方式。

1.  引用传递(CALL BY
REFERENCE)

传递参数时将参数的地址(ADDRESS)传至子程序汇中,也就是子程序中的参数变量与外部程序的参数变量共享地主内的值。又叫CALL
BY ADDRESS,若子程序中的参数变量的值发生了变化,那么,外部程序的实际变量的值也发生改变。

[Syntax]
  FORM <subform> [USING <f1> <f2>...] 
[CHANGING <fr1> <fr2>...] 
 
  PERFORM <subform> [USING <f1> <f2>...]  [CHANGING <fr1>
<fr2>...]

  USING 之后跟随着不会发生变化的子程序参数,CHANGING后面的参数按引用传递,值会随着子程序内的变化而变化。

待续...

1、ST05是用于在开发ABAP程序时,对应事务码取得的字段是“数据结构”而不是“透明表”的时候,通过ST05的“SQL跟踪”来获得相关“Select”的语句;一般查看“REC”列耗时比较多的“Select”语句; 
2、跟踪时如果有涉及到“数量”这类有对数据表进行更新或插入操作的,则直接去查Update和Insert的SQL语句; 
3、在跟踪后,直接双击“对象名”列的名称,点选“表格字段”转到“SE11”的表字段表; 
4、ABAP程序开头的Tables:“数据表名”,只有在屏幕中有用到的表,才需要声明;在程序中用到的表则不需要进行在Tables内声名; 
5、抓SAP“文本”字段的数据,要先自定义变量,然后通过SE37的函数“FUNCTION ’ZREAD_TEXT’”取回文本数据; 
6、新建的ABAP程序,在测试运行的时候要先进行“激活”,才能测试运行; 
7、SE93:把ABAP写好的程序指定一个事务码执行; 
8、abap引号内的字符’’必须要是大写; 
9、ABAP select 里面的语句,不能像mssql有那么丰富的函数使用,需要导到内表后再对数据进行操作; 
10、’EQ’是单个数据值,’BT’是between区间的意思。 
11、在写select inner join 里面,要注意是否需要加上销售组织的条件;on 条件1 and 销售组织条件。 
12、SELECTION-SCREEN,里面有两个子项,PARAMETERS和select-options。 
PARAMETERS 一般是用于必输项的屏幕参数设置,如果这个参数不是必输项的,就要用select-options。在select ...where条件里,用PARAMETERS的条件语法是“数据字段 = 屏幕字段”;而select-options的条件语法是“数据字段 in 屏幕字段”。 
13、在where判断一个日期型数据是空,不是DEAKT = ’’,也不是DEAKT is initial,而应该写成DEAKT = ’00000000’ (8个0)。 
14、一对多的inner join,如果取出的数据有重复,前面加上distinct,用法和MSSQL相同。

15、sy-subrc,指上一个语句执行是否成功;执行成功返回0,执行不成功返回非0。用if判断。

16、如果一个语句中,该名称同时可能代表内表或者同名表工作区,则需要在内表名称之后加“[]”指明当前操作的是内表对象。不提倡使用带有表头行的内表,而是应该总是声明结构相同的其他数据对象作为显示工作区进行内表行操作。

SPLIT 用法

DATA:itab TYPE TABLE OF string,
        wa_str TYPE string .

RANGES: r_lifnr FOR lfa1-lifnr.
*** 物流商

i_lifnr = 'Z004;Z009;Z007......'
  SPLIT i_lifnr AT ';' INTO TABLE itab.
  LOOP AT itab INTO wa_str.
    IF wa_str = 'Z004'.
      r_lifnr-sign = 'I'.
      r_lifnr-option = 'EQ'.
      r_lifnr-low = 'Z009'.
      APPEND r_lifnr.

ENDLOOP.

在SAP中,每一个功能基本上都对应了一个事务代码,你可以输入相应的事务代码来执行相应的功能,事务代码在SAP MENU下面的输入框中输入。
第一个程序,HELLO WORLD:
1.       用ABAP REPORT来实现:
很简单:(1.进入SAP系统—〉SE38 。
        (2.输入程序名z_hello,选择Create 。
注意:自己开发的程序一定要用Z或者Y开头,这是因为SAP在升级的时候不会覆盖这些程序。
               (3.这时会弹出一个对话框,输入TITLE,选择Type为Executable program 。
               (4.然后又会弹出一个对话框,让你选择开发类(Package),如果你有自己的开发类的话,输入就可以,没有直接点下面的Local Object 。
               (5.ABAP编辑器出现了,输入代码:
                  “WRITE: 'HELLO,WORLD!' .” 。
               (6.按Ctrl+F2:语法检查;Ctrl+F3:激活;F8:执行。
到这里,ABAP的第一个程序就写出来了,好简单!!!
2. 用 ABAP DIALOG来实现:
比较麻烦,在这里详细的介绍怎么建立SCREEN,以后就不介绍了
1. 建立一个DIALOG程序,步骤同上,只不过在Type里选择Module pool,
假设程序名为:Z_SCREEN
2. 执行SE51,在Program里输入程序名称:Z_SCREEN;
在screen number里输入屏幕的号码:9000
然后点Create
3. 在short description中输入你的描述:hello world screen
4. 点layout,调出屏幕编辑器,建立一个标签,输入hello world
5. 点激活,或者Ctrl+F3
6. 执行SE93:建立事务代码:输入z_hello,点Create,会出现对话框,输入short text,选择Program and screen,然后输入你建立的程序名以及屏幕号,
这里是Z_SCREEN,9000
7. 点保存,然后会出现对话框,选择LOCAL Object
   好了,执行z_hello,看到了吧,不过这个程序还没有退出的功能,后面会慢慢加上去的。
 
ABAP基础知识学习
SAP ABAP / 4 基础知识学习   
数据类型
C :字符串
D :日期型格式为 YYYYMMDD  例:'1999/12/03'
F : 浮点数长度为8
I :整数
N :数值组成的字符串 如:011,'302'
P : PACKED数用于小数点数值  如:12.00542
T : 时间格式为:HHMMSS 如:'14:03:00'
X : 16进制数 如:'1A03'
*-------------------------------------------------------------------------------------*
变量声明
DATA <F> [<Length>] <type> [<value>][decimals]   小数点右边的位数decimals
     <F> 变量名称
     <length><type> 变量类型及长度
     <value> 初值
     <decimals> 小数位数
     
exp:
   DATA : COUNTER  TYPE P DECIMALS 3,
          NAME(10) TYPE C VALUE 'DELTA',
          S_DATE   TYPE D VALUE '19991203'.
exp:
   DATA : BEGIN OF PERSON,
            NAME(10) TYPE C,
            AGE      TYPE I,
            WEIGHT   TYPE P DECIMALS 2,
          END OF PERSON.
另外,有关DATA声明的指令还有: CONSTANTS(声明常数)、STATICS(临时变量声明).
exp:
CONSTANTS  PI  TYPE  P  DECIMALS  5  VALUE  '3.14159'.
STATICS 关键字
声明的变量仅在目前的程序中使用, 结束后会自动释放 
语法:  
        STATICS <c> [<length>] <type> [<value>] [<decimals>]
系统专用变量说明
   系统内部专门创建了SYST这个STRUCTURE,里面的栏位存放系统变量,常用的系统变量有:
   SY-SUBRC:  系统执行某指令后,表示执行成功与否的变量,'0'表示成功
   SY-UNAME:  当前使用者登入SAP的USERNAME;
   SY-DATUM:  当前系统日期;
   SY-UZEIT:  当前系统时间;
   SY-TCODE:  当前执行程序的Transaction code
   SY-INDEX:  当前LOOP循环过的次数
   SY-TABIX:  当前处理的是internal table 的第几笔
   SY-TMAXL:  Internal table的总笔数
   SY-SROWS:  屏幕总行数;
   SY-SCOLS:  屏幕总列数;
   SY-MANDT:  CLIENT NUMBER
   SY-VLINE:  画竖线
   SY-ULINE:  画横线
   
TYPE 关键字
  用来指定资料型态或声明自定资料型态
  Example:
        TYPES:  BEGIN  OF  MYLIST,
                   NAME(10)  TYPE  C,
                   NUMBER   TYPE  I,
                END  OF  MYLIST.
        DATA  LIST  TYPE  MYLIST.
LIKE 关键字
   跟TYPE关键字使用格式相同, 如
   DATA  TRANSCODE  LIKE  SY-TCODE.
   不同的是 LIKE 用在已有值的资料项, 如系统变量, 而TYPE关键字则是用在指定资料型态。
TABLES 关键字
用来声明 Table Work Area 的数据, 对应至 ABAP/4 资料文件(Dictionary Object), 由SQL 指令加载所需数据
语法:
TABLES <dbtab>
Example:
TABLES: SPFL.
SELECT * FROM SPFL.
WRITE: SPFL-MANDT, SPFL-CARRID,SPFL-CONNECTION.
ENDSELECT.
从ABAP/4 Dictionary 的 SPFL 档载入MANDT,CARRID,CONNECTION 三个字段至SPFL 此Table Work Area
   
*-------------------------------------------------------------------------------------*
输出
一. WRITE 语句
ABAP/4用来在屏幕上输出资料的指令是WRITE指令,例如:
     WRITE: 'USER NAME IS:', SY-UNAME.
二. 指定屏幕输出位置
指定输出位置的语句格式为:
      WRITE: [AT] [ / ] [<pos>] [(<len>)] 资料项 [<par>]
其中: / : 在下一行输出
<pos>: 指定输出的行号;
(<len>):指定输出位数(长度)
<par>: 指定显示格式参数,参数有:
          LEFT-JUSTIFIED  资料*左对齐
          CENTERED        资料*中间对齐
          RIGHT-JUSTIFIED 资料*右对齐
          UNDER <g>       正对在资料项<g>的下面显示
          NO-GAP          紧接着显示,不留空格
          USING EDIT MASK <m>: 使用内嵌子元显示, 如 12:03:20
          USING NO EDIT MASK: 不使用内嵌子元
          NO-ZER          数字前面 0 的部分不显示
          NO-SIGN:        不显示正负号
          DECIMALS <d>:   显示 <d> 位小数
          EXPOENT <e>:    F(浮点数)指数的值
          ROUND <r>:      四舍五入至小数点后<r>位
          CURRENCY <c>:   币别显示
          DD/MM/YY :      日期显示格式
          MM/DD/YY:       
          YY/MM/DD: 
          YY/DD/MM
          MM/DD/YYYY:
          DD/MM/YYYY
          YYYY/MM/DD:
          YYYY/DD/MM:
例如1: WRITE: /10(6) 'ABCDEFGHIJK'.
输出结果为:        ABCDEF
例如2: DATA: X TYPE I VALUE '11:20:30',
             A(5)  TYPE C VALUE 'AB  CDE'.
      WRITE: / X USING EDIT MASK '__:__:__'.
      WRITE: / X USING EDIT MASK '$___,___'.
      WRITE: / Y NO-GAP.
输出结果为:
        11:20:30
        $112,030
        ABCDEF
例如3: DATA: LEN TYPE I VALUE 10,
       POS TYPE I VALUE 11,
       TEXT(10)   VALUE '1234567890'
       WRITE 'The text ------------ appears in the text.'.
       WRITE AT POS(LEN) TEXT.
WRITE TO 语句的基本 形式
要将值(文字)或源字段内容写入目标字段,可以使用 WRITE TO 语句:
语法
WRITE <F1> TO <F2> [<option>].
DATA: NUMBER TYPE F VALUE '4.3',
      TEXT(10),
      FLOAT TYPE F,
      PACK  TYPE P DECIMALS 1.
WRITE NUMBER.
WRITE NUMBER TO TEXT EXPONENT 2.
WRITE / TEXT.
WRITE NUMBER TO FLOAT.
WRITE / FLOAT.
WRITE NUMBER TO PACK.
WRITE / PACK.
MOVE NUMBER TO PACK.
WRITE / PACK.
exp:
DATA: NAME(10)   VALUE 'SOURCE',
      SOURCE(10) VALUE 'Antony',
      TARGET(10).
...
WRITE (NAME) TO TARGET.
WRITE: TARGET.
exp :
DATA: COUNTER TYPE I.
COMPUTE COUNTER = COUNTER + 1.
COUNTER = COUNTER + 1.
ADD 1 TO COUNTER.
在此,三条运算语句进行相同算术运算
输出屏幕上的线和空行
用下列语法,可以在输出屏幕上生成水平线:
语法
ULINE [AT [/][<pos>][(<len>)]].
它等同于
WRITE [AT [/][<pos>][(<len>)]] SY-ULINE.
AT 后的格式规范,与在在屏幕上定位 WRITE 输出(页 28)中为 WRITE 语句说明的格式规范完全一样。
如果没有格式规范,系统则开始新的一行,并用水平线填充该行。否则,只按指定输出水平线。
生成水平线的另一种方法,是在 WRITE 语句中键入恰当数量的连字符,如下所示:
WRITE [AT [/][<pos>][(<len>)]] '-----...'.
垂直线
用下列语法 ,可以在输出屏幕上生成垂直线:
语法
WRITE [AT [/][<pos>]] SY-VLINE.

WRITE [AT [/][<pos>]] '|'.
空行
用下列语法 ,可以在输出屏幕上生成空行:
语法
SKIP [<n>].
该语句从当前行开始,在输出屏幕上生成 <n> 个空行。如果没有指定 <n> 的值,就输出一个空行 。
要将输出定位在屏幕的指定行上,请使用:
语法
SKIP TO LINE <n>.
该语句允许将输出位置向上或向下移动。
        
四. 显示图示:
语法: WRITE: <symbol-name> AS SYMBOL.
     WRITE: <icon-name>  AS ICON.
例如: INCLUDE  <SYMBOL>.
     INCLUDE  <ICON>.
WRITE: / 'Phone symbol:', SYM_PHONE AS SYMBOL.
WRITE: / 'Alarm Icon:', ICON_VOICE_OUTPUT AS ICON.
要查看系统所提供有那些符号及图示,可选择'EDIT'下的'Insert Statement',选择'Write',接下来选择要查看的群组,如SYMBOL 或ICON, 接下来按'Display'即可
.
*-------------------------------------------------------------------------------------*
一. Internal Table 的声明
ABAP/4中的Internal Table是一种Data Structure,类似于其他语言中的STRUTURE,它可以由几个不同类型的栏位(field)组成,用来表示具有不同属性的某一事物,
单独一笔资料表示某个事物,多笔资料表示具有相同属性的多个事物.
Internal table 的定义有以下几种格式:
格式一.   DATA: BEGIN OF <internal table>  OCCURS  <n>,
                   <field 1>  TYPE <type1>,
                  [<field 2>  TYPE <type 2>,
                   <field 3>  TYPE <type 3>,
                    …                  ]
                END OF  <internal table>.
     语法:
           DATA  <f>  <type>  OCCURS  <n>  [WITH  HEADER  LINE]
           Example:
                   DATA  VECTOR  TYPE  I  OCCURS  10  WITH  HEADER  LINE.
                   
格式二.   TYPES: BEGIN OF <work area>,
                     <field 1>  TYPE <type1>,
                    [<field 2>  TYPE <type 2>,
                     <field 3>  TYPE <type 3>,
                    …                  ]
                 END OF <work area>.
          TYPES <internal table> TYPE <work area> OCCURS <n>.
          
格式三.   DATA: BEGIN OF <work area>.
                  INCLUDE STRUCTURE <table name>.
          DATA: END OF <work area>.
          DATA: <internal table> LIKE <work area> OCCURS <n>.
exp:
          
TYPES VECTOR TYPE I OCCURS 10.
TYPES: BEGIN OF LINE,
         COLUMN1 TYPE I,
         COLUMN2 TYPE I,
         COLUMN3 TYPE I,
       END OF LINE.
TYPES ITAB TYPE LINE OCCURS 10.
TYPES: BEGIN OF DEEPLINE,
          TABLE1 TYPE VECTOR,
          TABLE2 TYPE ITAB,
       END OF DEEPLINE.
TYPES DEEPTABLE TYPE DEEPLINE OCCURS 10.
本示例创建与上例相同的内表数据类型(VECTOR 和 ITAB)。然后创建数据类型 DEEPLINE 作为字段串,包含这些内表作为组件。通过该字段串,数据类型 
DEEPTABLE 被创建为内表。因此该内表的元素本身就是内表。
exp :
TYPES: BEGIN OF LINE,
         COLUMN1 TYPE I,
         COLUMN2 TYPE I,
         COLUMN3 TYPE I,
       END OF LINE.
TYPES ITAB TYPE LINE OCCURS 10.
DATA TAB1 TYPE ITAB.
DATA TAB2 LIKE TAB1 WITH HEADER LINE.
同创建内表数据类型(页 99)中所示,该示例创建数据类型 ITAB 作为内表。通过使用 DATA 语句的 TYPE 参数引用 ITAB,使数据对象 TAB1 与 ITAB 结构相同
。通过使用 DATA 语句的 LIKE 参数引用 TAB1,使数据对象 TAB2 结构相同。创建的 TAB2 带表头行。因此,可以在程序中使用 TAB2-COLUMN1、TAB2-COLUMN2 
和 TAB2-COLUMN3 等定位表格工作区域 TAB2。
exp :
DATA FLIGHT_TAB LIKE SFLIGHT OCCURS 10.
本示例创建数据对象 FLIGHT_TAB, 其结构与数据库表格 SFLIGHT 相同。
本示例介绍 如何采用两种不同的步骤创建同一内表。
TYPES VECTOR_TYPE TYPE I OCCURS 10.
DATA VECTOR TYPE VECTOR_TYPE WITH HEADER LINE.
在此创建一个内表数据类型 VECTOR_TYPE,其行包含首先创建的基本类型 I 字段。然后,通过引用 VECTOR_TYPE 创建数据对象 VECTOR。通过使用 WITH HEADER 
LINE 选项还创建表格工作区域 VECTOR。在这种情况下,表格工作区域包含一种类型 I 字段,可以通过名称 VECTOR 定位。
DATA VECTOR TYPE I OCCURS 10 WITH HEADER LINE.
在这种情况下,通过直接在 DATA 语句中使用 OCCURS 选项创建完全一样的数据类型 VECTOR。
*-------------------------------------------------------------------------------------*
1. TYPES type. 
2. TYPES type(len).
3. TYPES: BEGIN OF structype  ... 
          END OF structype. 
4. TYPES itabtype {TYPE tabkind OF linetype LIKE tabkind OF lineobj}
         [WITH [UNIQUE|NON-UNIQUE] keydef] [INITIAL SIZE n]. 
5. TYPES itabtype TYPE RANGE OF type.
   TYPES itabtype LIKE RANGE OF f. 
6. TYPES itabtype {TYPE linetype|LIKE lineobj} OCCURS n. 
*-------------------------------------------------------------------------------------*
          
APPEND LINE 
格式:APPEND <work area> TO <internal table>
举例一:(使用WORK AREA)
DATA : BEGIN OF LINE,
             COL1 TYPE I,
             COL2 TYPE I,
       END OF LINE.
DATA ITAB LIKE LINE OCCURS 10.
DO 2 TIMES.
   LINE-COL1 = SY-INDEX.
   LINE-COL2 = SY-INDEX ** 2.
   APPEND LINE TO ITAB.
ENDDO.
LOOP AT ITAB INTO LINE.
     WRITE : / LINE-COL1,LINE-COL2.
ENDLOOP.
举例二 (不使用WORK AREA)
DATA : BEGIN OF ITAB OCCURS 10,
             COL1 TYPE I,
             COL2 TYPE I,
       END OF ITAB.
DO 2 TIMES.
   ITAB-COL1 = SY-INDEX.
   ITAB-COL2 = SY-INDEX ** 2.
   APPEND ITAB.
ENDDO.
LOOP AT ITAB.
     WRITE : / ITAB-COL1,ITAB-COL2.
ENDLOOP.
exp:
DATA: BEGIN OF ITAB OCCURS 10,
        COL1 TYPE C,
        COL2 TYPE I,
      END OF ITAB.
DO 3 TIMES.
  APPEND INITIAL LINE TO ITAB.
  ITAB-COL1 = SY-INDEX. ITAB-COL2 = SY-INDEX ** 2.
  APPEND ITAB.
ENDDO.
LOOP AT ITAB.
  WRITE: / ITAB-COL1, ITAB-COL2.
ENDLOOP.
举例三. (加入另一个Internal table的元素)
       格式: APPEND LINES OF <itab1> [FROM <n1> ] [TO <n2>] TO <itab2>.
       将<itab1>的元素加入至<itab2>中,可选取自<n1>至<n2>的范围.
       APPEND LINES OF ITAB TO JTAB.
COLLECT LINE
COLLECT 指令也是将元素加入Internal table中,与APPEND 的区别是: COLLECT指令在非数值栏位相同的情况下,将数值栏位汇总.
格式:  COLLECT [<work area> INTO ] <itab>
DATA: BEGIN OF ITAB OCCURS 3,
             COL1(3)  TYPE C,
             COL2     TYPE I,
       END OF ITAB.
       ITAB-COL1 = 'ABC'.    ITAB-COL2 = 10.
       COLLECT  ITAB.
       ITAB-COL1 = 'XYZ'.    ITAB-COL2 = 20.
       COLLECT  ITAB.
       ITAB-COL1 = 'ABC'.    ITAB-COL2 = 80.
       COLLECT  ITAB.
此时, internal table中放的是2笔数据, 分别为:
       ITAB-COL1        ITAB-COL2
        'ABC'               90
        'XYZ'               20
*-------------------------------------------------------------------------------------*
INSERT LINE
将元素插入在指定的internal table位置之前.
格式: INSERT [<wa> INTO] [INITIAL LINE INTO ] <itab> [INDEX <idx>]
或者: INSERT LINES OF <itab1> [FROM <n1> TO <n2>] INTO <itab2> INDEX <idx>
其中: <wa>即work area,工作区中的元素.
[INITIAL LINE INTO] :插入一笔初始化的记录.
<itab>: internal table
[INDEX <idx>]: internal table 的记录号.(新加入的元素放在此记录前面)
         Example:
                  DATA:  BEGIN  OF  LINE,
                           COL1  TYPE  I,
                           COL2  TYPE  I,
                           END  OF  LINE.
                  DATA  ITAB  LIKE  LINE  OCCURS  10.
                  DO  3  TIMES.
                     LINE-COL1 = SY-INDEX *10.
                     LINE-COL2 = SY-INDEX *20.
                     APPEND  LINE  INTO  ITAB.
                  ENDDO.
                  LINE-COL1=100.
                  LINE-COL2=200.
                  INSERT  LINE  INTO  ITAB  INDEX  2.  "插入在位置2之前
                  LOOP  AT  ITAB  INTO  LINE.
                    WRITE:  /  SY-TABIX,LINE-COL1,LINE-COL2. "SY-TABIX为Table位置
                 ENDLOOP. 
                 执行结果:
                            1        10       20
                            2       100      200  "插入的元素
                            3        20       40
                            4        30       60
插入另一Internal Table元素
   语法:
         INSERT  LINES  OF  <itab1>  [FROM <n1> TO <n2>]  TO  <itab2>  INDEX <idx>
        将<itab1>的元素插入至<itab2>中, 位置在 <idx>之前, 可选取自<n1>至<n2>的范围
         Example:
                  APPEND  LINES  OF  ITAB  TO  JTAB  INDEX  3.
                  将ITAB所有元素插入JTAB中, 位置在第三个元素之前
*-------------------------------------------------------------------------------------*爱ERP网  www.loveerp.com
读取internal table
格式一: 
LOOP AT <itab> [INTO <wa>][FROM <n1> TO <n2>][WHERE <conditions>]
       <statement>
ENDLOOP.
         Example:
                  LOOP  AT  ITAB  INTO  LINE  WHERE  COL1 &gt;100.
                     WRITE:  /  SY-TABIX,LINE-COL1.
                  ENDLOOP.
                  仅读取 COL1 &gt; 100 的元素
格式二:
READ TABLE <itab> [INTO <wa>] [INDEX <idx> / WITH KEY <conditions>]
举例. (格式二)
DATA: BEGIN OF ITAB OCCURS 10,
             COL1 TYPE I,
             COL2 TYPE I,
      END OF ITAB.
      DO 10 TIMES.
          ITAB-COL1 = SY-INDEX.
          ITAB-COL2 = SY-INDEX * 2.
          APPEND ITAB.
ENDDO.
READ TABLE ITAB INDEX 3.
(或者: READ TABLE  ITAB WITH KEY COL1 = 3.)
WRITE: / 'ITAB-COL1 = ', ITAB-COL1, 'ITAB-COL2 = ', ITAB-COL2.
执行结果同样是: 
ITAB-COL1 = 3
ITAB-COL2 = 6.
         Example:
                   READ  TABLE  ITAB  INTO  LINE  INDEX  5
                   读取 ITAB的第5个元素资料, 放入 LINE的栏位中
根据栏位内容寻找
   语法:
          READ  TABLE  <itab>  INTO  <wa>
          Example:
                  ITAB-COL1 = 'ABC'.
                  READ  TABLE  ITAB  INTO  LINE.
                  找出ITAB 中 COL1 栏位内容是 ABC 的元素, 找到的值放入 LINE 中
                  若找到 SY-SUBRC传回0, 找不到则传回 4, <itab>必须声明有 work area
*-------------------------------------------------------------------------------------*
修改internal table 中的值
格式: MODIFY <itab> [FROM <wa>][INDEX <idx>][TRANSPORTING <f1><f2>…][WHERE <conditions>]
举例一. READ TABLE ITAB INDEX 3.
       LINE-COL1 = 29.
       MODIFY ITAB FROM LINE TRANSPORTING COL1.
       将第三笔记录的COL1栏位的值修改为29.
举例二. T_SALARY - salary = 50.
       MODIFY T_SALARY TRANSPORTING salary WHERE birthday = '1999/12/06'.
       
DELETE internal table中的栏位
格式: DELETE <itab> INDEX <idx>.
或:   DELETE <itab>[FROM <n1> TO <n2>] [WHERE <conditions>]
Internal table 排序  
SORT <itab> [<order way>][BY <f1><f2>…]
其中:<order way> 有DESCENDING 和ASCENDING, Default 为ASCENDING.
     <f1>: 为指定排序的栏位.
        Example: 
                 SORT  ITAB  DESCENDING  BY  COL2.
                 将 ITAB 根据 COL2栏位递减排序
*-------------------------------------------------------------------------------------*
确定内表属性
如果在处理过程中想知道内表一共包含多少行,或者想知道定义的 OCCURS 参数的大小,请使用 DESCRIBE 语句,用法如下:
语法
DESCRIBE TABLE <itab> [LINES <lin>] [OCCURS <occ>].
如果使用 LINES 参数,则将填充行的数量写入变量 <lin>。如果使用 OCCURS 参数,则将行的初始号写入变量 <occ>。
DATA: BEGIN OF LINE,
         COL1 TYPE I,
         COL2 TYPE I,
      END OF LINE.
DATA ITAB LIKE LINE OCCURS 10.
DATA: LIN TYPE I, OCC TYPE I.
DESCRIBE TABLE ITAB LINES LIN OCCURS OCC.
WRITE: / LIN, OCC.
DO 1000 TIMES.
   LINE-COL1 = SY-INDEX.
   LINE-COL2 = SY-INDEX ** 2.
   APPEND LINE TO ITAB.
ENDDO.
DESCRIBE TABLE ITAB LINES LIN OCCURS OCC.
WRITE: / LIN, OCC.
其输出为:
         0         10
     1.000         10
在此创建内表 ITAB。在填充表格前后执行 DESCRIBE 语句。更改当前行号,但无法更改初始行号。
*-------------------------------------------------------------------------------------*
加总
SUM.
总和计算存放与work area中,但只能在LOOP 中使用.
例: LOOP AT ITAB INTO LINE.
         SUM.
   ENDLOOP.
   WRITE: / LINE-COL1, LINE-COL2.
   LINE-COL1 和 LINE-COL2 存数值总和初始化internal table
REFRESH <itab>.  清空<itab>中的值.使用在没有 HEADER LINE 的 Internal Table中, 清除所有元素
CLEAR   <itab>.  清空<itab>的Header Line.使用在有 HEADER LINE 的 Internal Table中, 清除所有元素
FREE    <itab>.  释放内存空间.释放(Release) Internal Table所占的内存空间, 用在 REFRESH和 CLEAR指令之后
将值重置为 默认值
可以用 CLEAR 语句重置任何数据对象值,如下所示:
语法
CLEAR <f>.
exp:
DATA NUMBER TYPE I VALUE '10'.
WRITE NUMBER.
CLEAR NUMBER.
WRITE / NUMBER.
输出为:
        10
         0
CLEAR 语句将字段 NUMBER 的内容从10 重置为默认值 0。
*-------------------------------------------------------------------------------------*
   添加字段顺序并将结果赋给另一个字段
语法
ADD <n1> THEN <n2> UNTIL <nz> GIVING <m>.
如果 <n1>、 <n2>、 ... 、 <nz> 是在内存中相同类型和长度的等距字段序列,则进行求和计算并将结果赋给 <m> 
   添加字段顺序并将结果添加到另一个字段的内容中
语法
ADD <n1> THEN <n2> UNTIL <nz> TO <m>.
该语句除了将字段总和添加到 <m> 的旧内容中之外,与上面语句的工作方式相同 。
有关其它相似变体的信息,参见有关 ADD 语句的关键字文档。
DATA: BEGIN OF SERIES,
         N1 TYPE I VALUE 10,
         N2 TYPE I VALUE 20,
         N3 TYPE I VALUE 30,
         N4 TYPE I VALUE 40,
         N5 TYPE I VALUE 50,
         N6 TYPE I VALUE 60,
      END OF SERIES.
DATA SUM TYPE I.
ADD SERIES-N1 THEN SERIES-N2 UNTIL SERIES-N5 GIVING SUM.
WRITE SUM.
ADD SERIES-N2 THEN SERIES-N3 UNTIL SERIES-N6 TO SUM.
WRITE / SUM.
输出如下:
       150
       350
在此,将 N1 到 N5 组件内容求和并将其值赋给字段 SUM。然后,将 N2 到 N6 组件求和并将其添加到 SUM 的值中。
屏幕输入命令
在ABAP/4中要从屏幕输入变量, 使用的命令是 PARAMETERS 及SELECTION-OPTIONS: 
    1. PARAMETER: 输入一个变量或栏位内容
    2. SELECTION-OPTIONS: 使用条件筛选画面来输入数据    
PARAMETERS 指令
基本的输入命令, 类似如BASIC的INPUT命令, 但无法使用F格式(浮点数)
    语法:
        PARAMETERS  <p>  [DEFAULT <f>]  [LOWER CASE]
                           [OBLIGATORY]  [AS CHECKBOX]
                           [RADIOBUTTON GROUP <rad>] 
       Example:
            PARAMETERS:  NAME(8),
                           AGE  TYPE  I,
                           BIRTH  TYPE  D.
            执行结果:             
在日期的输入格式上为 MM/DD/YY , MM/DD/YYYY, MMDDYY或MMDDYYYY , 如输入 020165 表 1965年02月01日, 与02/01/65的输入是一样的, 日期输入范围为西元
1950年至2049年
1. DEFAULT 
设定输入的预设值
Example:
   PARAMETERS:  COMPANY(20)  DEFAULT  'DELTA',
                BIRTH  TYPE  D  DEFAULT  '19650201'.
2.   LOWER CASE
     ABAP/4预设是将字串输入值自动转换为大写, 加上此参数会将输入的资料转成小写, 
3.   OBLIGATORY
强制要求输入, 屏幕上会出现一个 ? , 使用者必须要输入才可.
4.   AS CHECKBOX
输入 CHECKBOX的格式
Example:
          PARAMETERS:  TAX  AS  CHECKBOX  DEFAULT 'X',
                       NTD  AS  CHECKBOX.
          执行结果:
    
5.    RADIOBUTTON GROUP <rad>
      输入 RADIO BUTTON GROUP 的方式
      Example:
     PARAMETERS: BOY  RADIOBUTTON GROUP  SEX  DEFAULT 'X',         
                   GIRL  RADIOBUTTON GROUP  SEX.
exp :
TABLES SPLFI.
PARAMETERS: LOW  LIKE SPFLI-CARRID, 
            HIGH LIKE SPFLI-CARRID.
SELECT * FROM SPLFI WHERE CARRID BETWEEN LOW AND HIGH.
   ........
ENDSELECT.
*-------------------------------------------------------------------------------------*
   
SELECTION-OPTIONS
   SELECTION-OPTIONS所输入的值实际上是放在internal table中的,该Internal table 有四个栏位,分别是:SIGN,OPTION,LOW,HIGH.. 条件筛选检查条件输入画
面指令, 输入条件后可配合SELECT指令自TABLE读取符合条件的资料, 直接执行或放入 Internal Table中, 条件有四个参数:
1. SIGN: 
     I: 表筛选条件符合的资料
     E: 表筛选条件不符合的资料
2. OPTION: 比较的条件符号
          EQ(等于),NE(不等于),GT(大于),LE(小于),CP(包含),NP(不包含)
3. LOW: 最小值
4. HIGH: 最大值
   语法:
          SELECTION-OPTIONS  <check-option>  FOR  <table-field>
Example:
          TABLES  SPFLI.
          SELECT-OPTIONS  AIRLINE  FOR  SPFLI-CONNID.
将条件的输入值存放入 AIRLINE, 筛选选择为SPFLI中的CONNID栏位
改变条件输入格式
1. DEFAULT  <begin>  TO  <end>
设定开始结束范围输入预设值
     Example:
     SELECT-OPTIONS  AIRLINE  FOR  SPFLI-CONNID DEFAULT  '2042'  TO  '4555'.
2. NO-EXTENSION
设定不要Multi-Option输入画面
3. NO  INTERVALS
设定不要区间范围输入画面
4. LOWER CASE
输入转换成大写
5. OBLIGATORY
强制要求输入
*-------------------------------------------------------------------------------------*
配合 SELECT 命令
   条件输入完后要将符合条件的资料筛选出来, 可配合使用 SELECT 指令
   1.使用WHERE <条件式>
Example:
  TABLES  SPFLI.
  SELECT-OPTIONS  AIRLINE  FOR  SPFLI-CONNID.
  SELECT  *  FROM  SPFLI  WHERE  CONNID  IN  AIRLINE.
       WRITE: / SPFLI-CONNID,SPFLI-CITYFROM,SPFLI-CITYTO.
  ENDSELECT.
2.使用CHECK参数
Example:
  TABLES  SPFLI.
  SELECT-OPTIONS  AIRLINE  FOR  SPFLI-CONNID.
      SELECT  *  FROM  SPFLI.
      CHECK  AIRLINE.
      WRITE: / SPFLI-CONNID,SPFLI-CITYFROM,SPFLI-CITYTO.
  ENDSELECT.
  *
exp:  
TABLES SPFLI.
SELECT-OPTIONS: S_CARRID FOR SPFLI-CARRID,
                S_CITYFR FOR SPFLI-CITYFROM,
                S_CITYTO FOR SPFLI-CITYTO,
                S_CONNID FOR SPFLI-CONNID.
SELECT * FROM SPFLI.
  CHECK: SPFLI-CARRID IN S_CARRID,
       SPFLI-CITYFR IN S_CITYFR,
       SPFLI-CITYTO IN S_CITYTO,
       SPFLI-CONNID IN S_CONNID.
   WRITE: / SPFLI-CARRID, SPFLI-CONNID, 
          SPFLI-CITYFROM, SPFLI-CITYTO.
ENDSELECT.
  
3.使用 IF … IN 关键字
     Example:
         SELECT-OPTIONS  AIRLINE  FOR  SPFLI-CONNID.
         SELECT  *  FROM  SPFLI.
            IF  SPFLI-CONNID  IN  AIRLINE.
              WRITE: / SPFLI-CONNID,SPFLI-CITYFROM,SPFLI-CITYTO.
                ENDIF.
             ENDSELECT.
*-------------------------------------------------------------------------------------*
SELECTION-SCREEN 
    1.产生空白列
语法:
      SELECTION-SCREEN  SKIP  [<n>]
          Example:
                   SELECTION-SCREEN  SKIP  2.
                   产生两列空白列
    2.产生底线
语法:
      SELECTION-SCREEN  ULINE  / <pos>(length)
          Example:
                   SELECTION-SCREEN  ULINE  /10(30).
                   自第10格开始产生长度30的底线
   3.印出备注说明
     语法: 
      SELECTION-SCREEN  COMMENT  / <pos>(length)  <name>
          Example:
                   REMARK = 'Pls enter your name'.
                   SELECTION-SCREEN  COMMENT  /10(30)  REMARK.
    4. 同一列中输入数个资料项
语法:
      SELECTION-SCREEN  BEGIN  OF  LINE.
         ……
      SELECTION-SCREEN  END  OF  LINE.
      Example:
              SELECTION-SCREEN  BEGIN  OF  LINE.
                  SELECTION-SCREEN  POSITION 20.
                  PARAMETERS  NAME(10).
                  SELECTION-SCREEN  POSITION 40.
                  PARAMETERS  BIRTH  TYPE  D.
              SELECTION-SCREEN  END  OF  LINE.
              在20格输入NAME内容, 40格输入 BIRTH的内容
    5. 绘出BLOCK PANEL
语法:
SELECTION-SCREEN  BEGIN  OF  BLOCK  <block>
                      [WITH  FRAME  [TITLE  <title>].
          …….
SELECTION-SCREEN  END  OF  BLOCK  <block>.
Example:
SELECTION-SCREEN  BEGIN  OF  BLOCK  RADIO                          WITH  FRAME .
                  PARAMETER  R1  RADIOBUTTON  GROUP  GR1.
                  PARAMETER  R2  RADIOBUTTON  GROUP  GR1.
                  PARAMETER  R3  RADIOBUTTON  GROUP  GR1.
               SELECTION-SCREEN  END  OF  BLOCK  RADIO.  
*-------------------------------------------------------------------------------------*
SQL语法
     我们在编写ABAP4程序的时候,经常需要从TABLE中根据某些条件读取数据,读取数据最常用的方法就是通过SQL语法实现的。ABAP/4中可以利用SQL语法创建或
读取TABLE,SQL语法分为DDL(DATA DEFINE LANGUAGE)语言和DML(DATA MULTIPULATION LANGUAGE)语言,DDL语言是指数据定义语言,例如CREATE等, DML语言是数
据操作语言,例如SELECT, INSERT等语句。SQL语句有OPEN SQL语句和NATIVE SQL语句。 OPEN SQL语句不是标准SQL语句,是ABAP/4语言,利用OPEN SQL语句能在
Databases 和 Command 之间产生一个BUFFER,所以它有一个语言转换的过程。而NATIVE SQL语句则是标准的SQL语句, 它直接针对Databases操作。
OPEN SQL
SELECT语句
语法格式:
SELECT <result> [INTO <target>] [FROM <source>] [WHERE <condition>]
               [GROUP BY <fields>] [ORDER BY <sort order>]
其中: <result>指定要抓取的栏位
      <target>将读取的记录存放在work area中
      <source>指定从那个TABLE中读取资料
      <condition>抓取资料的条件
      <fields>指定按那些栏位分组
      <sort order>排序的栏位及方式
相关的系统变量:
     SY-SUBRC = 0  表示读取数据成功
              <> 0 表示未找到符合条件的记录
     SY-DBLNT: 被处理过的记录的笔数.
相关的命令:
     EXIT. 退出循环.
     CHECK <logistic statement>.如果逻辑表达式成立,则继续执行,否则,开始下一次循环。
   
利用循环方式读取所有记录
SELECT ….ENDSELECT.是循环方式读取记录的。
     例如:
TABLES MARD.
SELECT [DISTINCT] * FROM MARD WHERE MATNR = '3520421700'.
    <Statements>.
ENDSELECT.
(从MARD中抓取所有料号=3520421700的资料)
◆读取一笔资料
      Example:
               TABLES  SPFLI.
               SELECT  SINGLE  *  FROM  SPFLI    
                     WHERE  PLANT ='CHUNGLI'  AND  TEL='4526174'.
               WRITE:  /  SPFLI-COMPANY,SPFLI-PLANT,SPFLI-TEL.
◆将读取的记录放在work area中,并且加入Internal table 中.
格式有:
   ... INTO <work area>
   ... INTO CORRESPONDING FIELDS OF <work area>
   ... INTO (f1, ..., fn) 变量组.
   ... INTO TABLE <internal table>
   ... INTO CORRESPONDING FIELDS OF TABLE <internal table>
   ... APPENDING TABLE <internal table>
   ... APPENDING CORRESPONDING FIELDS OF TABLE <internal table>
举例一:
TABLES MARD. 
DATA:  BEGIN OF ITAB OCCURS 10,
              MATNR LIKE MARD-MATNR,
              WERKS LIKE MARD-WERKS,
              LGORT LIKE MARD-LGORT,
              LABST LIKE MARD-LABST,
        END OF ITAB.
SELECT MATNR WERKS LGORT LABST  
              INTO CORRESPONDING FIELDS OF ITAB 
              FROM MARD
              WHERE MATNR = '3520421700'.
       APPEND ITAB.
       CLEAR ITAB.
ENDSELECT.
(将读取的结果放在Internal table ITAB中)
DATA: BEGIN OF WA, 
        LINE(240),
      END OF WA.
DATA NAME(10).
NAME = 'SPFLI'.
SELECT * FROM (NAME) INTO WA.
  WRITE: / WA-LINE. 
ENDSELECT.
数据库表名称 SPFLI 被赋给字符字段 NAME。SELECT 语句将所有的行从 SPFLI 中读到目标区 WA 中。在该示例中,WA 与 SPFLI 的结构并不相同,每一行都将
自动地转换成字符字段.
举例二.
TABLES MARD.
SELECT MATNR  MTART  MAKTX  INTO (t_matnr, t_mtart, maktx) 
               FROM MARD
               WHERE MATNR = '3520421700'.
       <Statements>.
ENDSELECT.
(从MARD中抓取料号=3520421700的料号、类型和描述,放在变量t_matnr, t_mtart, maktx中)。
        Example:
                 TABLES  SPFLI.
                 DATA  WA  LIKE  TABLES.
                 SELECT  *  FROM  SPFLI  INTO  WA.
                    WRITE:  /  WA-COMPANY,WA-PLANT.
                 ENDSELECT.
                 逐笔写入WA 工作区中
举例三.
将读取的资料写入 Initial Table 中
  语法:
        SELECT  .. INTO  TABLE  <itab>   
        Example:
        TABLES  SPFLI.
        DATA  ITAB  LIKE  SPFLI  OCCURS  10  WITH  HEADER  LINE.
        SELECT  *  FROM  SPFLI  INTO  ITAB.
        一次读10笔(Initial Table的长度)记录存入 ITAB 中
        
        SELECT  .. INTO  TABLE  <itab>  PACKAGE  SIZE <n>
        一次读取 <n> 笔记录至 <itab>中
        Example:
           TABLES  SPFLI.
           DATA  ITAB  LIKE  SPFLI  OCCURS  10  WITH  HEADER  LINE.
           SELECT  *  FROM  SPFLI  INTO  ITAB  PACKAGE  SIZE  5. 
           一次读取 5 笔记录
exp :
TABLES SPFLI.
DATA: BEGIN OF WA,
         NUMBER TYPE I VALUE 1,
         CITYFROM LIKE SPFLI-CITYFROM,
         CITYTO   LIKE SPFLI-CITYTO,
      END OF WA.
SELECT * FROM SPFLI INTO CORRESPONDING FIELDS OF WA.
   WRITE: / WA-NUMBER, WA-CITYFROM, WA-CITYTO.
ENDSELECT.
输出如下所 示:
在该示例中,系统只将数据库表 SPFLI 中选定行的列 CITYFROM 和 CITYTO 传送到 WA 中。WA 中的组件 NUMBER 保持不变。
*-------------------------------------------------------------------------------------*
按指定的栏位排序
TABLES SBOOK.
SELECT * FROM SBOOK   WHERE CARRID = 'LH' AND
                            CONNID = '0400' AND
                            FLDATE = '19950228'
                            ORDER BY BOOKID ASCENDING.
   WRITE: / SBOOK-BOOKID,   SBOOK-CUSTOMID,
           SBOOK-CUSTTYPE,  SBOOK-SMOKER,
           SBOOK-LUGGWEIGHT, SBOOK-WUNIT,
           SBOOK-INVOICE.
ENDSELECT.
(利用参数ORDER BY所指定的栏位排序)
*-------------------------------------------------------------------------------------*
◆ 抓取数据的条件关键字
(1) BETWEEN <g1>  AND  <g2>
例如:  WHERE YEAR BETWEEN 1995 AND 2000.
(2) LIKE <g>
例如:  WHERE NAME LIKE 'MIKE%'.
('%'是通配符号)
(3) IN (<g1>…<gn>)
是<g1>…<gn>里面的任意一个值即可.
例如: WHERE PLANT IN ('CHUNGLI', 'TAOYUAN','LIUTU').
(表示PLANT 只要是'CHUNGLI'或'TAOYUAN'或'LIUTU'都可以).
(4)  ORDER  BY 关键字
     指定排序的栏位或顺序
     (1). ..ORDER BY PRIMARY KEY.
        根据 PRIMARY KEY 递增排序
     (2)…ORDER BY <f1> [DESCENDING] <f2> [DESCENDING]
        Example:
                  SELECT * FROM IM ORDER BY PART .
*-------------------------------------------------------------------------------------*
INSERT 语句
◆从work area 加入到Internal Table中
格式: INSERT INTO <database> VALUES <work area>
例如: 
DATA:  BEGIN OF WA,
              CODE(6)  TYPE C,
              NAME(30) TYPE C,
        END OF WA.
DATA:  VEN LIKE WA OCCURS 10.

WA-CODE  =  '530120'.
WA-NAME  =  'XINGDA ELECTRONICS CO.,LTD'.
INSERT INTO VEN VALUES WA .
如果work area的名称就是internal table的名称,可以直接写成:
      INSERT <internal table>
例如:
DATA:  BEGIN OF WA OCCURS 10,
              CODE(6) TYPE C,
              NAME(30) TYPE C,
        END OF WA.

WA-CODE = '530120'.
WA-NAME  =  'XINGDA ELECTRONICS CO., LTD'.
INSERT WA.
◆从另外一个Internal table中INSERT 资料
格式:
INSERT <itab1> FROM TABLE <itab2> [ACCEPTING DUPLICATE KEY]
将<itab2>中非NULL的资料加入<itab1>中,加上[ACCEPTING DUPLICATE KEY]能限制相同PRIMARY KEY不重复加入.
   加入一笔记录至资料库
   1.自 Work Area 工作区
   语法:
        INSERT  INTO  <database>  VALUES  <wa>
        Example:
                 TABLES  SPFLI.
                 DATA  WA   LIKE  SPFLI.
                 WA-NO = '34051920'.
                 WA-COMPANY='DELTA'.
                 INSERT  SPFLI  VALUES  WA.
                 将 ITAB 资料加入 SPFLI中, 也可写成 INSERT  SPFLI  FROM  ITAB.
           
                  SPFLI-NO='34299876'.
                  SPFLI-COMPANY='HP'.
                  INSERT  SPFLI  FROM  SPFLI.
                  将Work Area  SPFLI中的资料加入资料库档案 SPFLI中
                  因Work Area SPFLI的结构与资料档 SPFLI一样, 所以也可
                  写成 INSERT  SPFLI.
   2.自 Internal Table
     语法:
           INSERT  <database>  FROM  TABLE  <itab>  [ACCEPTING DUPLICATE KEY]
           将 <itab>中非 NULL的资料加入 <database>中, 加上 [ACCEPTING DUPLICATE
           KEY]能检查不加入有重覆primary key, 若有重覆则 SY-SUBRC 会传回 4
           Example:
                    TABLES  SPFLI.
                    DATA  ITAB  LIKE  SPFLI  OCCURS  10  WITH  HEADER LINE.
                    ITAB-NO = '34051920'.
                    ITAB-COMPANY = 'DELTA'.
                    APPEND  ITAB.
                    ….
                    INSERT  SPFLI  FROM  TABLE  ITAB  
                             ACCEPTING  DUPLICATE  KEY.
*-------------------------------------------------------------------------------------*
UPDATE 指令
   异动已存在的记录内容
1.使用 Primary Key
  语法: 
            UPDATE  <database>  FROM  <wa>
            Example:
                     TABLES  SPFLI.
                     DATA  WA  LIKE  SPFLI.
                     WA-NO='34051920'.
                     WA-COMPANY='DELTA'.
                    UPDATE  SPFLI  FROM  WA.
                    如 SPFLI 的 Primary Key是 NO, 则会找到 NO='34051920'的记录, 将其 COMPANY栏位异动为 DELTA
2.使用条件式
  语法:
        UPDATE  <database>  SET  < f1>=<values>…  WHERE  <condition>
        根据条件式异动符合条件式的记录
        Example:
                 UPDATE  SPFLI  SET  NO ='34051920'
                                     COMPANY = 'DELTA'
                         WHERE  TEL = '4526107'.
*-------------------------------------------------------------------------------------*
3.   MODIFY 语法
     MODIFY <internal table> [FROM <work area>].
根据 Primary Key 寻找资料档中符合的记录, 若找到则更新异动, 若找不到则新增记录
语法:
       MODIFY  <database>  FROM  <wa>
       Example:
                WA-NO='34051920'.
                WA-COMPANY='DELTA'.
                MODIFY  SPFLI  FROM  WA.
     
4.   DELETE 语法
     DELETE <internal table> [FROM <work area>].
 或: DELETE <internal table> [WHERE <conditions>]
   删除资料档的记录
1.使用 Primary Key
  语法: 
            DELETE  <database>  FROM  <wa>
            Example:
                     TABLES  SPFLI.
                     DATA  WA  LIKE  SPFLI.
                     WA-NO='34051920'.
                     WA-COMPANY='DELTA'.
                     DELETE  SPFLI  FROM  WA.
                     如 SPFLI 的 Primary Key是 NO, 则会找到 NO='34051920'的记录, 找到后将此笔删除 
2.使用条件式
  语法:
        DELETE  FROM  <database>  WHERE  <condition>
        根据条件式删除符合条件式的记录
        Example:
                 DELETE  FROM  SPFLI  WHERE  AREA = 'AMERICAN'

朋友们有类似知识的期待交流分享.

ABAP 关键字(1)的更多相关文章

  1. ABAP关键字SUBMIT的简单例子和学习小记

    网上有关SUBMIT实现程序调用的例子稍显复杂,而相关的参考和解释则不是很完善.本文给出一个SUBMIT的小示例程序(代码见文末),实现了最简单的程序间调用及返回值,以及SAP官方文档中相关内容的翻译 ...

  2. abap关键字

    1:abap将提升的关键字快捷输入 按tab键,提示的关键字将会自动输入. 2:shift tab 用于对其格式 3:ctrl+d 将改行复制到下一行.

  3. 如何让Sublime Text编辑器支持新的ABAP关键字

    ABAP 7.40推出了许多新的关键字 - keyword,您的Sublime Text可能无法针对这些新关键字实现期望的语法高亮显示(syntax highlight)或者自动完成(auto com ...

  4. ABAP关键字和ABAP词汇

    下表为ABAP的词汇概览(包括关键字): ABAP-SOURCE ABBREVIATED ABS ABSTRACT ACCEPT ACCEPTING ACCORDING ACOS ACTIVATION ...

  5. 有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?

    Jerry在之前的文章多次提过,SAP Cloud Platform ABAP编程环境上的ABAP语法,只是广大SAP顾问们在On-Premises环境上使用的ABAP的一个子集.换句话说,On-Pr ...

  6. ABAP的语法高亮是如何在浏览器里显示的

    这篇文章的原文我发表在SAP官方社区上:https://blogs.sap.com/2018/03/09/how-abap-syntax-highlight-is-implemented-in-web ...

  7. ABAP术语-Database Rollback

    Database Rollback 原文:http://www.cnblogs.com/qiangsheng/archive/2008/01/24/1051238.html Operation tha ...

  8. 聊聊C语言和ABAP

    这个公众号之前的文章,分享的都是Jerry和SAP成都研究院的同事在工作中学到的一些知识和感受.而今天这篇文章,写作的由来是因为最近我又参与了SAP成都数字创新空间应聘者的面试,和一些朋友聊了一些关于 ...

  9. 使用ABAP操作Excel的几种方法

    这篇文章本来不在我计划之内,因为最近一个朋友微信上问到我这个问题,但我平时在SAP研究院工作中从没遇到过需要用ABAP操作Excel的需求,因此也没有太多技术实现细节可以分享给大家,只能泛泛写一些. ...

随机推荐

  1. metasploit study

    load db_trackerdb_nmap -T Aggressive -sV -n -O -v 192.168.0.107 绑定shelluse exploit/windows/smb/ms08_ ...

  2. 12.【nuxt起步】-接口请求重构

    用store把api数据交互部分重构出来,让前端更轻一点 新建 /store/gettter.js /store/actions.js /server/config/index.js Index.js ...

  3. 鸟哥的linux私房菜服务器架设篇之准备工作和网络基础

    架设服务器的基本功课 1基础网络的基本概念,以方便进行联网和设定及除错 2熟悉操作系统的简易操作:包括登录分析,账号管理,文本编辑器的使用等等的技巧 3信息安全方面:包括防火墙与软件更新方面的相关知识 ...

  4. [Golang] 从零開始写Socket Server(2): 自己定义通讯协议

    在上一章我们做出来一个最基础的demo后,已经能够初步实现Server和Client之间的信息交流了~ 这一章我会介绍一下怎么在Server和Client之间实现一个简单的通讯协议.从而增强整个信息交 ...

  5. DFRobot万物互联大赛第二轮

    前言 最近放在阳台的花草被啥东西给吃了,然后厨房挂在墙上的小虾米也不知道咋的被抓破吃光了(我怀疑是隔隔壁两条泰迪),所以打算做个简单的项目,教训一下偷吃贼.时间比较仓促,内容比较多,能力有比较有限,好 ...

  6. sql执行顺序图

    http://www.16aspx.com/cmsimages/20130325/664845013.png

  7. 【Excle数据透视表】如何复制数据透视表

    左边创建完数据透视表,右边是复制过去的部分数据透视表---显示数值状态的内容,为什么复制过来的不是数据透视表呢? 解决办法: 全选定数据透视表再进行粘贴复制 步骤一 单击数据透视表任意单元格→分析→操 ...

  8. iOS开发之解析XML格式数据

    XML格式的数据是一种数据的传输格式.因为它方便编写.结构清晰,所以深受程序猿的喜爱,非常多人都喜欢使用XML格式数据传输或者作为程序的配置信息. 如今我将来实如今iOS中解析XML格式数据,语言使用 ...

  9. Spring学习三----------注入方式

    © 版权声明:本文为博主原创文章,转载请注明出处 Spring注入方式 本篇博客只讲最常用的两种注入方式:设值注入和构造器注入.代码为完整代码,复制即可使用. 1.目录结构 2.pom.xml < ...

  10. ReentrentLock重入锁

    ReentrentLock lock=new ReentrentLock(); lock.lock(); //锁的代码 finally{ lock.unlock(); } ReentrentLock ...