您的位置:首页 > 其它

确定数据对象属性类型长度小数位{转载}

2009-10-21 14:26 330 查看
如果要查明数据对象的数据类型, 或者要在程序的运行期间使用其属性,请使用 DESCRIBE 语句。语法如下:
语法
DESCRIBE FIELD [LENGTH ] [TYPE [COMPONENTS ]]
[OUTPUT-LENGTH ] [DECIMALS ]
[EDIT MASK ].
将由语句的参数指定的数据对象的属性写入参数后的变量。
DESCRIBE FIELDS 语句具有下列参数:
参数用途
LENGTH 确定字段长度

TYPE确定数据类型

OUTPUT-LENGTH确定输出长度

DECIMALS确定小数位

EDIT MASK确定转换例程

确定字段长度

要确定数据对象的长度,请利用 DESCRIBE FIELD 语句使用 LENGTH 参数,如下所示:
语法
DESCRIBE FIELD LENGTH .
系统读取字段的长度,并将值写入字段 。
DATA: TEXT(8), LEN TYPE I.
DESCRIBE FIELD TEXT LENGTH LEN.
该示例中,字段 LEN 包含的值为 8。

确定数据类型

要确定字段的数据类型,请利用 DESCRIBE FIELD 语句使用 TYPE 参数,如下所示:
语法
DESCRIBE FIELD TYPE [COMPONENTS ].
系统读取字 段 的数据类型 ,然后将值 写入字段 。
除返回预定 义数据类型 C、D、F、 I、N、P、 T 和 X 外(参见 基本数据类型 - 预定义的 中的表), 该语句还返 回
s 对于带前导 符号的两字 节整型
b 对于无前导 符号的一字 节整型
h 对于内表
C 对于组件中 没有嵌套结 构的结构
C 对于组件中 至少有一个 嵌套结构的 结构
类型 s 和 b 可以来自于 对 ABAP/4 词典对象的 引用(参见 TABLES 语句),而后三 种类型则源 于用户定义 的类型。
通过选项 COMPONENTS ,语 句返回
u 对于组件中 没有内表的 结构
v 对于组件或 子组件中至 少有一个内 表的结构
并将结构的 直接组件的 个数写入 。
TABLES SPFLI.
DATA: NUMTEXT(8) TYPE N, TYP.
DESCRIBE FIELD NUMTEXT TYPE TYP.
WRITE TYP.
DESCRIBE FIELD SPFLI-FLTIME TYPE TYP.
WRITE TYP.
这产生下列 输出:
N T
示例中,字 段 TYP 包含第一个 值“N”, 然后是值“ T”。
TYPES: SURNAME(20) TYPE C,
STREET(30) TYPE C,
ZIP_CODE(10) TYPE N,
CITY(30) TYPE C,
PHONE(20) TYPE N,
DATE LIKE SY-DATUM.
TYPES: BEGIN OF ADDRESS,
NAME TYPE SURNAME,
CODE TYPE ZIP_CODE,
TOWN TYPE CITY,
STR TYPE STREET,
END OF ADDRESS.
TYPES: BEGIN OF PHONE_LIST,
ADR TYPE ADDRESS,
TEL TYPE PHONE,
END OF PHONE_LIST.
DATA PL TYPE PHONE-LIST.
DATA: TYP, N TYPE I.
DESCRIBE FIELD PL TYPE TYP COMPONENTS N.
WRITE: TYP, N.
该示例与 TYPES 语句 中的最后一 个示例相似 。输出如下 :
u 2
此处,由于 PL 是具有 2 个直接组件 (ADR 和 TEL)而 没有内表的 结构,所以 字段 TYP 包含值‘u’ ,而 N 包含值 2。

确定输出长度

要确定字段的输出长度 ,请利用 DESCRIBE FIELD 语句使用 OUTPUT-LENGTH 参数,如下 所示:
语法
DESCRIBE FIELD OUTPUT-LENGTH .
系统读取字 段 的输出长度 ,并将值写 入字段 。
DATA: FLOAT TYPE F, OUT TYPE I, LEN TYPE I.
DESCRIBE FIELD FLOAT LENGTH LEN OUTPUT-LENGTH OUT.
该示例的结 果是字段 LEN 包含值 8,而字段 OUT 包含值 22。
关于输出长 度的详细信 息,参见 WRITE 语句 。

确定小数位

若要确定类 型 P 字段的小数 位的个数, 请利用 DESCRIBE FIELD 语句使用 DECIMALS 参数,如下 所示:
语法
DESCRIBE FIELD DECIMALS .
系统读取字 段 的小数个数 ,并将值写 入字段 。
DATA: PACK TYPE P DECIMALS 2, DEC.
DESCRIBE FIELD PACK DECIMALS DEC.
该示例的结 果是字段 DEC 包含值 2。

确定转换例程

要确定 ABAP/4 词典中某字段的转换例程是否存在,如果存在,名称是什么,请利用 DESCRIBE FIELD 语句使用 EDIT MASK 参数,如下 所示:
语法
DESCRIBE FIELD EDIT MASK .
如果 ABAP/4 词典中字段 的转换例程 存在,则系 统将其写入 字段 ,然 后将系统字 段 SY-SUBRC 中的返回代 码设为 0。
可以象下面 所显示的那 样,在 WRITE 语句中将字 段 直接用作格 式模板:
WRITE USING EDIT MASK .
关于 WRITE 语句的详细 信息,参见 WRITE 语句 。如果字段 没有转换例 程,则系统 将返回代码 设为 4。
转自: http://swordwoo.spaces.live.com/blog/cns!6C04FE0A736A65C5!141.entry
ABAPDOCU DEMO
REPORT demo_describe_field.
TYPES: surname(20) TYPE c,
street(30) TYPE c,
zip_code(10) TYPE n,
city(30) TYPE c,
phone(20) TYPE n,
date TYPE sy-datum.
TYPES: BEGIN OF address,
name TYPE surname,
code TYPE zip_code,
town TYPE city,
str TYPE street,
END OF address.
TYPES: BEGIN OF phone_list,
adr TYPE address,
tel TYPE phone,
END OF phone_list.
TABLES spfli.
DATA: BEGIN OF test,
col1(3) TYPE c,
col2(2) TYPE c,
col3 TYPE i,
END OF test,
dist TYPE i.
DATA: text(8) TYPE c VALUE 'abcdefgh', len TYPE i,
numtext(10) TYPE n VALUE '0123456789', typ(1) TYPE c,
pl TYPE phone_list,
n TYPE i,
float TYPE f, out TYPE i,
pack TYPE p DECIMALS 2, dec(1) TYPE c.

DESCRIBE FIELD text LENGTH len IN CHARACTER MODE.
WRITE: text, 'has length', len.
DESCRIBE FIELD numtext TYPE typ.
WRITE: / 'Numerical text has type', typ.
DESCRIBE FIELD spfli-fltime TYPE typ.
WRITE: 'and SPFLI-FLTIME has type', typ.
DESCRIBE FIELD float LENGTH len IN BYTE MODE OUTPUT-LENGTH out.
WRITE: / 'Floating point number has length', len,
'and output length', out.
DESCRIBE FIELD pack DECIMALS dec.
WRITE: / pack, 'has', dec, 'Decimals'.
DESCRIBE FIELD pl TYPE typ COMPONENTS n.
WRITE: / 'The complex field PL has type', typ, 'with', n, 'components'.
DESCRIBE DISTANCE BETWEEN test-col3 AND test-col1 INTO dist
IN BYTE MODE.
WRITE: / 'The distance between TEST-COL3 and TEST-COL1 is', dist.

结果:
验证 DESCRIBE FIELD
——————————————————————————————————————————————————————————————
abcdefgh has length 8
Numerical text has type N and SPFLI-FLTIME has type I
Floating point number has length 8 and output length 24
0.00 has 2 Decimals
The complex field PL has type u with 2 components
The distance between TEST-COL3 and TEST-COL1 is 12
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐