Table key 由三部分构成
1. Components:组成key的字段
2. Sequence:字段顺序
3. Unique/non-unique是否具有唯一性
Data itab type table of [内表类型]. 没有语法错误,只是意义完全不同
注意:相当于定义了一个一位数组 每一个元素都是一个内表元素.
访问物理表
1. 根据 物理表 所对应的 透明表 建立 结构体 或者 内表
2. 单条数据访问 需要使用建立的结构体进行操作
3. 多条数据访问 使用建立的内表进行操作
通过一个内表变量 ,建立与内表line type类型相同的结构体wa
Data wa like line of itab. 根据内表变量定义
Data wa type line of <内表类型>. 根据内表类型定义
读取数据库表
Select <result> from <table> which table
Into <target> whereto
Where<condition> which line
需要声明一个 结构体 或 内表
单条记录 into 到结构体.
多条记录 into 到内表.
Reading by single record access 读取单条记录
对于java 来说, sql 和java 互不相干. Java执行的SQL并非java元素, sql对于java来说只是简单的字符串.
Abap中的open sql 是abap中的一部分. OpenSQL 是基于sql的拓展
只读一条记录时, 一定要加single关键字
Select single *
From scarr
Into wa_scarr
Where carrid = pa_car.
重点:无论查询结果有多少条, single读取只返回第一条记录.
Left justified 从左到右匹配.
概念:根据字段在表中的顺序,对where条件中的字段进行从左到右排序
Where语句中的条件顺序 会影响查询性能, 要遵循从左到右匹配查询.
多表查询
1. 先根据多张表中所需的字段建立结构体.
2. 通过这个结构体对数据进行操作
3. 要使用 corresponding fields of 对字段赋值进行匹配操作.
注意:不使用corresponding 不会出异常 ,但拷贝结果不一定会正确
多条记录读取
Select carrid connid fldate
…..
Endselect.
当数据库操作执行完毕, 要根据 sy-subrc 判断操作是否成功.
0 成功
非0 失败
数据库查询小节
数据库查询分两种
1. 单条 select single
2. 多条 select …. Endselect , array fetch.
多条记录查询
1. Select .. endselect:逐条读取 稳定,但速度较慢
2. Array fetch:把符合查询条件的 记录一次性插入到内表中 速度快, 但不稳定(当内存不足或数据过大时,会导致内存溢出)
运行机制:例如查询10条记录,大小10k
a) 使用select--endselect方式访问, 会访问10次,每次访问1k,
b) Array fetch 将数据看成一整个数据. 一次性放入到内表中
Into clause
对同名并且类型相同的字段进行拷贝 需要使用corresponding fields of,虽然速度较慢,但较稳定
名字相同 类型不同, 则拷贝不会成功.
对于 client-specific 表的查询
client-specific 表中的第一个主键字段为mandt,作用是标识client
该查询分为两种情况
1. 默认情况查询client-specific表
2. 通过特定的mandt查询client-specific
默认情况查询
查询条件中 没有 mandt字段
Select ….. from spfli
Where (mandt = ‘100’ )carrid > ‘LH’.
底层默认在where中加入了 mandt字段作为查询条件, 而此时的mandt的值为当前操作
该程序的client的值
注: 使用这种查询方法,不同的client运行该程序 会极大可能的产生不同运行结果
通过特定的mandt查询client-specific
指定特定 mandt
Select * from spfli
Client specified
Into ..
Where mandt in (401,402) 注意:mandt一定写在第一位
And carrid EQ ‘AA’.
使用特定的mandt , 系统将通过该特定mandt 进行数据访问, 返回结果与client无关
Secondary index 第二索引
索引优点:加快数据库查询速度
劣势:索引仅对数据查询有利, 对update语句(例如:删除,插入)会降低其效率.
注意: 索引并不是越多越好,适当的索引可以加快查询效率
索引分为两类
1. 第一索引(物理索引 或者 主索引)
该索引是基于数据库表主键所包含的所有字段创建的,有且只有一个, 当主键 被创建时 , 主索引就会被系统自动创建
2. 第二索引
根据主键之外的字段所创建的索引,可以包含多字段主键的其中之一或多个作为第 二索引,但不能包含主键的所有字段.
注意:第二索引的数量应该适当,不应太多.
索引机制
在索引创建的时候,系统会自动创建相应的索引表
例如:
1) 一个表中的前2个字段为主键,
2) 此时系统会创建一个3个字段的索引表
3) 其中包括 两个主键字段 和一个 index字段(为了根据主键定位对应的表数据)
4) 创建的索引表与数据表拥有相同的数据条数
写查询语句的时候 where 条件语句要遵循 left justified 机制
从左到右写入索引字段
Database optimizer 数据库优化器
它会根据查询操作,选择出最佳的查询方案.
Authorization checks 权限检查
运行流程:
1) 用户在选择屏幕上输入查询条件 例如:AA
2) 用户确定输入
3) 在数据库查询之前,ABAP程序会到数据库查看当前用户的用户主数据,查看用户是否具有对该数据进行操作的权限, 如果有 sy-subrc = 0 , 如果没有权限 sy-subrc = 4 , 检查失败 sy-subrc = 8.
Authorization objects and authorizations.权限对象 和 权限
权限查询流程
1) 查看用户是否又有相应权限
2) 当具有查询的权限时就在if语句中对该表进行相应操作
3) 如果没有权限 就通过屏幕提示给用户
Authorization_check object: s_carrid 包含两个字段
1. Carrid: 用来指定carrid的值
2. Actvt: activities 可操作的权限类型
Actvt 可取的值:
1. Create = 01 是否有创建的权限
2. Change = 02 修改权限
3. Display = 03 查看权限
一个权限对象可以生成多个权限
carrid : *
Actvt : 03
用户对所有航空公司编码所对应的数据具有查看权限
carrid : Hl
Actvt : 02
该用户可以对HL航空公司对应的数据可以更改.
Authority-check
Object ‘S_CARRID’
ID ‘CARRID’ field ‘LH’
ID ‘ACTVT’ field ‘02’.
(查看数据库的二维表,查看权限是否存在,然后返回给sy-subrc)
If sy-subrc NE 0.
<statement>
Endif.
Dummy:当忽略字段的值时,可以使用dummy
Authority-check object ‘S_CARRID’
ID ‘CARRID’ DUMMY
ID ‘ACTVT’ field ‘02’.
插入权限检查
点击pattern
在authority_check 中输入 s_carrid
Reading Linkable database tables读取多表连接
对于对表的访问有两种方式
1. 静态连接:从多中取出所需字段, 根据提取的字段创建 视图
2. 动态连接:在abap中使用连接语句对多表连接并读取
表连接分类
1. 内连接 inner join
2. 外连接 outer join (包含:左外连接 右外连接 注:ABAP不支持右外连接)
内连接: inner join
例如: 对两个表进行内连接, 将两个表中符合连接条件的记录的字段合并为一条记录,
相当于把这些符合条件的记录又重新组成了一个新表.
SELECT …
FROM spfli INNER JOIN scarr
ON spfli~carrid = scarr~carrid
Where…
注:由于多表中可能出现重复字段, 索引因该使用 <表名>~<字段名> 进行区分
外连接:outer join
左外连接:
例如: 两张表进行外连接, 一张为左表, 另一个为右表
当进行左外连接时, 无论左表是否符合连接条件,它的字段都会在新集合中, 而右表只有符合连接条件,字段才会被插入到新集合中
右外连接(abap不支持):
与左连接顺序相反,
BAPI :business API
可以理解为 abap的方法
封装了select语句,可以直接使用
Logical database 逻辑数据库
不是物理数据库 ,而是ABAP程序, 可以充当数据库使用
警告:对数据库进行插入,更新,删除,修改 是很危险的.所以推荐初学者只进行查询操作
subroutines子程序
功能:封装了程序中经常使用的代码,可以简化代码量.(相当与其他语言的 方法)
子程序的定义
定义子程序interface
1. 参数个数
2. 参数类型
形式参数与实际参数
1) 形式参数: 子程序定义中的参数
2) 实际参数: 调用子程序时的参数
形式参数的三种方式
1. Call-by-value 值传
2. Call-by-reference 引用传
3. Call-by-value-and-result 值传并带有返回值
Call-by-value 值传类型
1. 变量首先进行自身拷贝
2. 拷贝变量被传到子程序中
3. 子程序对拷贝变量的修改不会关系到原变量的变化.
Call-by-reference 引用传
1. 该传递会将变量的内存地址传送至子程序中
2. 子程序会直接操作内存,所以源变量也会随之改变
Call-by-value-and-result 值传并带有返回值
1. 与值传相同,首先变量自身拷贝,并将拷贝变量传送到子程序中
2. 子程序对拷贝变量修改完毕后,会将该拷贝变量重新覆盖回源变量中去
注意:修改的值不一定每一次都返回成功.当出现异常错误时,拷贝变量将可能不会返回.
子程序的声明
在形式参数中:
USING Value(<参数名>) 值传
CHANGING value(<参数名>) 值传带有返回值
USING (推荐:内表形参使用) / CHANGING <参数名> 引用传
子程序定义时的参数类型:
1. 简单类型: 一般类型(不可分解)
2. 复合类型: 内表类型
形参的简单类型
1. 指定类型: 例 USING value(f_1) TYPE i.
2. 任意类型: 该形参可匹配任何类型 例:USING value(f_1) TYPE ANY. (不推荐, 运行过程中很可能出现类型不一致的运行错误)
形参的复合类型
重点:复合类型形参必须为特定类型,以访问内部的字段.
复合类型的形参 推荐使用 call-reference 引用传作为传递类型.
例: 使用内表作为形参, 当调用子程序 并传递 内表参数的时候,由于内表数据量相对较大,使用值传 或值传带返回值都会对内表变量进行拷贝, 这样会降低运行效率.
所以使用引用传 可以避免拷贝过程 以 提高效率.
但是引用传会使内表被修改.
因此推荐 将该引用传 参数 写在 USING 关键字后,以提醒编程人员不要轻易修改.
重点:
在子程序中定义的变量,只有在子程序中才有效
而在主程序中的变量,子程序依然可以调用,但不推荐,因为这样可能会导致程序出现错误,所以在使用子程序时要传入相应参数
子程序的调用
1. 将子程序从导航中托到主程序中
2. 使用 pattern 的 perform选项调用子程序
Abap runtime system 运行环境
Abap程序是若干处理得块的集合
代码块分类
1. Event block事件块
2. subroutines子程序
3. module 块
Load-of-program 程序启动时被调用
一个报表的运行
1. 首先执行load-of-program或initialization.
2. 推出选择屏幕
3. 用户确定屏幕以后,启动start-of-selection事件
4. 通过列表缓冲区,运行环境把列表返回给用户
注意:Load-of-program 和 start-of-selection 有且只能触发一次.
重点:
事件块的特点
1. 通过关键字开始
2. 事件块的开始意味着上一个事件块的结束
3. 每一个事件块执行不同的任务
4. 事件块的执行是有顺序的,虽然在编写上没有要求,但建议按照顺序编写
5. 标准的事件块
Initialization 只能在可执行程序中初始化程序
创建报表必须使用start-of-selection事件块
List attributes
报表功能:
可以被打印
可以格式化输出(不通的货币和长度单位)
输出日期格式
根据登陆语言选择特定语言
生成一个屏幕
列表屏幕的标准功能
Back /exit /cancel
Scroll
Print
Fine
Save
一个列表拥有一个list header 和四个 column header.
Multilingual capability多语言编程
Text-ccc(三位数字)
1. Write text-001.
2. 双击 text-001 进行创建.
3. Goto- translate
4. 修改翻译语言
5. 使用相应的登陆语言登陆,就会输出相应语言
Write语句会将数据写到缓冲区
1. 用select 语句取出数据
2. 每write一次就会把数据放到缓冲区中
3. 当start-of-selection 结束后, 运行环境将会把所有的write skip uline数据全部推到屏幕上
Detail list
At line-selection事件
1. 在list screen中, 双击记录或者单击并按F2键 会出发at line-selection事件
2. 通过该事件,可以生成下一级的报表,通过该报表还可以再生成下一级报表,
每一个屏幕都有一个编号. Start-of-selection 所生成的屏幕叫做 basic list screen 其编号为0,
而后所生成的屏幕的编号为依次加1.
重要: 最大屏幕号为 20, 最多有21层
除了第一层在start-of-selection
其他的屏幕都在at line-selection后生成
Sy-lsind 列表屏幕的索引编号 lsind = list index
在detail list使用back按钮 ,可以跳到上一级屏幕
重要:当双击list 的数据后, 系统首先将sy-lsind 加1 然后再触发at line-selection
用array fetch 很难做双击后的list
Hide area 隐藏域
Hide area隐藏域是系统运行环境中的一张内表.
其中包含3个字段
1. Line : 标示行号
2. Field name: 字段名
3. Value : 字段的值
隐藏域的使用
1. 通过 select …endselect 对数据库进行循环查询,
2. 通过 write 语句, 打印出basic list screen 中的列表信息
3. 通过 hide 语句, 将指定的字段,存放到隐藏域中
4. Basic list screen 生成后,用户双击信息行,触发at line-selection 事件,
5. 此时,系统将根据该信息行到隐藏域中查找相应字段
6. 最后将该字段返回给对应的全局变量的字段中去, 以便于在下一个detail list 中继续使用
转载:http://blog.sina.com.cn/s/blog_5cdacb630100ce92.html
分享到:
相关推荐
标题所涉及的知识点:ABAP PA是SAP系统中ABAP(Advanced Business Application Programming)的编程助理认证,其中PA指的是Programming Associate。SAP认证旨在通过标准化的考试来评估和确认个人在SAP ABAP编程方面...
SAP ABAP PA 试题2 本试题涵盖了 SAP ABAP 编程语言的多个方面,包括数据类型、数据对象、语句、报表设计等。下面是详细的知识点解释: 1. 编译错误语句分析 在 ABAP 中,语句 `write at 12 XXX.` 会报错,因为 `...
【SAP ABAP PA】是SAP的一种编程技术,主要用于人力资源模块(Personal Administration)的数据处理。在SAP ABAP PA的开发中,了解数据类型、结构体、内表的使用至关重要。 1. 数据类型:在SAP ABAP中,长度为4个字节...
资源名称:sap abap开发从入门到精通 内容简介: 《SAP ABAP开发从入门到精通》以应用实例的形式,讲解了SAPABAP开发的相关知识点,详细介绍了SAPABAP开发者必须掌握的包与变更传输系统(CTS)、数据类型、数据库...
这份"用户入门手册——SAP ABAP4中文培训资料"是专为初学者设计的,旨在帮助理解并掌握SAP ABAP4的基本概念、语法和实践应用。 1. **SAP概述**: SAP是一个全球领先的业务软件解决方案提供商,其产品广泛应用于...
根据提供的文件信息,我们可以归纳出以下关于SAP_ABAP_PA的相关知识点: ### 一、SAP_ABAP_PA 教材及视频概述 SAP(System, Applications, and Products in Data Processing)是全球领先的企业管理软件之一,广泛...
sap-abap
SAP ABAP Certification Review SAP ABAP Interview Questions, Answers, And Explanations.pdf
SAP ABAP初级培训手册 本手册旨在为初级学员提供SAP ABAP的基本知识和实践经验,帮助他们快速掌握ABAP语言的基本语法和开发技术。以下是本手册的知识点概要: 一、ABAP基础语法 * ABAP语言的基本结构和组成 * ...
SAP ABAP基础培训教材,比较适合初学者,主要是一些基础语法
本资料包是针对SAP ABAP初学者的培训练习题,旨在帮助学习者掌握基本概念和技能,从而顺利入门。 首先,"Development naming rule_V1.1-2.doc"可能是一份关于ABAP开发中的命名规范文档。在编写ABAP代码时,遵循良好...
SAP ABAP(Advanced Business Application Programming)是SAP公司推出的一种高级业务应用编程语言,用于开发在SAP R/3和SAP NetWeaver平台上的应用程序。这些电子书提供了全面的资源,帮助学习者深入理解并掌握SAP ...
《SAP ABAP开发从入门到精通》以应用实例的形式,讲解了SAP ABAP开发的相关知识点,详细介绍了SAP ABAP开发者必须掌握的包与变更传输系统(CTS)、数据类型、数据库、模块化程序、内表、调试、ABAP数据字典、锁对象...
BC401是SAP培训课程中的一部分,专注于介绍ABAP(Advanced Business Application Programming)编程语言中的对象技术。在SAP系统中,ABAP是一种非常重要的编程语言,用于开发定制化的业务应用。 - **ABAP对象概念**...
根据给定文件的信息,我们可以提炼出关于"SAP-PA教材"的重要知识点,主要围绕SAP的Project Management(项目管理)模块展开,这是SAP产品生命周期管理(mySAP Product Lifecycle Management,简称PLM)的一部分。...
ABAP PA,全称为ABAP for Personnel Administration,是SAP人力资源模块中的一个重要组成部分,用于处理企业内部的人力资源管理事务。在本压缩包文件“ABAP PA中文教材.zip”中,我们可以期待找到一系列关于如何使用...
SAP ABAP(Advanced Business Application Programming)是SAP系统中的编程语言,用于开发和定制企业应用程序。对于想要深入理解SAP编程的初学者,实战SAP程序开发——从实例学SAP ABAP编程这个资源提供了宝贵的实践...
在本课程“SAP ABAP开发学习——第19课:实战讲解”中,我们将深入探讨SAP ABAP(Advanced Business Application Programming)编程语言在实际项目中的应用。ABAP是SAP系统的核心开发语言,用于构建企业级业务应用...
SAP ABAP开发学习——第9课:ALV2(视频教程) 1.SAP ABAP开发入门学习 2.含视频教程学习、PPT、作业 3.视频非常清晰
SAP ABAP(Advanced Business Application Programming)是SAP公司开发的一种编程语言,主要用于在其ERP(企业资源规划)系统中创建和定制业务逻辑。在SAP ABAP 1.4.4版本的代码下载中,我们可以深入探讨这个版本的...