第101章 用逻辑数据库访问数据库表
- 格式:doc
- 大小:55.00 KB
- 文档页数:5
第一章用逻辑数据库访问数据库表
概览
内容
用SELECT 访问数据 ....................................................................................................... 1
用逻辑数据库访问数据 ..................................................................................................... 1
访问方法比较.................................................................................................................... 2
逻辑数据库的优点 ............................................................................................................ 4
从报表程序中控制数据库访问 ........................................................................................ 4
可采用两种方法,用报表程序访问数据库表的数据进行分析。
下列主题包括
关于逻辑数据库的功能和维护的信息,即如何显示、更改或创建逻辑数据库(事务SLDB 或
SE36),参见逻辑数据库的特征和维护(页Error! Not a valid link.) 。
用SELECT 访问数据
SELECT 语句是SAP 开放式SQL (标准SQL 的一个子集)的一部分。
关于SELECT
语句的详细信息,参见从数据库表读取数据(页错误!链接无效。
) 。
用SELECT 语句及其不同子句,可以读取和分析SAP 系统已知的所有数据库表的数据。
仅使用SELECT 语句的报表程序称为SQL 报表。
在SQL 报表中,不一定需要事件的外部流控制。
如果不使用事件关键词(参见通过事件
控制ABAP/4 程序流(页Error! Not a valid link.) ),通常可以将SQL 报表看作连续处理
的程序。
可是,如果要使用逻辑数据库访问数据,则必须使用事件。
用逻辑数据库访问数据
逻辑数据库访问数据库表中数据的方法与采用SELECT 语句访问数据的方法有明显差
别。
逻辑数据库是特殊的ABAP/4 程序,将一定数据库表的内容组合在一起。
可以将逻辑数据库链接为ABAP/4 报表程序的属性。
这样,逻辑数据库就可向报表程序提供一组层次结构表格行。
该层次结构表格行可从不同数据库表中提取。
在SAP 系统中,许多表格都由外来关键字相关链接(详细信息,参见文档ABAP/4 词典(页Error! Not a valid link.) )。
其中部分相关性形成树状层次结构。
使用逻辑数据库有助于读取形成此类结构组件的数据表格。
上图显示SAP 系统如何代表企业结构。
逻辑数据库可以按照通常由层次结构定义的顺序逐行将表格行读入报表程序中。
ABAP/4 开发工作台包括创建和显示逻辑数据库的便利工具(既可调用事务SLDB ,也可选择“工具-> ABAP/4 开发工作台-> 开发-> 编程环境-> 逻辑数据库”)。
要查看逻辑数据库<ldb> 的层次结构,请在ABAP/4 编辑器的命令区中键入SHOW DATABASE <ldb>。
关于维护逻辑数据库的详细信息,参见逻辑数据库的特征和维护(页Error! Not a valid link.) 。
将逻辑数据库链接到报表程序以访问数据时,顺序程序流已不再满足要求。
相反,必须根据事件编写一个顺序(参见ABAP/4中流控制的概念(页错误!链接无效。
) 中的图表)。
逻辑数据库提供报表程序的外部流控制事件。
与逻辑数据库连接的最重要事件是GET (参见事件及其事件关键字(页Error! Not a valid link.) )。
也可在已与逻辑数据库链接的报表程序中使用SELECT 语句。
访问方法比较
下例对使用SELECT 语句的报表程序和使用逻辑数据库的报表进行比较。
本节中的所有示例都使用逻辑数据库F1S。
必须在程序属性中指定该名称(参见指令程序属性(页错误!链接无效。
) )。
逻辑数据库F1S 的结构如下(编辑器命令SHOW DATABASE F1S):
下表对从层次结构数据库SPFLI、SFLIGHT 和SBOOK 中读取数据的两个报表程序进行比较。
左栏的报表程序用嵌套的SELECT 循环读取数据;右栏的报表程序则使用逻辑数据库F1S。
请注意,这两种情况都必须在程序中用TABLES 语句对数据库表加以说明。
与左栏的报表程序一样,右栏的报表程序使用借助SELECT 语句从数据库表读取数据的逻辑数据库程序。
逻辑数据库程序的主要结构如下:
总而言之,逻辑数据库程序用SELECT 语句从数据库表读取数据。
这意味着包含SELECT 语句的代码从报表程序转出到逻辑数据库程序
关于逻辑数据库程序精确结构的信息,参见逻辑数据库的数据库程序(页Error! Not a valid link.)。
逻辑数据库的优点
使用逻辑数据库可以免于编写从数据库表中检索数据的程序。
在报表程序中,不必定义如何检索信息,只需说明任何在屏幕上显示该信息。
在GET 事件后的处理块中,只需指定分析数据和将结果写到屏幕的语句。
传递完每个表格行后,发生GET 事件,报表程序通过激活相应的处理块就能对其进行处理。
如果在程序属性中没有指定逻辑数据库,则永远不会发生GET 事件。
使用逻辑数据库时,不必编写供用户输入信息的选择屏幕程序,因为这是自动创建的(参见选择屏幕和逻辑数据库(页Error! Not a valid link.) )。
但是,如果仅使用SELECT 语句,则必须自己编写选择屏幕程序(参见使用选择屏幕(页Error! Not a valid link.) )。
一个报表只能使用一个逻辑数据库,但是每个逻辑数据库可以由多个报表使用。
这一点大大优于使用SELECT 语句将数据库访问集成到每个报表程序中。
这意味着对于相同访问路径,只用编写一次代码。
这同样适用于编写授权检查代码。
使用逻辑数据库时,大多数报表可受益于下列特征:
容易使用的标准用户界面
用于检查用户输入完整性、正确性和真实性的检查功能
重要的数据选择
数据库访问的中央授权检查
保持由应用程序逻辑决定的层次数据视图时,具有良好的读取访问性能
(例如,借助视图)
即便使用中央逻辑数据库时,也有很大的灵活性,因为能够:
创建和设计自己的选择屏幕版本
在ABAP/4 报表程序中使用特定的事件关键字以便启用扩展的用户对
话(例如,进行详细授权或真实性检查)。
从报表程序中控制数据库访问
报表程序能影响由逻辑数据库程序读取的数据量。
可以随时对当前正处理的数据进行动态检查,以确保满足任何选择标准。
如果不是这种情况,逻辑数据库跳过层次结构的下级部分。
如果不选择选定特定表进行处理,系统自动忽略树的相关部分
如果系统从逻辑数据库表读取值,则会发生GET 事件。
在报表程序中,可以给GET 分配一个处理块。
例如,如果系统从表SPFLI 中读取值,则执行分配给GET SPFLI的处理块。
不必为表格用于定址字段的每个报表定义处理块。
不论是否定义处理块,系统都读取表格。
但是,如果数据库表是专为逻辑数据库中的字段选择设计的,则系统行为会有所不同(参见GET <表格> (页Error! Not a valid link.) )。
处理块既包含已读表格字段,也包含当前访问路径上所有超级表格字段。
例如,在事件GET SBOOK 中,可以定址表格SPFLI、SFLIGHT 和SBOOK 的字段。
这是因为逻辑数据库程序用嵌套的SELECT 循环读取表格(参见访问方法比较(页2) )。
但是,并非总是要从所有表格来访问这些字段,这样,每次读取属于逻辑数据库的所有表格都将浪费宝贵的CPU 时间。
因此,读取程度取决于位于层次结构最低等级处与表格相对应的GET 语句。