SAP中对内表及表的操作

2024-04-21 15:58
文章标签 操作 sap 表及表 对内

本文主要是介绍SAP中对内表及表的操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

内表的定义:TYPES|DATA itab {TYPE|LIKE}  tabkind OF{linetype|lineobj}[WITH key] [INITIAL SIZE n].

内表的种类:

1.      标准表(STANDARDTABLE).系统为该表的每一行数据生成一行数据生成一个逻辑索引.填充标准表时,可以将数据附加在现有行之后,也可以插入到指定的位置,程序对内表行的寻址操作可通过关键字或索引进行.在对表进行插入,删除等操作时,各数据行在内在中的位置不变,系统仅重新排列各数据行的索引值.

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

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

EX.      REPORTZ_ITAB_DEFINE.      

 TYPES:BEGIN OFAddress,         

           Street(20) TYPEC,          

          City(20) TYPE C, 

           END OF Address. 

     DATA:BEGIN FOCompany,   

                 Name(20) TYPE C,     

               Addresses TYPEAddress,   

            END OFCompany.   

    DATAItab_Company LIKE HASHED TABLE OF Company WITH UNIQUE KEYName.    

   DATA Itab_Company_SortedLIKE SORTED TABLE OF Company WITH UNIQUE KEY Name.

内表行的操作.

1.      工作区.程序对内表的操作不能直接进行,必须通过一种接口来传输,这个接口就是工作区(WorkArea).如果程序需要从关系数据库中撮数据到内表各行中,必须先将数据读入工作区,然后把工作区中的数据赋给内表的行.工作区必须具有和内表的行一致或者可相互转换的数据结构.

2.      表行头.在创建内表对象的同时可以隐式地定义一个同名工作区.创建了带表头的内表之后,可以认为程序中存在两个数据对象,一个是内表,另一个与内表结构相同的结构体.如果一个语句中,该名称同时代表内表或同名表的工作区,则需要在内表名称之后加“[]”。

3.      插入行.(INSERT语句)语法:       INSERT line INTO itab INDEXidx.”通过索引插入单行.       INSERT [line INTO|INITIAL LINE INTO] TABLEitab.”一般性插入语句.对于标准表,不指定索引值,附加至表最后一行,与APPEND语句效果完全一致.对于排序表,插入的行不可以打乱按照关键字排序的顺序,否则插入不成功.对于哈希表,插入过程中系统按照关键字对行进行定位.INSERTwa_company INTO TABLE itab_company.”将一个内表中的所有行插入到另一个内表中.

4.      附加行.(APPEND语句)附加行是在一个已经存在的索引表中使用APPEND语句增添新行.可以对单行或多行进行操作.语法:APPEND [lineTO|INITIAL LINE TO ]itab.”单行APPEND LINES OF Itab1 [FROM n1][TO n2]TO itab2.”多行.

5.      聚集附加.(COLLECT语句)COLLECT line INTOitab.要求:内表必需为扁平结构,行要与工作区兼容,而且除关键字以外的字段必须为数字类型.

6.      读取一行.(READ语句)READ TABLE itab [INTO wa| ASSIGNING<fa>] INDEXidx.读取的结果可以是结构与行类型兼容的工作区或字段符号<fs>.如果读取成功,则SY-TABIX返回该行的索引.一般在访问目标工作区之前,要先用SY-SUBRC字段查看一下读取成功与否.READTABLE itab FROM key [INTO wa|ASSIGNING<fs>].目标数据结构中的关键字段必须已经被预赋值,内表中相同关键字的首个数据行中的其他字段将被读入目标区域中.READTABLE itab WITH TABLE KEY k1 = f1 …ki = fi [INTO wa |ASSIGNING<fs>].指定表中的所有表关键字段的值,目标结构在操作前可以为任何值,内表数据行整体读入目标区域.READTABLE itab WITH KEY k1 = f1 …ki = fi [INTO wa|ASSIGNING<fs>].KEY列表可以为任意字段,不一定是表关键字.

7.      修改一行.(MODIFY语句)MODIFY itab [FROM wa] [INDEX idx][TRANSPORTINGf1,f2…].使用FROM选项指定的工作区域wa代替itab中索引为idx的现有行,一般需要指定INDEX选项.MODIFYTABLE itab FROM wa [TRANSPORTINGf1,f2…].工作区域wa在语句操作过程中起到双重作用,其一是根据其关键字段的值来确定需要替换的内表的行;其二是根据其他非关键字段的值来替换内表行中相应字段的数据.如果只希望更新部分字段的值,可以使用TRANSPORTING选项.MODIFYitab FROM wa TRANSPORTING f1,f2…WHERE cond.使用WHERE选项修改多行.

8.      删除一行.DELETE语句.DELETE itab INDEXidx.如果删除成功,则所有行的索引数减一,SY-SUBRC值为0,如果不存在索引行为idx,则SY-SUBRC返回4.DELETETABLE itab FROM wa.DELETE TABLE itab WITH KEY k1 = f1…ki =fi.DELETE TABLE [FROM n1 ][TO n2][WHERE<condition>].

9.      循环处理.LOOP AT itab <result> [FROMn1][TO n2] [WHERE<condition>].       <statement block>.ENDLOOP.

10.   初始化内表.

CLEARitab.该语句将内表重置为填充前的状态,该表将不包含任何行.如果内表有表头行,会同时清空内表数据行和表头行的内容.

CLEAR itab[].只希望初始化内表本身,保留表头行的内容.REFRESHitab.如果内表有表头行,该语句确保只初始化内表本身.FREE itab.使用CLEAR或REFRESH初始化内表后,系统仍保持在内在中为内表预留的空间.该语句可以重置内表并同时释放其内存,而不必先使用REFRESH或CLEAR语句.…itabIS INITIAL…

11.  整体复制内表.如果想将内表的全部内容复制到另一个内表中,可以进行整体赋值操作,使用MOVE或”=”.MOVE itab1 TOitab2.Itab1 = itab2.

12.  比较内表大小.内表可用作逻辑表达式的操作数进行比较.…itab1<operator>itab2…其中<operator>可以为操作符EQ,=,NE,<>,><,GE,>=,LE,<=,GT,>,LT,<等. 业务表的操作.

 

(OPEN SQL语句).

1.      SELECT语句SELECT <result> FROM<source> INTO<target>[WHERE<condition>][GROUP BY<fields>][HAVING<cond>][ORDER BY<fields>].

2.      选择单行语句SELECT SINGLE <result> INTO<target> FROM<source>…可以选择多个字段(*所有字段).

3.      选择多行数据. 可通过SELECT/ENDSELECT.循环从数据库中读取多行.

4.      选择至内表.SELECT …INTO|APPENDING [CORRESPONDING FIELDS OF] TABLEitab.

5.      指定选择包大小.包大小是指一次选择到内表的行数,可以将所有先行按已定义大小的包一段段的读到内表中.SELECT * … INTOTABLE itab PACKAGE SIZEn…       <statements>ENDSELECT.

6.      查询条件

a.      比较运算符比较运算符有,=,>,<,<>,<=,>=等.

b.      范围限定运算符WHERE …f [NOT] BETWEEN g1 ANDg2…c.      字符比较运算符WHERE …f[NOT]LIKE g [ESCAPEh]…d.      检查列表值WHERE … f[NOT] IN(g1…gi)…e.      检查空值WHERE … f  IS [NOT]NULL…f.       检查选择表选择表是一种复杂而强大的逻辑表达式组合形式,其本身是一个内表,检查选择表意味着数据库字段f需要满足所有逻辑表达式的组合.

7.      多表结合查询.

a.      SELECT语句嵌套.EX.       

REPORTz_select_nested.       

 DATA:wa_carrid TYPEspfli-carrid,               

 Wa_connid TYPEspfli-connid,               

Wa_carranem TYPEspfli-carrname.       

SELECT carrid connid FROM spfli INTO (wa_carrid,wa_connid) WHEREcityfrom =’Singapore’

SELECT carrname FROM scar INTO wa_carrname WHERE CARRID =wa_carrid.                     

 WRITEwa_carrname.              

ENDSELECT.       

ENDSELECT.

b.      FOR ALL ENTRIES选项.先从一个表中取出要查询的数据,再从相应内表中把数据查出来.

REPORT Z_SELECT_FOR_ALL_ENTRIES.DATA:BEGIN OFwa_spfli,              

Carrid TYPESPFLI-CARRID,              

Connid TYPESPFLI-CONNID,        

END OFwa_spfli,        

BEGIN OFwa_scarr,              

Carrid TYPEscarr-carrid,              

Carrname TYPEscar-carrname,        

END OFwa_scarr,        

Spfli_tab LIKE TABLE OF wa_spfli.SELECT carrid connid FROM spfliINTO TABLE spfli_tab WHERE cityfrom = ‘Singapore’.

SELECT carrid carrname FROM scar INTO wa_scarr FOR ALL ENTRIESIN spfli_tab WHERE carrid = spfli_tab-carrid.…ENDSELECT.

c.      使用视图.

d.      结合查询. INNER JOIN:如果主数据表和结合表中存在共同的字段内容(结合条件为字段),根据其相同值提取.SELECT …FROM table [INNER] JOIN jointable1 [AS asliasA] ON<cond><options>…其中FROM子句中的table为主选择表,后面可以根据需要用JOIN关键字选项加入几个数据库表,称为结合表.OUTERJOIN:在主表选择时,即使在结合表中结合条件不存在,也将该数据行选出,结合表中不存在的字段保持空白.SELECT …FROMtable LEFT [OUTER] JOIN dbtab [AS alias] ON<cond><options>…LEFT OUTERJOIN的语法要求更为严格,在ON附加项中,只能使用”=”操作符,且必须至少有一个条件是对主选择表和结合表中的字段进行比较.

e.      子查询.子查询是没有INTO子句的查询语句,通过EXISTS,IN或者逻辑运算符连接至WHERE子句中,但不能和结合选择附加项ON同时出现.子查询可以进行嵌套.SELECT…FROM scar INTO …WHERE EXIST (SELECT * FROM spfli WHERE carrid =scarr-carrid AND cityfrom =‘singapore’.如果查询中选择只需要返回单个字段,则还可以使用IN关键字.…WHERE city IN (SELECTcityfrom FROM spfli WHERE carrid =scar-carrid…单行返回结果使用运算符”=”:…WHERE city = (SELECT cityfrom FROMspfli WHERE carrid =scar-carrid…返回多行时,必须是子查询之前注明ALL,ANY或SOME附加项.…WHERE city> ALL ( SELECT cityfrom FROM spfli WHERE carrid =scar-carrid…

8.      组合查询结果.

9.      操作性能分析.GET RUN TIME FIELD f.

10.   光标DATA: cur TYPECURSOR.START-OF-SELECTION.OPEN CURSOR cur FOR SELECT …FROM ..WHERE… ORDER BY ….DO.FETCH NEXT CURSOR cur INTO (…)….ENDDO.

11.  更新数据.INSERT,UPDATE,MODIFY,DELETE语句进行数据的更新操作.

a.      INSERT语句

1.      可以通过工作区向数据库中插入单行数据.INSERT INTO dbtab VALUES wa.INSERT INTO dbtabFROMwa.INSERT语句操作后,如果相同表关键字的数据条目已经存在,不能重新插入,只能对该行的非关键字段进行更改(可使用UPDATE或MODIFY).

2.      插入多行数据.INSERT dbtab FROM TABLEitab.如果所有的数据条目均成功插入,则SY-SUBRC返回0;如果至少一行数据不能被插入(具有相同表关键字值条目已经存在),则会触发运行时错误,而且系统不更新任何数据.INSERTdbab FROM TABLE itab ACCEPTING DUPLICATE KEYS.

 b.      UPDATE语句

1.更新单行.UPDATE dbtab SET f1=g1…fn = gn WHERE<fix_key>.根据工作区进行更新.UPDATE dbtab FROMwa.             

2.更新多行.               UPDATE dbtab SET f1 = g1…fi=gi [WHERE<conditions>]. 

c.      MODIFY语句MODIFY语句操作数据库时,如果程序中指定的数据行已经存在于数据库中(根据关键字判断)则对其进行更新操作,如果尚未存在,则进行插入操作.单行与多行.

d.      DELETE语句


这篇关于SAP中对内表及表的操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/923471

相关文章

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

使用C++实现单链表的操作与实践

《使用C++实现单链表的操作与实践》在程序设计中,链表是一种常见的数据结构,特别是在动态数据管理、频繁插入和删除元素的场景中,链表相比于数组,具有更高的灵活性和高效性,尤其是在需要频繁修改数据结构的应... 目录一、单链表的基本概念二、单链表类的设计1. 节点的定义2. 链表的类定义三、单链表的操作实现四、

Python利用自带模块实现屏幕像素高效操作

《Python利用自带模块实现屏幕像素高效操作》这篇文章主要为大家详细介绍了Python如何利用自带模块实现屏幕像素高效操作,文中的示例代码讲解详,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、获取屏幕放缩比例2、获取屏幕指定坐标处像素颜色3、一个简单的使用案例4、总结1、获取屏幕放缩比例from

通过prometheus监控Tomcat运行状态的操作流程

《通过prometheus监控Tomcat运行状态的操作流程》文章介绍了如何安装和配置Tomcat,并使用Prometheus和TomcatExporter来监控Tomcat的运行状态,文章详细讲解了... 目录Tomcat安装配置以及prometheus监控Tomcat一. 安装并配置tomcat1、安装

Python中操作Redis的常用方法小结

《Python中操作Redis的常用方法小结》这篇文章主要为大家详细介绍了Python中操作Redis的常用方法,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解一下... 目录安装Redis开启、关闭Redisredis数据结构redis-cli操作安装redis-py数据库连接和释放增

Go语言利用泛型封装常见的Map操作

《Go语言利用泛型封装常见的Map操作》Go语言在1.18版本中引入了泛型,这是Go语言发展的一个重要里程碑,它极大地增强了语言的表达能力和灵活性,本文将通过泛型实现封装常见的Map操作,感... 目录什么是泛型泛型解决了什么问题Go泛型基于泛型的常见Map操作代码合集总结什么是泛型泛型是一种编程范式,允

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言