ABAP DESCRIBE語句


DESCRIBE

可參考反射RTTS

DESCRIBE FIELD

DESCRIBE FIELD dobj
  [
TYPE typ [COMPONENTS com]]
  [
LENGTH ilen IN {BYTE|CHARACTER} MODE]
  [
DECIMALS dec]
  [
OUTPUT-LENGTH olen]
  [
HELP-ID hlp]
  [
EDIT MASK
 mask].

TYPE typ

以下是不同類型的dobj返回的類型ID列表,ID大小寫敏感:

 

Numeric Data Type

ID

b

b

s

s

i

I

p

P

decfloat16

a

decfloat34

e

f

F

 

Character-Like Data Type

ID

c

C

string

g

n

N

d

D

t

T

 

Byte-Like Data Type

ID

x

X

xstring

y

 

Reference Type

ID

Data reference

l

Object reference

r

 

Complex Type

ID

Flat structure

u

Deep structure

v

Internal table

h

 

COMPONENTS選項是對結構的字段數進行統計,如果有內嵌的結構,則只算直接(最高級別的)內嵌的結構,且只算做1個。

 

DATA: BEGIN OF struc1,
        comp1
TYPE c LENGTH 1,
        comp2
TYPE string,
       
BEGIN OF struc2,
          comp1
TYPE c LENGTH 1,
          comp2
TYPE i,
       
END OF struc2,
     
END OF struc1,
      typ1 
TYPE c LENGTH 1,
      comp1
TYPE i,
      typ2 
TYPE c LENGTH 1,
      comp2
TYPE i.

DESCRIBE FIELD: struc1        TYPE typ1 COMPONENTS comp1,
                struc1
-struc2 TYPE typ2 COMPONENTS comp2.
WRITE:/ typ1,comp1,/ typ2,comp2.

DESCRIBE FIELD: struc1        TYPE typ1,
                struc1
-struc2 TYPE typ2.
WRITE:/ typ1,/ typ2.

v          3

u          2

v        

u        

LENGTH ilen

當使用IN CHARACTER MODE選項時,dobj必須是flat and character-like,針對deep data typesdobj,你只能使用IN BYTE MODE,並且此情況下返回的長度為引用所占長度(在SAP系統中每個reference的長度固定為8 bytes

 

對於固定長度類型的dobj,是在創建這個變量時就已決定。如果字符串類型,則不會計算尾部空格,此時可以使用預置函數strlen來測定

DATA: text  TYPE c LENGTH 1,
      blen 
TYPE i,
      clen 
TYPE i,
      bytes
TYPE i.

DESCRIBE FIELD text LENGTH blen IN BYTE MODE.
DESCRIBE FIELD text LENGTH clen IN CHARACTER MODE.
bytes
= blen / clen.
WRITE:/ blen,clen,bytes.

2           1           2

DECIMALS dec

dobj的小數位

 

DATA: TYPE p LENGTH 8 DECIMALS 4,
     
i  TYPE i.
DESCRIBE FIELD p DECIMALS i.
WRITE:/ i.

         4

OUTPUT-LENGTH olen

測試dobj屏幕輸出寬度,對於那些固定長度數據類型,輸出寬度都是已經預置好的,對於strings,則為0

 

Numeric Data Types

Data Type

Output length

b

3

s

5

i

11

p

2 x length of dobj (+ 1, if there is a decimal separator)

decfloat16

24

decfloat34

46

f

24

注:上面表中的s類型顯示寬度只有5位,不中以顯示符號;i顯示寬度為11,可以顯示符號

 

Character-like data types

Data Type

Output Length

c

Length of dobj, maximum 255

string

text field literals

根據屏幕列表設置的最大寬度來決定。如果字符不滿List設置的寬度時,left-justified輸出時會在右邊補空格,right-justified輸出時會在左邊補空格,centered outputs輸出時兩端補空格

n

Length of dobj, maximum 255

d

8

t

6

 

Byte-Like Data Types

Data Type

Output Length

x

2 x length of dobj, maximum 255

xstring

2 x number of bytes contained

 

DATA: date1 TYPE d,
      date2
TYPE sy-datum,
      olen1
TYPE i,
      olen2
TYPE i.

DESCRIBE FIELD date1 OUTPUT-LENGTH olen1.
DESCRIBE FIELD date2 OUTPUT-LENGTH olen2.

WRITE: / date1,date2,/ olen1,olen2.

00000000 00.00.0000

         8          10

HELP-ID hlp

DATA: carrid TYPE spfli-carrid,
      hlp   
TYPE string,
      struc 
TYPE dfies-tabname,
      comp  
TYPE dfies-fieldname.
DESCRIBE FIELD carrid HELP-ID hlp.
SPLIT hlp AT '-' INTO struc comp.
WRITE:/ hlp, / struc,/ comp.
CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
 
EXPORTING
    tabname  
=
struc
    fieldname
= comp
.

image010

EDIT MASK mask

If a conversion routine is assigned to the data object dobj by referring to a domain in ABAP Dictionary, two equals signs "==" precede the name of the conversion routine and the result is assigned to the data object mask.

DATA: time    TYPE s_fltime,
      seconds
TYPE i,
      msk    
TYPE string.

DESCRIBE FIELD time EDIT MASK msk.
WRITE msk.
seconds
= 333.
WRITE / seconds USING EDIT MASK msk.

==SDURA

  5:33

image011

DESCRIBE TABLE

DESCRIBE TABLE itab [KIND knd] [LINES lin] [OCCURS n].

 

不同的選項使你能夠判斷表類型、行數、初始化大小。另外,系統字段sy-tfill  sy-tleng 保存着表行數量和以字節計的表行長度。注:為了更詳細的關於內表的信息,應用RTTS的方法代替語句describe table。沒有指定一個附加項,語句describe table 只設置系統字段sy-tfill sy-tleng的值。

 

a)         KIND knd

標識為T 時代表標准表,為S時代表排序表,為H時代表哈希表。這些值在類型組SYDES中已被定義成常量sydes_kind-standed sydes_kind-sortedsydes_kind-hashed

 

b)         LINES lin  內表表行數量

注:在版本6.10中,內表表行的當前數量也可以用內建函數lines來判斷

 

c)         OCCURS n

在內表用選項initial size 或者老式的選項ocurs創建期間決定內表所需要的初始化內存大小

FORM sort_descending CHANGING itab TYPE ANY TABLE.
 
DATA tabkind TYPE c LENGTH 1.
 
DESCRIBE TABLE itab KIND tabkind.
 
IF tabkind = sydes_kind-standard OR
     tabkind
= sydes_kind-hashed.
   
SORT itab DESCENDING.
 
ELSEIF tabkind = sydes_kind-sorted.
   
MESSAGE '...' TYPE 'E'.
 
ELSE.
   
MESSAGE '...' TYPE 'E'.
 
ENDIF.
ENDFORM.

DESCRIBE DISTANCE

DESCRIBE DISTANCE BETWEEN dobj1 AND dobj2 INTO dst
                         
IN {BYTE|CHARACTER} MODE
.

dobj1 and dobj2兩個變量地址起始位置的距離

 

DATA: BEGIN OF struc,
        comp1
TYPE i,
        comp2
TYPE x LENGTH 1,
        comp3
TYPE c LENGTH 4 VALUE 'Hey',
        comp4
TYPE c LENGTH 4 VALUE 'you!',
        comp5
TYPE x,
     
END OF struc.
DATA: off TYPE i,
      len
TYPE i,
      len2
TYPE i.

FIELD-SYMBOLS: <hex>    TYPE x,
               <result>
TYPE c.

DESCRIBE DISTANCE BETWEEN:
         struc      
AND struc-comp3 INTO off IN BYTE MODE,
         struc
-comp3 AND struc-comp5 INTO len IN BYTE MODE,
         struc      
AND struc-comp1 INTO len2 IN BYTE MODE.

ASSIGN: struc TO <hex> CASTING,
        <hex>+off
(len) TO <result> CASTING.

WRITE: / 'Offset off is', off,
       /
'Length len is', len,
       /
'<result> points to', <result>,
       / len2
.

Offset off is          6

Length len is         16

<result> points toHey you!

         0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM