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

Posted Jay_1989

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABAP数据字典和数据表的读取相关的知识,希望对你有一定的参考价值。

       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)从内表逐行读取数据至工作区,从工作区输出

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条记录。

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.

输出结果



内连接和外连接

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

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.

输出结果


以上是关于ABAP数据字典和数据表的读取的主要内容,如果未能解决你的问题,请参考以下文章

使用事务码 SAT 比较传统的 SELECT SQL 语句和 OPEN / FETCH CURSOR 分块读取 ABAP 数据库表两种方式的性能差异

abap SE11中数据字典中type group是做啥用的,怎么使用

SAP ABAP SM50的另类用途 - ABAP工作进程对数据库表读取操作的检测

abap 定义变量 like、type、for的区别

[ChatGPT 勘误] SAP ABAP 里 cl_r3standard_persistence 的用途?

abap怎样抽取数据到内表? 顺便想求教关于ABAP程序执行效率和优化