首页 > 学院 > 开发设计 > 正文

ABAP数据字典和数据表的读取

2019-11-10 18:06:21
字体:
来源:转载
供稿:网友
  ABAP数据字典的事务代码(TCODE):SE11,数据字典和SAP整个业务应用是整合的。      本章主要介绍:实例建表,数据表维护程序,添加数据,建立域、数据元素和搜索帮助,逻辑数据库,数据表的读取。

相关概念

       通过本章的学习能清晰地了解ABAP数据字典与实际数据库之间的关系。数据字典对象由数据字段(Table Field)、数据元素(Data Element)、域(Domain)等组成。     “域”描述一个字段类型和长度等信息,“数据元素”描述一个字段的用途。先定义域,再定义数据元素使用哪个域,最后定义一个表字段使用哪些数据元素。      表类型:透明表(Transparent Table)、结构(Structure)、附加结构(Append Structure)、存储表(Pooled Table)、簇表(Cluster Table)、视图(Generated View Structure)。      在ABAP应用中大量使用透明表和结构,其中:“透明表”在数据库中有对应的物理表;“结构”为若干个字段组合,在数据库不存在数据纪录。

实例建表

下面以实例说明透明表的建立。建立城市表、学校表、学生表,表关系都是一对多,数据结构如下:

        (1)城市表:YTJAYCITY,结构如下

字段名数据类型允许空值主/外键说明
YCT_IDINTNOT NULL(PK)序号
YCT_NAMECHAR(30)NOT NULL 城市名称
YCT_COUNTRYCHAR(255)  国家名称

        (2)学校表:YTJAYSCHOOL,结构如下

字段名数据类型允许空值主/外键说明
YCT_IDINTNOT NULL(PK)序号
YSH_IDINTNOT NULL(PK)学校序号
YSH_NAMECHAR(30)NOT NULL 学校名称
YSH_ADDRCHAR(255)  地址

        (3)学生表:YTJAYSTUDENT,结构如下

字段名数据类型允许空值主/外键说明
YCT_IDINTNOT NULL(PK)城市序号
YSH_IDINTNOT NULL(PK)学校序号
YSTU_IDINTNOT NULL(PK)学生序号
YSTU_NAMECHAR(30)  学生名称
YSTU_ADDRCHAR(255)  住址

输入TCODE:SE11,回车

输入数据库表,单击“创建”按钮

在属性页输入短文本、选择类型”A“(应用表),选择“X 允许通过标准表格维护工具维护”

选择“Fields”页面,单击按钮,直接输入数据类型和长度

点击“保存”按钮,弹出“创建对象目录条目”对话框,点击“本地对象”按钮

保存完成之后,点击“技术设置”,定义“数据类”、“大小范畴”

单击“返回”按钮,退回到字段编辑页面,单击激活按钮激活数据表。

然后依次建立YTJAYSCHOOL、YTJAYSTUDENT表。数据表建立完成后,可以登录数据库查阅建立的透明表。

注意:(1)在SAP中建立的数据表会在数据库中创建;(2)在数据库中直接建立的表不会在SAP中有数据字典;(3)在SAP或数据库添加数据都能相互查阅到。有了这样的概念,完全可以用其他语言读取数据库数据,做报表、开发等工作。

 

相关数据维护程序

由于在刚才建表时,选择了,因此能直接进行数据维护。

输入TCODE:SE16

输入表名

新增数据

点击如下“新增”按钮

输入完成后保存,在连续添加记录后,单击返回按钮回到上一屏

查询数据

点击如下“表内容”按钮

输入查询条件,点击“执行”按钮

查询结果如下:

删除数据

菜单“表条目”下,“全部删除”、“删除”按钮可以删除选中的纪录

修改数据

点击如下“更改”按钮,可以对选中的纪录进行编辑、修改操作

数据批量维护程序的生成及使用

打开表结构维护界面后(SE11),选择菜单“实用程序”-->“表格维护生成器”

输入函数组名称,选择一个权限组,选择维护类型“一步”,单击左上角“查找屏幕号”按钮

选择“建议屏幕号”

处理完成后,单击左上角“新建”按钮

弹出“修改对象目录条目”对话框,点击“保存”按钮,此时左下角如果弹出“请选择包”,则再次点击“保存”按钮

此时单击“本地对象”按钮,此时将会生成环境,有几秒的时间

此时回到主界面,输入“/nSM30”维护数据

输入表/视图名称,单击“维护”按钮

此时弹出对话框,确认

该界面可以对表格数据进行批量维护

建立域、数据元素和搜索帮助

本节介绍建立城市序号和城市名称的域和数据元素,并建立搜索帮助。搜索帮助是SAP系统中最常见的技术之一,是非常重要的。

建立域

 输入TCODE:SE11,选择“域”,输入域名称,单击“创建”按钮

输入域类型、域长度等信息后点击“保存”按钮

点击“本地对象”按钮,然后再点击“激活”按钮

同样方法再建立城市名称域,此处略。

建立数据元素

选择“数据类型”选项,输入名称后,单击“创建”

选择“Data element”类型

选择已经建立的域名

选择“Field Label”页面,输入描述长度和描述,单击“保存”按钮,再点击“本地对象”按钮,最后点击“激活”按钮

同样方法再建立城市名称数据元素,此处略。

修改表结构使用数据元素

选择YTJAYCITY数据表,点击“修改”按钮,进入结构维护界面

单击“数据元素”按钮,选择刚刚建立的数据元素,保存之后,再激活

同样方法再修改学校表

建立搜索帮助

打开数据元素YDAJAY_CITYID,输入“Search Help”名称后,保存

双击“Search Help”名称输入框,启动设计界面,点击“是”按钮

选择“基本索引帮助”

输入描述,选择城市表、城市序号和名称,其中城市序号为输入、输出字段,双击YCT_NAME,建立城市名称参数

返回上一界面,输入参数“YCT_ID”,保存并激活这个数据元素

再用SE16打开城市表,就可以通过“搜索帮助”选择城市

逻辑数据库

逻辑数据库是由具有一定关系的表组成,预选设定了读取数据的方法。

数据库读取

读取数据表是编程中最基本的技能,不同的数据库(Oracle,Sql Server,Sybase,DB2等)提供的SQL语法不完全相同。SAP提供了一套SQL语法(Open SQL),在SAP应用中能通过这一套SQL语法处理SAP支持的数据库。另外,SAP也提供Native SQL(本地的SQL语句),处理数据库本身的SQL语法。SAP的SQL语法和标准的SQL很接近,由SELECT、INSERT、DELETE、UPDATE等常用语法组成。

 

基础的读取数据表例子

将介绍数据库读取的几种方法和步骤:(1)从数据表直接读取数据至工作区输出(2)从数据表读取数据至内表,再从内表输出(3)从内表逐行读取数据至工作区,从工作区输出

[plain] view plain copy 在CODE上查看代码片REPORT  YTEST20160527.  *定义工作区  DATA A_YTJAYCITY TYPE YTJAYCITY.  *定义内表,请注意有HEADER LINE  DATA TA_YTJAYCITY TYPE TABLE OF YTJAYCITY WITH HEADER LINE.  *分隔线  ULINE.  WRITE / '使用工作区'.  ULINE.  *将数据表逐行转移至工作区,只读首3行  SELECT * INTO CORRESPONDING FIELDS OF A_YTJAYCITY FROM YTJAYCITY UP TO 3 ROWS.    WRITE: / A_YTJAYCITY-YCT_ID, A_YTJAYCITY-YCT_NAME, A_YTJAYCITY-YCT_COUNTRY.  ENDSELECT.  ULINE.  WRITE / '使用内表'.  ULINE.  SELECT * INTO CORRESPONDING FIELDS OF TABLE TA_YTJAYCITY FROM YTJAYCITY UP TO 3 ROWS.  *从数据表读数据至内表,直接从内表输出  *如果TA_YTJAYCITY没有定义HEADER LINE,会出错  LOOP AT TA_YTJAYCITY.    WRITE :/ TA_YTJAYCITY-YCT_ID,TA_YTJAYCITY-YCT_NAME,TA_YTJAYCITY-YCT_COUNTRY.  ENDLOOP.  ULINE.  WRITE / '将内表数据转移至工作区'.  ULINE.  LOOP AT TA_YTJAYCITY INTO A_YTJAYCITY.    WRITE :/ A_YTJAYCITY-YCT_ID, A_YTJAYCITY-YCT_NAME, A_YTJAYCITY-YCT_COUNTRY.  ENDLOOP.  

输出结果

使用PACKAGE SIZE读取数据

上面的例子中,使用了UP TO 3 ROWS语法读取前3行,但是不能继续读取数据。使用PACKAGE SIZE可以一次读入几条记录,下面例子中有ENDSELECT语句,表示读取2条纪录后接着读取2条记录。

[plain] view plain copy 在CODE上查看代码片REPORT  YTEST20160527.  *定义内表有HEADER LINE  DATA WA_YTJAYCITY TYPE TABLE OF YTJAYCITY WITH HEADER LINE.  *以每次读取2条纪录,直到读取所有数据  SELECT * INTO TABLE WA_YTJAYCITY FROM YTJAYCITY PACKAGE SIZE 2.  *输出内表纪录    LOOP AT WA_YTJAYCITY.      WRITE :/ WA_YTJAYCITY-YCT_ID, WA_YTJAYCITY-YCT_NAME, WA_YTJAYCITY-YCT_COUNTRY.    ENDLOOP.  *输出2条后输出一条横线    ULINE.  ENDSELECT.  

输出结果

内连接和外连接

从两个或两个以上数据表直接读取数据时,需要使用内表连接和外连接语句。

[plain] view plain copy 在CODE上查看代码片REPORT  YTEST20160527.  *定义结构  DATA:BEGIN OF SCHOOL,    CITY TYPE YTJAYCITY-YCT_NAME,    NO TYPE YTJAYSCHOOL-YSH_ID,    NAME TYPE YTJAYSCHOOL-YSH_NAME,    ADDRESS TYPE YTJAYSCHOOL-YSH_ADDR,  END OF SCHOOL.  *工作区  DATA SCHOOL1 LIKE SCHOOL.  *关联数据表,读取前3条记录,写入工作区,并输出  SELECT YTJAYCITY~YCT_NAME YTJAYSCHOOL~YSH_ID YTJAYSCHOOL~YSH_NAME YTJAYSCHOOL~YSH_ADDR INTO SCHOOL1    FROM YTJAYSCHOOL    INNER JOIN YTJAYCITY ON YTJAYSCHOOL~YCT_ID = YTJAYCITY~YCT_ID    UP TO 3 ROWS.    WRITE: / SCHOOL1-CITY, SCHOOL1-NO, SCHOOL1-NAME, SCHOOL1-ADDRESS.  ENDSELECT.  

输出结果

原文来自:http://blog.csdn.net/Jay_1989/article/details/51537483?locationNum=4&fps=1


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表