modify 用法比较详细 解我这种菜鸟的迷惑
来源:互联网 发布:js判断是否有class 编辑:程序博客网 时间:2024/06/07 18:12
转载原文地址http://www.cnblogs.com/foxting/archive/2012/03/19/2406830.htmlABAP开发基础知识:5) 内表(Internal Table) 内表与结构体基本类似,它同样是程序运行中被临时创建的一个存储空间,它是一个可包含多条记录的数据表。 内表共有3种类型: 1)Standard:标准表 2)Sorted:排序表 3)Hashed:哈希表,一般用的比较少 本篇文件将重点介绍Standart型内表的定义及功能 1.内表的定义 通过关键字DATA对内表进行创建,内一的定义可以直接参考结构体或者其它内表及透明表,也可以直接定义字段,其中关键字如下: UNIQUE|NON-UNIQUE:指定关键字,只能应用于排序表或者哈希表。 INITIAL SIZE n:指定初始化内表大小。 WITH HEADER LINE:定义内表是否有表头。 具体定义有以下几种方式: DATA <内表名> TYPE <结构类型> WITH[UNIQUE|NON-UNIQUE] [INITIAL SIZE n] [WITH HEADER LINE]。 DATA <内表名> LIKE TABLE OF<内表或者透明表> WITH [UNIQUE|NON-UNIQUE] [INITIAL SIZE n] [WITH HEADER LINE]。 DATA BEGIN OF itab OCCURS n, ...... END OF itab [VALID BETWEEN f1 AND f2]。 FOR EXAMPLE: TABLES:USER21. “参考某一透明表时,必须先引用定义。类型于C#的USING。 TYPES:BEGIN OF EMP, NAMELIKE USER21-BNAME, TELNUM LIKE USER21-PERSNUMBER, ADDR LIKE USER21-ADDRNUMBER, END OF EMP。 *参考该结构定义一个初始化大小为10,并且有HEADERLINE的内表 DATA:EMPTAB TYPE STANDARD TABLE OFEMP INITIAL SIZE 10 WITH HEADER LINE. *参考上例已建立内表,重新定义大小为20并且没有HEADERLINE的内表 DATA:EMPTAB2 LIKE STANDARD TABLE OFTMPTAB INITIAL SIZE 20. *该方法定义初始化值为10,并有HEADERLINE的内表 DATA:EMPTAB3 LIKE EMPTAB OCCURS10. *定义一个排序表,以NAME为关键字,该内表中NAME字段数据不能重复 DATA:EMPTAB4 LIKE SORTED TABLE OF EMPTABWITH UNIQUE KEY NAME INITIAL SIZE 10 WITH HEADER LINE. *定义一个初始化大小为0的哈希表 DATA:EMPTAB5 LIKE HASHED TABLE OF EMPTABWITH UNIQYE KEY NAME WITH HEADER LINE. 通过第三种方式定义的内表可指定具体字段及初始化大小,默认内表存在HEADER LINE。 TABLES:USER21. TYPES:BEGIN OF EMP OCCURS 0, NAMELIKE USER21-BNAME, TELNUM LIKE USER21-PERSNUMBER, ADDR LIKE USER21-ADDRNUMBER, END OF EMP. 2.内表的赋值 上面曾介绍过,内表分为有无HEADERLINE两种。对于有HEADER LINE的内表,可以通过填充HEADER LINE数据后或通过外部的Work Area向内表存储空间中追加数据,相关语法如下: APPEND (<work area>into) <ITAB>. FOR EXAMPLE: TABLES:USER21. DATA:BEGIN OF EMP OCCURES 0, NAME LIKE USER21-BNAME, TELNUM LIKE USER21-PERSNUMBER, ADDR LIKE USER21-ADDRNUMBER, END OF EMP. EMP-NAME='JERY'. EMP-TELNUM='010-123888'. EMP-ADDR='BEIJING'. APPEND EMP. "数据被赋给内表HEADERLINE后再APPEND到表中最后一行。 对于没有HEADERLINE的内表,只能通表外部WORK AREA来传递数据,如下所示: TABLES:USER21. DATA:BEGIN OF EMPTAB, NAME LIKE USER21-BNAME, TELNUM LIKE USER21-PERSNUMBER, ADDR LIKEUSER21-ADDRNUMBER, END OF TMPTAB. DATA:EMP LIKE STANDARTTABLE OF EMPTAB. EMP-NAME='JERY'. EMP-TELNUM='010-123888'. EMP-ADDR='BEIJING'. APPEND EMPTAB TO EMP. ”数据被赋给WORK AREA后再APPEND到表中。 除了上述的赋值方式外,还可以通过OPEN SQL将数据表中的数据按条件查询后放入内表中,对于OPEN SQL的具体用法,将后在后面介绍。 FOR EXAMPLE: TABLES:USER21. DATA:BEGIN OF EMP OCCURES 0, NAME LIKE USER21-BNAME, TELNUM LIKE USER21-PERSNUMBER, ADDR LIKE USER21-ADDRNUMBER, END OF EMP. SELECT BNAME AS NAMEPERSNUMBER AS TELNUM ADDRNUMBER AS ADDR INTO TABLE EMP FROM USER21. "通过OPEN SQL将从数据表中抓取的数据直接复制给内表。 3.内表数据管理 1.内表的清空 对内表数据的清空共包括4种模式 CLEAR <ITAB>:仅清空HEADERLINE,对内表数据存储空间不影响。 REFRESH <ITAB>:清空内表数据存储空间,对HEADERLINE不影响。 REFRESH <itab> FROM TABLE <dbtab>:清空内表存储空间,填充从数据库表所获数据。 FREE <ITAB>:清空内表数据存储空间,对HEADERLINE不影响。 FOR EXAMPLE: TABLES:USER21. DATA:BEGIN OF EMP OCCURS 0, NAME LIKE USER21-BNAME, TELNUM LIKE USER21-PERSNUMBER, ADDR LIKE USER21-ADDRNUMBER, END OF EMP. SELECT BNAME AS NAMEPERSNUMBER AS TELNUM ADDRNUMBER AS ADDR INTOTABLE EMP FROM USER21. USER21-BNAME='JERY'. REFRESH EMP FROM TABLEUSER21. "清除EMP的存储空间,并从USER21中查找数据填充到内表。 2.INSERT(向内表插入数据) 可以按内表的具体字段向表中插入一行或者多行数据,具体语法如下: INSERT [wa INTO|INITIAL LINEINTO] itab [INDEX idx]. INSERT [wa INTO|INITIAL LINEINTO] TABLE itab. INSERT LINES OF itab1 [FROMidx] [TO idx2] INTO itab2 [INDEX idx3]. FOR EXAMPLE: TABLES:USER21. DATA:BEGIN OF EMP OCCURS 0, NAME LIKE USER21-BNAME, END OF EMP. DATA:EMPTAB1 LIKE EMP. DATA:EMPTAB2 LIKE EMP OCCURS 10. EMP='JERY'. INSERT EMP INDEX 1."若内表有多行数据,该语句将新记录新增到第一行。 EMPTAB1='TOM'. INSERT EMPTAB1 INTO TABLE EMP. “将结构体中数据新增到内表 SELECT BNAME AS NAME INTO TABLE EMPTAB2 FROM USER21. INSERT LINES OF EMPTAB2 FROM 10INTO EMP."将数据表EMPTAB2从第10行开始的所有数据插入到表EMP中。 3.MODIFY(直接修改内表数据) 按内表位置或者具体内表字段值相等条件修改内表数据。 MODIFY itab [FROM wa] [INDEX idx][TRANSPORTING f1...fn] WHERE cond. FOR EXAMPLE: TABLES:USER21. DATA:BEGIN OF EMP OCCURS 0, NAME LIKEUSER21-BNAME, TELNUM LIKE USER21-PERSNUMBER, END OF EMP. SELECT BNAME AS NAMEPERSNUMBER AS TELNUM INTO TABLE EMP FROM USER21. EMP-NAME='JERY'. EMP-TELNUM='010-888888'. MODIFY EMP INDEX 1."修改内表第一行数据为设定值 EMP-TELNUM='0755-888888'. *查找内表中NAME等于TOM的数据,并按设定修改其TELNUM字段,有多行值时会同时修改。 MODIFY EMP TRANSPORTINGTELNUMBER WHERE NAME='TOM'.
read数据 将数据进行modify 时需要使用modify table itab 因为没有索引行
loop循环中 可以直接用modify itab from wa 4.COLLECT(内表数据分类汇总) 将内表中相同的字段合并,若有类型为I的字段,则将其值加总。 COLLECT [wa INTO] itab. FOR EXAMPLE: TYPES:BEGIN OF COMPANY, NAME(20) TYPE C, SALES TYPE n, ENF OF COMPANY. DATA:COMP TYPECOMPANY,COMPTAB TYPE COMPANY OCCURS 0. COMP-NAME = 'MOBILE'.COMP-SALES = 10. COLLECT COMP INTO COMPTAB. COMP-NAME ='NOTEBOOK'. COMP-SALES = 20. COLLECT COMP INTO COMPTAB. COMP-NAME ='MOBILE'.COMP-SALES = 30.COLLECT COMP INTO COMPTAB. 5.SORT(内表数据排序) 对内表进行排序,可以指定具体的排序字段、排序方式(升/降),语法如下: SORT itab [BY f2 f2...fn][ASCENDING/DESCENDING] 6.READ(读取) 依据具体行数或字段值等条件读取某一内表的数据。 READ TABLE itab FROM wa. READ TABLE itab WITH [TABLE] KEY k1=v1...kn=vn [BINARY SEARCH]. READ TABLE itab INDEX i. 使用READ操作的表必须的HEADERLINE作为查找出的数据存储窗口,BINARY SEARCH 可以提高内表数据查找的速度,但是使用前必须先对内表进行排序。 7.LOOP....ENDLOOP(循环读取内表数据) 循环读取内表数据,在循环中使用系统变量SY-TABIX可获取当前所执行的行数。 LOOP AT ITAB FROM n1 TO n2.:读取内表具体行数间数据。 LOOP AT ITAB WHERE logexp.:按具体字段条件读取内表。 FOR EXAMPLE: TABLES:USER21. DATA:BEGIN OF EMP OCCURS 0, NAME LIKE USER21-BNAME, TELNUM LIKE USER21-PERSNUMBER, END OF EMP. SELECT BNAME AS NAME PERSNUMBER AS TELNUM INTO TABLE EMP FROMUSER21. *读取内表的1-10行数据。 LOOP AT EMP FROM 1 TO 10. WRITE:EMP. ENDLOOP. *按NAME条件读取内表。 LOOP AT EMP WHERE NAME='JERY'. WRITE:EMP. ENDLOOP. 8.AT...ENDAT(设置内表循环触发条件) 该语法为事件控制函数,应用于LOOP循环语句中,用于获取内表的数据变化事件。 AT NEW f.:当某个字段数据与上一行数据值不同时触发该事件。 AT END OF f.:当内表中某个字段当前行值与下一行值不同时触发该事件。 AT FIRST.:当执行内表第一行时触发该事件。 AT LAST.:当执行内表最后一行时触发该事件。 9.AT..DELETE(删除内表数据) DELETE TABLE itab WITH TABLE KEY k1=v1...kn=vn.:按具体值删除。 DELETE TABLE itab [FROM wa].:参照其它内表值删除。 DELETE itab INDEX idx.:删除具体行数据。 DELETE itab FROM idx1 TO idx2.:删除具体行数范围间数据。 DELETE ADJACENT DUPLICATES FROM itab.:删除重复数据,执行此条件前必须先排序。 10.DESCRIBE(获取内表的具体属性) DESCRIBE TABLE itab LINES n:获取内表当前总行数,n为整型。 DESCRIBE TABLE itab OCCURS n:获取内表初始化行数,n为整形。 DESCRIBE TABLE itab KIND K.:获取内表类型:T:Standard,S:SORTED,H:HASHED。 FOR EXAMPLE: DATA:N1 TYPE I,N2 TYPE I,KTYPE C. DATA:BEGIN OF EMP OCCURS 10, NAME LIKE USER21-BNAME, TELNUM LIKE USER21-PERSNUMBER, END OF EMP. DESCRIBE TABLE EMP LINES N1.”表中无数据,回执为0 DESCRIBE TABLE EMP OCCURSN2. “表初始化大小为10,回执为10 DESCRIBE TABLE EMP KIND K. ”默认为STANDARD表,回执为T
- modify 用法比较详细 解我这种菜鸟的迷惑
- 适合我这种初学数据库菜鸟的存储过程的创建和调用详细过程
- ABAP Modify 的用法
- modify()函数的用法
- 谁来我的迷惑?
- 指针的这种用法:this-> -> ->
- 解疑初学java比较迷惑的地方
- 比较详细的GDB用法说明
- 比较详细的GDB用法说明
- c++ vector 比较详细的用法
- 一个让我迷惑的结果
- 解除openSessionInViewFilter给我的迷惑了
- as3.0 给我的迷惑
- 这种style的girl很吸引我
- 最近我的邮箱里总有这种信息
- 关于C++对象引用的这种用法
- [菜鸟]函数参数不再迷惑
- C语言输出百分号(%)的方法,比较迷惑
- JZOJ 5445. 【NOIP2017提高A组冲刺11.2】失格
- JavaFile筛选读取文件内容
- Geomagic Wrap 2017.0.1 Win64 1CD
- 【SpringMVC】入门案例
- Java 常用到的网站
- modify 用法比较详细 解我这种菜鸟的迷惑
- p2p行业监管
- Carsten Steger 高斯平滑边缘
- 说说Git提交项目 Bash命令
- Linux和unix区别
- RBAC从零开始--操作日志记录
- 【NOIP2017提高A组冲刺11.2】总结
- 10月英语总结
- [绍棠] 把某图片存储到相册会crash