第6单元:数据建模与数据检索练习(10题)

第6单元:数据建模与数据检索练习(10题)

#practice #abap #abap-sql

相关概念

📌关键模式(点击展开)
关键词 答案
SELECT SINGLE 可能无数据 — 需检查 sy-subrc
数组读取 INTO TABLE — 一次数据库访问
SELECT 循环 INTO wa … ENDSELECT — 多次访问
sy-subrc = 4 未找到数据
AUTHORITY-CHECK sy-subrc 0 = 有权限

问题 1 - 数据建模 [recall]

什么是实体关系模型(ERM),它的用途是什么?

📌显示答案
ERM 对现实世界中的业务实体(例如客户、订单)及其关系进行建模。它是在 ABAP 字典中实现表定义的蓝图。

问题 2 - 透明表 [recall]

在 ABAP 字典中激活透明表定义时会发生什么?

📌显示答案
会在底层数据库中自动创建对应的数据库表

问题 3 - 主索引与次索引 [recall]

主索引和次索引有什么区别?

📌显示答案
主索引:在主键字段上自动创建。次索引:在 WHERE 子句中频繁使用的非键字段上手动创建。

问题 4 - SELECT SINGLE [recall]

SELECT SINGLE 返回什么?需要检查结果吗?

📌显示答案
SELECT SINGLE 返回第一条匹配记录(也可能没有记录)。你必须检查 sy-subrc — 0 表示找到,4 表示未找到匹配。

问题 5 - 数组读取的优势 [recall]

SELECT … INTO TABLE 相比 SELECT 循环有什么优势?

📌显示答案
数组读取执行单次数据库访问。SELECT 循环执行多次(每行一次)。数组读取效率显著更高。

问题 6 - 读取方式对比 [analysis]

比较三种读取数据库数据的方式:SELECT SINGLE、SELECT 循环和数组读取。

📌显示答案
方式 适用场景 数据库访问次数
SELECT SINGLE 已知单条记录 1
SELECT 循环 读取时逐行处理 每行 1 次
数组读取 先读取全部,后处理 1

问题 7 - INNER JOIN [application]

你需要从 SFLIGHT 和 SCARR 中获取带有航空公司名称的航班数据。请编写一个使用 JOIN 的概念性 SELECT 语句。

📌显示答案
使用 INNER JOIN 连接 carrid:
1
2
3
4
SELECT s~carrid s~connid c~carrname
FROM sflight AS s
INNER JOIN scarr AS c ON c~carrid = s~carrid
INTO TABLE gt_result.

问题 8 - 权限检查 [recall]

编写 AUTHORITY-CHECK 来验证用户可以显示(活动 ‘03’)某个航空公司的数据。

📌显示答案
1
2
3
4
AUTHORITY-CHECK OBJECT 'S_CARRID'
ID 'CARRID' FIELD gv_carrid
ID 'ACTVT' FIELD '03'.
IF sy-subrc = 0. " 有权限。 ENDIF.

问题 9 - 权限检查位置 [analysis]

开发者在 SELECT 之后添加了 AUTHORITY-CHECK。这样做正确吗?

📌显示答案
不正确。 应该放在数据访问之前。否则无权限的用户仍然会检索到数据。

问题 10 - Open SQL 的优势 [recall]

Open SQL 相对于 Native SQL 的主要优势是什么?

📌显示答案
数据库无关性。 可在所有支持的数据库系统上运行,并具有自动缓冲功能。

📌模式总结(点击展开)
关键词 答案
ERM 用途 表定义的蓝图
透明表激活 创建数据库表
SELECT SINGLE 第一条匹配,需检查 sy-subrc
数组读取 INTO TABLE,一次数据库访问
AUTHORITY-CHECK 在受保护操作之前执行
Open SQL 优势 数据库无关