打开 SQL 和本机 SQL SAP ABAP

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

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

  1. 原生 SQL
  2. 打开 SQL。

无论 R/3 系统使用什么数据库平台,Open SQL 都允许您访问 ABAP 字典中声明的数据库表。

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

Open SQL 包含一组 ABAP 语句,用于对 R/3 系统中的中央数据库执行操作。操作结果和任何错误消息与所使用的数据库系统无关。因此,Open SQL 为 R/XNUMX 支持的所有数据库系统提供了统一的语法和语义 SAP仅使用 Open SQL 语句的 ABAP 程序可在任何 R/3 系统中运行,无论使用哪种数据库系统。Open SQL 语句只能与已在 ABAP 字典中创建的数据库表一起使用。

基本开放 SQL 命令

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

例如:

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.

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

打开 SQL 返回代码

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

SY-SUBRC

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

SY一DBCNT

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

本机SQL

正如前面提到的,Native SQL 允许你在 ABAP 程序.

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

句法

EXEC SQL [PERFORMING <form>].

  <Native SQL statement>

ENDEXEC.

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

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

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

打开 SQL – 性能规则

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

保持结果集较小

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

尽量减少传输的数据量

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

尽量减少数据传输次数

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

最小化搜索开销

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

减少数据库负载

  • Buffer博士开发的技术萃取的
  • 逻辑数据库
  • 避免重复访问数据库

使用内部表 Buffer 记录

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