您的位置:首页 > 数据库

总结2 (强晟BC400 PPT)

2009-07-09 08:28 288 查看
在程序开始时,程序内容被读到应用服务器的内存区,程序中定义的数据对象也分配了相应的内存空间
 
move var1 to var2 等价于 var2 = var1
 
clear语句根据类型清楚数据对象,恢复成默认值
 
运算:
-          / :除法
-          DIV:整除忽略余数
-          MOD:取模
 
length = strlen(cityfrom )
 
 
条件分支:
1、  IF ELSE ENDIF
2、  IF ELSEIF ELSE ENDIF
3、  IF ELSEIF ENDIF
4、  CASE WHEN OTHER ENDCASE
 
循环:
1、  DO EXIT ENDDO.
2、  WHILE ENDWHILE
3、  SELECT
4、  LOOP
 
消息:
message语句必须指定三位数的消息号和消息类
SAP系统提供了一个消息测试的程序DEMO_MESSAGES
若消息使用了占位符,则需要在程序里用WITH关键字指定代替这些占位符的文字
 
ABAP调试器:在事务码输入栏中输入“/h”,然后回车
传统调试器最多可指定10个观察点,并用AND或者OR的关系连接起来
 
 
本地结构的定义:
使用TYPES来定义
TYPES: BEGIN OF STRUCTURE_TYPE_NAME,
       …,
       END OF STRUCTURE_TYPE_NAME.
DATA: STRUCTURE_NAME TYPE STRUCTURE_TYPE_NAME.
其中使用TYPE或者LIKE来指定组件
若结构不需要重用,可直接使用DATA语句来定义结构变量。
访问结构的组件:structure_name-component_name 连字符
使用move-corresponding语句把一个结构的内同同时拷贝到另一个结构中,只有源结构和目标结构中有相同名称的组件才会拷贝
  
 

内表是一个数据对象,可保存多个相同结构的数据
内表属性:
1、  行类型
2、  键 (唯一不/唯一)
3、  表类型 (标准表、排序表、哈希表)
哈希表只能以键访问,键唯一
标准表键不唯一
排序表数据记录在表内自动以升序进行排列
 
本地表类型定义通过TYPES语句来完成,并通过WITH NON-UNIQUE KEY定义主键
 
访问单条记录:(一般需要一个与内表行结构相同的工作区来处理单条记录)
APPEND:在最后一条记录追加,只用于标准表
INSERT:向内表插入一条记录,在标准表中跟APPEND效果一样,在哈希表中根据哈希算法插入到指定位置,在排序表中插入到键指定位置
READ:表指定行拷贝到结构中
MODIFY:使用结构的内容重写表指定行
DELETE:删除表指定行
COLLECT:结构中内容累加到内表具有相同键的行上,只有非键字段才执行累加,并且只有非键字段都是数值时候才能执行这个语句
 
处理结构集合:
1、  LOOP INTO WA ENDLOOP 系统字段sy-tabix指定了当前循环到内标的哪一行
2、  DELETE:删除满足条件的所有行
3、  INSERT::把内标中的多行拷贝到另一个内表中
4、  APPEND:把内标中的多行追加到另一个标准表中
 
使用索引读表:
1、  LOOP中 FROM TO
2、  READ 中INDEX
3、  LOOP 中WHERE
4、  READ 中 WHERE TABLE KEY
 
内标排序:
1、  标准表和排序表使用SORT语句对指定字段进行排序,没指定则默认使用升序
2、  AS TEXT语句,按照语言的字典排序
3、  STABLE,排序字段有相同值的记录顺序在排序后保持不变
 
清除内表内容:
1、  REFRESH 清除整个内表内容,释放部分内表内存
2、  CLEAR 对于无内表头,跟REFRESH一样,对于有内表头的,则初始化表头
3、  FREE 清除整个内标内容,释放所有内存
表头HEADER LINE:WITH HEADER LINE定义表的时候指定表头
 
表头的缺点:
1、  表头与内表名相同,影响阅读
2、  有表头的内表不允许使用复杂数据对象(不能把其他内表作为表的组件)
3、  有表头的内表不允许使用ABAP对象(面向对象的ABAP扩展)
4、  有表头的内表用itab[]表示整个表
 
 

数据库读访问:
1、  SELECT <files> FROM <table> INTO <target> [where <condition>]
2、  SELECT后面的块说明了需要读表的哪些字段
3、  FROM后面的块说明了需要读哪个数据源(表或视图)
4、  INTO后面的块说明了读出的字段放在哪个目标数据对象中
5、  WHERE后面的块说明了读数据的基本条件
 
读取单条记录:
1、  SELECT SINGLE从数据库表读取单条记录,CLIENT字段在这里可以不必指定,系统自动选定属于当前client记录
2、  SELECT语句中使用CLIENT SPECIFIED子句可以关闭自动客户端选定
3、  * 指定数据表的全部字段
4、  INTO指定记录要拷贝到目标变量
5、  找到合适记录,则系统变量sy-subrc = 0
6、  不用结构来保存数据,在into后面使用一个变量立标 into (field1,field2,..,fieldn)
7、  目标结构的数据结构与查询字段的顺序不一致,或者使用*这样的通配符来指定查询字段,需要corresponding fields of子句
 
读取多条记录:
1、  SELECT ENDSELECT
2、  WHERE条件可以指定需要选择的记录
3、  sy-subrc = 0 至少查询到一条记录
4、  sy-dbcnt 记录一共查询到多少条记录
5、  INTO TABLE 把查询结构一次性读到内表中
6、  成块传输,不需要ENDSELECT
7、  APPEND TABLE把新查询到得数据追加到已有数据的内表后面
 
从CLIENT相关的表中国读取数据:
1、  有一个客户端字段作为主键,数据类型为CLNT,字段名为mandt
2、  不指定客户端,只有当前客户端的数据会被查询出来
3、  跨客户端的数据操作,FROM后面加CLIENT SPECIFIED子句,where条件里包含客户端了
 
 

性能提升
1、在不同的应用中,通常会经常使用某种查询,可以为这些查询所用的字段定义二级索引 ,从而加快查询速度。在查看ABAP 字典的透明表时,可以用“索引”按钮打开和维护索引。
2、 对于客户端相关的表,客户端字段默认传输给数据库,因此建立二级索引时应把客户端字段作为第一个 索引字段,可以有效提高查询速度。
3、索引建立并激活后,系统会用索引进行数据库优化。程序执行时会自动寻找跟查询条件相匹配的索引,从 而加快查询速度,编写程序时无需在程序的查询语句 中指定索
4、主索引根据表的主键自动建立,使用主键字段进行查询是最快的办法。
 
SAP重用组件:
1、逻辑数据库:按表的层次结构组织起来的数据库
2、功能模块:SAP做好的一些函数库
3、BAPIs:SAP定义好的业务逻辑开发接口
4、全局类方法:
 

数据库修改访问除了SELECT 外,开放SQL 还包含了UPDATE, INSERT,DELETE 和MODIFY 等多个语句
 
权限对象在权限类中定义,定义权限对象时必须指定相应字段(不需要值),当创建实际的权限时就为这些字段指定值,这些权限就可以通过授权参数文件传递到用户主数据中
 
权限检查系统运行时,可以使用AUTHORITY-CHECK 语句来执行权限检查,以确定用户是否有权限查看进一步的内容。根据检查结果,可以指定程序流程,检查结果 保存在sy-subrc 字段里,0 表示检查通过,执行相应功能,非0 表示检查未通过,给用户一个权限不足的提示。
 
一般来说ACTVT 这个系统定义的字段是必须的,它定义了权限对象的操作
可以使用事务码SU20 创建权限字段,用事务码SU21 创建对象类和权限对象

 
应用权限检查
1、程序里编写权限检查的代码很简单,可以参考AUTHORITY-CHECK 的关键字文档,只要正确填写权限对象和检查字段的值就可以了,不需要填写权限 对象所有的检查字段,没有填写的字段,默认不做检查,也可以用预定义的DUMMY 子句代表检查时忽略该字段。
2、系统的TACT 表保存了ACTVT 字段所有可能的值, TACTZ 表则保存了在各个权限对象中允许的值。
3、在AUTHORITY-CHECK 语句结束后,可以根据sy- subrc 字段的值确定检查结果。
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息