没有合适的资源?快使用搜索试试~ 我知道了~
如何读取并处理数据库表.doc
需积分: 5 0 下载量 79 浏览量
2022-07-15
08:57:23
上传
评论
收藏 274KB DOC 举报
温馨提示
试读
31页
如何读取并处理数据库表.doc
资源详情
资源评论
资源推荐
1 / 31
读取并处理数据库表
概览
内容
数据库表和 SQL 概念2
从数据库表读取数据3
定义选择的结果3
指定将读取的数据库表7
为选定数据指定目标区8
选择即将读取的行11
给行分组16
指定行的顺序17
更改数据库表的内容17
向数据库表添加行18
在数据库表中更改行20
添加或更改行22
从数据库表中删除行23
使用光标从数据库表中读取行25
打开光标25
用光标读取数据26
如果 FETCH 语句没有读取任何行, SY-SUBRC 就设置为 4,否则设置为 0。关闭光标26
使用光标读取数据的示例26
确认或取消对数据库表的更改27
为数据库表处理指定集团28
在 ABAP/4 程序中使用本地的SQL 语句29
在 ABAP/4 程序的执行过程中锁定数据库对象30
检查 ABAP/4 程序用户的权限30
本节讲述下列主题:
ABAP/4 中的 SQL 概念
ABAP/4 的开放式 SQL
ABAP/4 自身的 SQL
锁定和授权
在处理来自数据库表的大量数据时,程序的运行时间就成了影响性能的重要因素。有关如何达到
最优性能的示例,请选择 ABAP/4 开发工作台中的“测试�实时分析”(或使用事务 SE30),并
选定“提示和策略”。在“SQL界面”下,将可找到关于本节的适当示例。
2 / 31
数据库表和 SQL 概念
在 R/3 系统中,需长期保存的数据都存储在关系数据库表中。关于各种类型的数据库表以与如何创建和维护它们的
信息,参见文档
ABAP/4 词典
(页 Error! Not a valid link.) 。
结构化查询语言 (SQL) 是为访问关系数据库创建的。SQL 有两个语句类型:数据定义语言 (DDL) 语句和数据操作
语言 (DML) 语句。
现在,SQL 还没有完全标准化。要访问指定的数据库系统,必须查阅该系统的文档,以获取可用的 SQL 语句与其
正确的语法的列表。
要在 ABAP/4 程序中包含这些 SQL 语句,请使用自身的 SQL(参见
在 ABAP/4 程序中使用本地的 SQL 语句
(页2
9) )。
为了避免不同的数据库表之间的不兼容性,并使 ABAP/4 程序能在应用中独立于数据库系统,SAP 创建了一套叫
作开放式 SQL 的独立 SQL 语句。开放式 SQL 包含了一套标准的 SQL 语句以与一些专用于 SAP 的增强语
句。使用开放式 SQL,可以访问对 SAP 系统有效的任何数据库表,而不用考虑它的创建者。
下图显示了开放式 SQL 与自身的 SQL 之间的区别:
数据库界面可将 SAP 的开放式 SQL 语句翻译成专用于现正使用的数据库的 SQL 命令。自身的 SQL 直接访问
数据库。
开放式 SQL 关键字
关键字
用途
SELECT
从数据库表读取数据
(页3)
INSERT
向数据库表添加行
(页18)
UPDATE
在数据库表中更改行
(页20)
MODIFY
添加或更改行
(页22)
DELETE
从数据库表中删除行
(页23)
OPEN CURSOR,
FETCH,
CLOSE CURSOR
使用光标从数据库表中读取行
(页25)
COMMIT WORK,
ROLLBACK WORK
确认或取消对数据库表的更改
(页27)
在 ABAP/4 程序中使用开放式 SQL 语句时,必须保证:
1) 被定址的数据库系统必须是 SAP 支持的。
2) 必须已经在 ABAP/4 词典中定义了被定址的数据库表。
下列系统字段在开放式 SQL 操作中起着重要的作用:
_ SY-SUBRC
和使用其它 ABAP/4 语句一样,系统字段 SY-SUBRC 中的返回代码值表示在每个开放式 SQL
操作之后该操作是否成功。如果操作是成功的,SY-SUBRC 的值就等于 0;如果操作是失败的,
SY-SUBRC 的值就不等于 0。
_ SY-DBCNT
SY-DBCNT 字段中的值表明受该操作影响的行数,或已被处理的行数。
3 / 31
可以使用‘SQL 跟踪’实用程序监视 SQL 或 ABAP/4 功能的性能。为此,请选择“系统�实用程序
�S
QL
跟�踪”。详细信息,参见文档
ABAP/4 工作台工具
(页Error! Not a valid link.) 。
从数据库表读取数据
要从数据库表读取数据,请使用 SELECT 语句。
语法
SELECT <result> FROM <source> [INTO <target>] [WHERE <condition>]
[GROUP BY <fields>] [ORDER BY <sort_order>].
该语句有几个基本子句。下表中列出了每一个子句。
子句
说明
SELECT <result>
SELECT 子句定义选择的结果是单行还是一个表、选择的是哪些列、
以与是否将排除一样的行。
定义选择的结果
(页3)
FROM <source>
FROM 子句指定即将从中选取数据的数据库表或视图 <source>。
指定将读取的数据库表
(页7)
INTO <target>
INTO 子句确定即将读入选定数据的目标区 <target>。该子句也可以放
在FROM 子句之前。如果没有指定 INTO 子句,系统将使用表工作区。
表工作区是由 TANLES 语句自动创建的表头行。
为选定数据指定目标区
(页8)
WHERE <condition>
WHERE 子句指定将按照指定的条件读取哪些行来作为选择。
选择即将读取的行
(页11)
GROUP BY <fields>
GROUP-BY 子句从几行组成的组中产生了作为结果的单行。一个组是
在 <fields> 中列出的列中有一样值的行的集合。
给行分组
(页16)
ORDER BY <sort_order>
ORDER-BY 子句为选定的行定义顺序 <sort_order>。
指定行的顺序
(页17)
关于 SELECT 语句与其子句性能的重要信息,参见关键字文档。
定义选择的结果
SELECT 子句定义是选择单行还是选择多行、是否去掉重复行以与将选择哪些列。
图中显示了可能的选择:
有关叙述 SELECT 子句的三个变式的主题,参见
4 / 31
选择多行中的所有数据
要从数据库表中读取所有列和多行,请按如下方式在循环中使用 SELECT 语句。
语法
SELECT [DISTINCT] * ............
....
ENDSELECT.
必须用 ENDSELECT 语句结束该循环。
该循环依次读取所选行,并为每个读取的行执行循环中的 ABAP/4 语句。SELECT 循环的结果是与被读取的数据库
表的格式完全一样的表。
DISTINCT 选项将自动的去掉重复的行。
如果至少读取了一行,系统字段 SY-SUBRC 就返回 0。如果没有读取,系统字段 SY-SUBRC 就返回 4。系统字
段 SY-DBCNT 给读取的行计数。每执行一次 SELECT 语句,SY-DBCNT 都加 1。
TABLES SPFLI.
SELECT * FROM SPFLI WHERE CITYFROM EQ 'FRANKFURT'.
...
WRITE: / SPFLI-CARRID, SPFLI-CONNID,
SPFLI-CITYFROM, SPFLI-CITYTO.
...
ENDSELECT.
该 SELECT 循环从 SPFLI-CITYFROM 字段中包含“FRANKFURT”的 SPFLI 表中读取所有的行
(由 WHERE 子句指定)。读取的每一行的数据都由循环中的 WRITE 语句写入输出列表中。
输出列表如下所示:
选择单行中的所有数据
要从数据库表中读取单个行的所有列,请按如下方式使用 SELECT 语句:
语法
SELECT SINGLE [FOR UPDATE] * ....... WHERE <condition> ......
该语句的结果是一个单行。为了保证清楚地指定了一行,就必须在 WHERE 子句的条件 <condition> 中用 AND
链接形成数据库表主码主码的所有字段。(关于 WHERE 子句的信息,参见
选择即将读取的行
(页11) )。
如果系统没有找到具有指定关键字的行,系统字段 SY-SUBRC 将设置为 4。如果系统找到了一个完全符合指定条
件的行,SY-SUBRC 就返回 0。
可以使用 FOR UPDATE 选项锁定在数据库表中选定的行。程序将一直等到接收到该锁定。如果数据库检测到或怀
疑有一个死锁定,将产生运行时间错误。
FOR UPDATE 选项不是将 SAP 锁定机制与 ENQUEUE/DEQUEUE 功能模块一起使用的替代
品。例如,显示一个新的屏幕时,所有用 FOR UPDATE 锁定的行都将自动解锁。要保证在显示
新屏幕时锁定的行保留锁定状态,就必须使用 SAP 锁定机制。这是使锁定的行一直到事务的结
束都保留其锁定状态的唯一方法。详细信息,参见
在 ABAP/4 程序的执行过程中锁定数据库对象
(页30)
TABLES SPFLI.
5 / 31
SELECT SINGLE * FROM SPFLI WHERE CARRID EQ 'LH'
AND CONNID EQ '2407'.
WRITE: / SPFLI-CARRID, SPFLI-CONNID,
SPFLI-CITYFROM, SPFLI-CITYTO.
该 SELECT 语句只从 SPFLI 中读取 CARRID 字段中包含“LH”并且 CONNID 字段中包含
“2407”的行。
输出屏幕如下所示
选择并处理指定列中数据
要读取显式地包含规定的列的行,或要得到关于数据库表特定列的摘要信息,请按如下方法一起使用 SELECT 语句
与列表:
语法
SELECT [SINGLE [FOR UPDATE]] [DISTINCT] <s
1
> <s
2
> .....
其中每个 <s
i
> 都具有下列形式之一
_ <a
i
>
<a
i
> 是数据库表的字段或表单的总计表达式:
<aggregate>( [DISTINCT] <a> )
关于总计表达式的说明,参见下列内容。
_ <a
i
> AS<b
i
>
<b
i
> 是结构化目标区的第 i 个组件的可选名称。可使用该可选名称将读取或处理指定行的结果写
到目标区的组件 <b
i
> 中。为此,还必须使用 INTO 子句的 CORRESPONDING FIELDS 选项
(关于该选项的详细信息与示例,参见
逐个组件地读取数据
(页10) )。
DISTINCT 选项将自动地去掉重复行。
如果指定了 SINGLE 选项,选择的结果将由一单行的列 <a
1
> <a
2
>... 组成。将如
选择单行中的所有数据
(页4) 中
的描述选择该行。
可按如下方法书写 SELECT 语句以在运行时指定列:
语法
SELECT [SINGLE [FOR UPDATE]] [DISTINCT] (<itab>).
如果内表 <itab> 包含列表 <s
1
> <s
2
> ....,该语句的操作与上述情况一样。因此,内表 <itab> 的行类型必须是最大
长度为 72,类型为 C 的字段。如果内表为空,那么,该语句就按照指定的是星号(*)而不是 <itab> 来进行操
作。
总计表达式
使用总计表达式,可从数据库表的列 <a> 中摘录特征数据。有效的总计表达式是:
_ MAX:返回列 <a> 的最大值
_ MIN:返回列 <a> 的最小值
_ AVG:返回列 <a> 的平均值
_ SUM:返回列 <a> 的总计
_ COUNT:按下列方式给值或行计数:
- COUNT( DISTINCT <a> ) 返回列 <a> 的不同值的个数。
- COUNT( * ) 返回选定行的总数。
在括号和参数之间必须包含空格。算术操作符 AVG 和 SUM 只能对数字字段进行操作。
SELECT 子句和 INTO 子句中的列表
如果在 SELECT 子句中有一个列表,就必须将 INTO 子句与 SELECT 语句一起使用。和相关主题中叙述的一样,
可以将工作区 <wa> 或内表 <itab> 用作参数。注意,如果 SELECT 子句包含了一个列表,那么就根据工作区 <wa>
或内表 <itab> 的结构将选择的数据从左至右输出到目标区中。这是一个例外。通常情况下,选择的数据是根据表工
作区的结构从左至右输出到目标区中,而不考虑目标区的结构(关于 INTO 子句的详细信息,参见
为选定数据指定
目标区
(页8) )。
SELECT 子句中有一个列表时,可在 INTO 子句中将列表 <F1>, <F2>, ... 用作参数:
剩余30页未读,继续阅读
智慧安全方案
- 粉丝: 3712
- 资源: 59万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Python3实现基于ARIMA模型来预测茅台股票价格趋势(数据集+代码).rar
- 黑色简洁的PHP短网址短链接生成源码.rar
- dbeaver-ce-24.0.5-x86-64-setup.zip
- hfm (1).cpp
- 数据分析案例-数据科学相关岗位薪资可视化分析(数据集+代码).rar
- PSO-SDAE基于粒子群优化堆叠去噪自编码器的数据回归预测多变量回归预测(Matlab完整源码和数据)
- 基于卷积神经网络MobileNet 的情感识别源码.7z
- 一个很好的elasticsearchJavarest客户端 它以类似于mybatis的方式操作和访问elasticsearch
- student.sql
- 一个简单的卷积神经网络(Convolutional Neural Network, CNN)示例
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0