数据库视图 (★★★★)

数据库视图 (★★★★)

#abap #abap-dictionary #abap-views

概览表

Concept (概念) Key Point (要点)
Join (连接) 合并多表数据
Projection (投影) 选择部分字段
Selection (选择) 限制数据记录
Inner Join 只返回所有表都有匹配的记录

视图的构建过程

视图由三步操作构成:

1
2
3
4
5
6
7
8
Step 1: JOIN (连接/叉积)
SCARR × SFLIGHT → 所有组合

Step 2: JOIN Condition (连接条件)
SCARR-CARRID = SFLIGHT-CARRID → 仅匹配记录

Step 3: Projection (投影) + Selection (选择)
→ 选择需要的字段 + 限制条件

示例

1
2
3
4
5
6
7
8
9
10
11
Before:                              After View:
SCARR (2 rows) × SFLIGHT (4 rows) View ZEMPFLY##
= 8 combinations (cross product) (filtered + projected)

Join Condition: SCARR-CARRID = SFLIGHT-CARRID
→ 保留匹配的记录

Projection: 去掉 PLANETYPE 等不需要的字段

Selection: WHERE CARRID = 'DL'
→ 只显示 Delta 航空

数据库视图特性

Property (特性) Detail (详情)
Join 类型 Inner Join(内连接)
数据库创建 激活时自动在数据库中创建
修改处理 删除旧视图 + 重新创建
可读 总是
可写 仅单表视图可写
缓冲 支持(同表缓冲设置)
SQL 使用 SELECT ... FROM view_name
📌Inner Join 含义
数据库视图只返回所有表中都有匹配的记录。
如果某记录在一个表中没有对应条目,则不会出现在结果中

创建视图

连接条件来源

1
2
方式 1: Relationships 按钮 → 从外键自动复制连接条件
方式 2: 手动输入连接条件
💡推荐
使用 Relationships 按钮可以自动从外键复制连接条件,减少错误。

动态字段包含

在视图维护中使用特殊字符:

Symbol Meaning Usage
* (View field) 包含整个表的所有字段 动态适应表字段变化
* (Field name) 同上
- (View field) 排除特定字段 隐藏不需要的字段
1
2
3
View Field | Table | Field Name
* | SPFLI | * ← 包含 SPFLI 所有字段
- | SPFLI | PLANETYPE ← 排除 PLANETYPE
  • 表新增字段时自动包含在视图中
  • Append 结构添加的字段也会自动包含

Append View

类似于 Append 结构,可以为客户增强数据库视图:

  • 一个 Append View 对应一个数据库视图
  • 可以有多个 Append View

视图在程序中的使用

1
2
3
4
5
6
7
" 直接 SELECT 从视图
SELECT * FROM zempfly##
INTO TABLE it_employees
WHERE area = 'F'.

" 视图也可用作类型
DATA wa TYPE zempfly##.

等价的 Open SQL JOIN

1
2
3
4
5
6
7
8
9
10
SELECT C~carrid C~carrname P~connid P~cityfrom P~cityto
F~fldate F~seatsmax F~seatsocc
INTO TABLE itab_flights
FROM ( scarr AS C
INNER JOIN spfli AS P ON C~carrid = P~carrid )
INNER JOIN sflight AS F
ON F~carrid = P~carrid
AND F~connid = P~connid
WHERE cityfrom IN so_cityf
AND cityto IN so_cityt.

考试/测试模式

Scenario/Keyword (场景/关键词) Answer (答案)
“数据库视图的 Join 类型?” Inner Join(内连接)
“多表视图可以写入吗?” 不能,只能读
“视图修改后数据库如何处理?” 删除+重建
“动态包含用什么符号?” * 包含,- 排除