SAP ABAP 中 OpenSQL和Native SQL-05 本教程的目的不是教您 SQL 或数据库概念

SAP ABAP 中 OpenSQL和Native SQL-05

本教程的目的不是教您 SQL 或数据库概念,而是向您介绍 ABAP 中的 SQL 多样性

在 ABAP/4 编程语言中,使用了两种类型的 SQL。

  1. Native SQL
  2. Open SQL。

Open SQL 允许您访问在 ABAP 字典中声明的数据库表,而不管 R/3 系统使用的数据库平台如何。

Native SQL 允许您在 ABAP/4 程序中使用特定于数据库的 SQL 语句。 这意味着您可以使用不受 ABAP 字典管理的数据库表,从而集成不属于 R/3 系统的数据。

Open SQL 由一组 ABAP 语句组成,这些语句在 R/3 系统中的中央数据库上执行操作。 操作的结果和任何错误消息都与正在使用的数据库系统无关。 因此,Open SQL 为 SAP 支持的所有数据库系统提供了统一的语法和语义。 只使用 Open SQL 语句的 ABAP 程序可以在任何 R/3 系统中工作,而不管使用的数据库系统如何。 Open SQL 语句只能用于在 ABAP 字典中创建的数据库表。

基本的OpenSQL 命令

  • 选择
  • 插入
  • 更新
  • 调整
  • 删除
  • 打开光标,获取,关闭光标

例子

TABLES SBOOK.

DATA C TYPE CURSOR,

WA LIKE SBOOK.

OPEN CURSOR C FOR SELECT * FROM SBOOK WHERE CARRID = 'LH '

AND CONNID = '0400'

AND FLDATE = '19950228'

ORDER BY PRIMARY KEY.

DO.

FETCH NEXT CURSOR C INTO WA.

IF SY-SUBRC <> 0.

CLOSE CURSOR C.

EXIT.

ENDIF.

WRITE: / WA-BOOKID, WA-CUSTOMID, WA-CUSTTYPE,

WA-SMOKER, WA-LUGGWEIGHT, WA-WUNIT,

WA-INVOICE.

ENDDO.

输出 1995 年 2 月 28 日汉莎航空 0400 航班的乘客名单:

open SQL 返回码

所有 Open SQL 语句都用返回码填充以下两个系统字段。

SY-SUBRC

在每个 Open SQL 语句之后,如果操作成功,则系统字段 SY-SUBRC 包含值 0,如果不成功,则包含非 0 值。

SY-DBCNT

在 Open SQL 语句之后,系统字段 SY-DBCNT 包含已处理的数据库行数。

本机 SQL

如前所述,Native SQL 允许您在 ABAP 程序中使用特定于数据库的 SQL 语句。

要使用 Native SQL 语句,您必须在它前面加上 EXEC SQL 语句,并在它后面加上 ENDEXEC 语句。

句法

EXEC SQL [PERFORMING <form>].

  <Native SQL statement>

ENDEXEC.

Native SQL 语句后没有句点。 此外,在Native SQL 语句的行首使用引号 (") 或星号 (*) 不会像在普通 ABAP 语法中那样引入注释。 您需要知道所选数据库中的表名和字段名是否区分大小写。

在 Native SQL 语句中,数据使用主机变量在数据库表和 ABAP 程序之间传输。 这些在 ABAP 程序中声明,并在 Native SQL 语句中以冒号 (😃 开头。 您可以使用基本结构作为主变量。 在特殊情况下,INTO 子句中的结构被视为其所有字段都单独列出。

与 Open SQL 中一样,在 ENDEXEC 语句之后,SY-DBCNT 包含已处理的行数。 在几乎所有情况下,SY-SUBRC 在 ENDEXEC 语句之后都包含值 0。

Open SQL – 性能规则

为了提高 SQL 和 ABAP 程序的性能,应该注意以下规则 -

保持结果集小

  • 使用 where 子句
  • 如果只需要数据库中的一条记录,请尽可能使用 SELECT SINGLE。

最小化传输的数据量

  • 限制行数
  • 如果表中只需要某些字段,请使用 SELECT INTO … 语句
  • 限制列数
  • 使用聚合函数

最小化数据传输次数

  • 避免嵌套选择循环
  • 另一种选择是使用 SELECT … FOR ALL ENTRIES 语句。 此语句通常比在内部表的循环期间执行大量 SELECT 或 SELECT SINGLE 语句更有效。
  • 使用字典视图
  • 在 FROM 子句中使用联接
  • 在 where 子句中使用子查询

最小化搜索开销

  • 在 where 子句中使用索引字段
  • 访问数据库时,请始终确保使用了正确的索引。

减少数据库负载

  • 缓冲
  • 逻辑数据库
  • 避免重复的数据库访问

使用内部表缓冲记录

  • 为了避免多次执行相同的 SELECT(因此有重复的选择),可以使用 HASHED 类型的内部表来提高性能。

参考:https://www.guru99.com/native-open-sql.html

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值