SAP 表结构定义 migration 中数据内容丢失
测试过程中发现某数据库表结构定义需要修改(需要将一个字段的名称和数据元素,底层数据类型定义不变,比如长20的字符型还是长20的字符型,只是对应的数据元素名称变了)。 从开发环境migrate到测试环境中后,发现被修改的字段内容原有数据内容全部都被抹掉了。 不知道这其实是不是可控的。 还好只是测试数据。以后要小心了。
多读书,读好书
测试过程中发现某数据库表结构定义需要修改(需要将一个字段的名称和数据元素,底层数据类型定义不变,比如长20的字符型还是长20的字符型,只是对应的数据元素名称变了)。 从开发环境migrate到测试环境中后,发现被修改的字段内容原有数据内容全部都被抹掉了。 不知道这其实是不是可控的。 还好只是测试数据。以后要小心了。
[java] *———————————————————————* *Report READ_DIRECTORY *———————————————————————* *调用UNIX命令 ls -l 显示指定服务器路径下的文件列表 *———————————————————————* REPORT READ_DIRECTORY. selection-screen begin of block ucmd with frame title text-001. parameters: unixdir like rlgrap-filename. ” 输入服务器路径 selection-screen end of block ucmd. data: begin of tabl occurs 500, line(400), end of tabl. data: wa_line(400) type c. *———————————————————————- start-of-selection. refresh tabl. * 调UNIX命令读取路径,结果写到内表中 concatenate ‘ls’ ‘-l’ […]
Business requirment经常要求某个ID的值只能包含26个字母和10个数字字符,这就要求ABAP程序能够检查相应变量内容,辨别特殊字符。sap-img上的一个例子提供了这样的功能: REPORT ZCHECK_ALPHA_NUMERIC. * Declare the variable * For Length data: serial_length type i. * For Alpha numeric data: str type string. data: valid_characters type string. * Fill in those valid characters you need to check concatenate ‘0123456789’ ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’ ‘abcdefghijklmnopqrstuvwxyz’ into valid_characters. * User Input parameters testchar(10) default ‘12345abc’. * Get User Input str […]
SAP中的国家代码表是T005T. 另外 ADRC表的COUNTRY字段的帮助视图(Help View),也可以看到country code 和 country name的对应表。
ABAP对字符串有很多隐形的操作,有时更方便程序员,有时又比较容易使人困惑。 比如在比较字符串的值时,ABAP会自动忽视有效字符后面的空格,而如果在字符前面有空格,则会影响比较的结果。 比如: ‘X’ 和 ‘X__’ 比较的结果是相等;而’X’和’__X’比较的结果则是不相等。 (这里下划线__代表空格) 运行下面的程序可以看到效果: DATA: l_string1 TYPE string, l_string2 TYPE string, l_string3 TYPE string. l_string1 = ‘X’. “No space l_string2 = ‘X ‘. “Space after X l_string3 = ‘ X’. “Space before X IF l_string1 EQ l_string2. WRITE: / ‘String 1 and String 2 are identical.’. ELSE. WRITE: / ‘String […]
内表是一个运行状态下存在的实例,它在程序开始运行时才生成,在程序结束运行时被销毁。 内表包含两个部分,可有可无的标题行(HeaderLine),和必需的表身。进出内表的值都必须通过标题行。 程序例子: * 声明 data: begin of itab occurs 0, x type c, y type i, end of itab. * 初始化标题行 headerline itab-x = ‘d’. itab-y = 34. * 向内表中存入值 append itab. append itab. append itab. * 读取内表中的值 loop at itab . write: / itab-x, itab-y. “输出列表 endloop.
SY-TABIX — 内表当前行的索引号。SY-TABIX 的值可以被以下命令修改,但是只适用于索引表(index table)。对于哈希表(Hashed table),这个系统变量的值为空或0。 APPEND 将 SY-TABIX 的值置为表最后一行的索引号,也就是说它将等于内表的行数。 COLLECT 将 SY-TABIX 的值置为现有或刚刚插入的行的索引号。如果内表为哈希(hashed table)表的话,SY-TABIX 被置为0。 LOOP AT 将 SY-TABIX 的值置为每一次循环开始时的当前行索引号,在整个循环的结束时 SY-TABIX 被恢复为它在进入循环之前的值。对于哈希表(hashed table),它的值为0。 READ TABLE 将 SY-TABIX 的值置为被读取的行的索引号。如果使用二分查找(binary search),而没有找到的话,SY-TABIX 将等于所有行数或行数加1。如果是使用顺序查找而没有找到的话,SY-INDEX 没有定义。 SEARCH <itab> FOR 将 SY-TABIX 的值置为找到要查找字符串所在的行的索引号。 SY-TFILL — 在使用命令 DESCRIBE TABLE、LOOP AT、 和 READ TABLE之后,SY-TFILL 的值为相应内表的行数。 SY-TLENG — 在使用命令 DESCRIBE TABLE、LOOP AT、和 READ […]
以下是SAP提供的各种对ABAP对象进行性能分析的工具: 运行实时分析 transaction SE30 这个 transaction 可以给出对一个ABAP程序的所有分析,包括数据库和非数据库处理操作。 SQL 追踪 transaction ST05 追踪列表有很多行不是关于 SELECT 语句的,因为任何ABAP程序的执行都会需要很多附加的管理性SQL调用。可以使用过滤器来显示追踪列表的输出来只显示有关的行。 追踪列表同时包含与一个SELECT语句相关的多个不同 SQL 命令,因为 R/3 数据库接口 — R/3应用服务器的一个复杂的组成部分 — 将每一个 Open SQL 命令映射为一个或一系列的物理数据库调用指令并执行这些指令。这种映射依赖于具体的调用和数据库系统,对R/3的性能是非常重要的。例如在我们的测试程序中,SPFLI表上的 SELECT-ENDSELECT 循环被映射成为一连串Oracle环境下的 PREPARE-OPEN-FETCH 的物理调用。 追踪列表中的SQL语句的WHERE条件与ABAP语句中的 WHERE 是不同的。因为在 R/3 系统中,客户是一个具有自己的主记录(master records)和自己的一组数据表的独立单元。使用ABAP,每一个 Open SQL 的命令都会自动在相应的客户环境中运行。因此,如果被查找的表有客户(client)字段的话,每一个WHERE语句都会自动添加一个条件包含实际的客户代码。 要查看一个语句的执行计划(execution plan),只需要将光标放在 PREPARE 语句上,然后选择 Explain SQL。具体的执行计划的解释取决于使用的数据库。 返回文章目录
order by 命令是在数据库服务器上执行的,而 sort 语句是在应用服务器上执行的。因此,与其在select语句中使用order by命令,不如将数据先读取到内表中然后使用sort命令来将结果排序,因为应用服务器上的执行速度要比数据库服务器快。 返回文章目录
当多个 SAP 表在逻辑上关联的时候,总是建议使用右关联 inner join 来从中读取数据。这会降低网络的负载。 以两个表为例:zairln 和 zflight。表 zairln 有字段 airln 存储了航空公司的代码,和字段 lnnam 存储了航空公司的名称。表 zflight 有航空公司代码字段 airln, 以及其他字段存储了航空公司运行的航班的详细信息。 既然两个表在逻辑上通过 airln 字段可以关联,建议使用以下 inner join: Select a~airln a~lnnam b~fligh b~cntry into table int_airdet From zairln as a inner join zflight as b on a~airln = b~airln. 这样就可以根据选择条件来限制数据,以上inner join还可以增加 where 条件来进一步限制选择条件。 返回文章目录