關於使用READ TABLE語句的幾點注意事項

2021-06-17 16:09:09 字數 1293 閱讀 3115

關於使用read table語句的幾點注意事項

1. 如果使用read table語句來讀取內部表資料,而不是簡單看返回值判斷是否存在,那麼在使用read table語句之前,一定要記得使用clear語句清空內部表的工作區。

2. read table itab with key = v binary search.

使用read table語句的二分法搜尋以 代替標準順 序搜尋時, 必須首先按關鍵字中指定的次序對內表進行排序。如果系統找到匹配指定關鍵字的多行,則讀取索引最低的行。二分法搜尋 比線性搜尋要快。因此,應盡可能將內錶排序並且使用二分法搜尋。如果找到有匹配關鍵字的條目,則將系統字段 sy-subrc 設定為0並且 sy-tabix 包含該行的索引。否則,將 sy-subrc 設定為非零。

3. with key 中的檢索條件比較符不能使用『<>』(不等於)。

如果只想取得內部表中不等於某條件的一條記錄,那麼請使用下面變通方法。

loop at itab where key <> 『xx』.

此處取得第一條記錄。

exit.

endloop.

如果在執行時 值為空,則 統忽略該關鍵字段。另外可對關鍵字段指定偏移量和長度。

btw:

感謝binary search,有一次到日本做專案,有這麼個課題,

內部表中的資料如下 a

b    c

01 001  20060301

01 001 20060201

01 001  20060101

要求取出距現在時間最近的記錄。

我的做法是先排序

sort it_tab by a

b ascending

c descending.

然後用二分法讀取

read it_tab into wa_tab with key a = '01'

b = '001'

binary search.

應該取到01 001 20060301這條記錄。(也確實取得是這條記錄)

這時來之日本sap公司的檢證人員就挑毛病了,說你用二分法從中間切入,怎麼能保證取到20060301這條,而不是20060201?

se接到質問讓我抓圖證明用二分法沒錯,否則改用普通read。

我聽了馬上告訴se,abap語法就是這樣的,這是「常識」!

系統如果找到匹配指定關鍵字的多行,則讀取索引最低的行。

經過我的特殊排序後,20060301所在行索引最低。

過後他調查了一下,一點脾氣都沒有,乖乖地說ok,呵呵。

關於使用READ TABLE語句

read tabe 是用來遍歷內錶,取第一條符合條件的記錄。read table into with key binary search add 20200427 with key 中的檢索條件比較符不能使用 不等於 如果只想取得內部表中不等於某條件的一條記錄,那麼請使用下面變通方法。loop at...

關於使用READ TABLE語句的幾點注意事項

1 如果使用read table語句來讀取內部表資料,而不是簡單看返回值判斷是否存在,那麼在使用read table語句之前,一定要記得使用clear語句清空內部表的工作區。2 read table itab with key v binary search.使用read table語句的二分法搜尋...

關於goto語句的使用

在專案中用到了大量的goto語句,遭到了領導的指責,感覺挺委屈的。作為乙個程式設計師,在很多地方都看到說要避免goto語句的使用。goto語句如洪水猛獸,其實都誤解了goto。濫用goto的確很恐怖,可是合理使用卻能夠對程式的結構效能有很大幫助。以下簡單說一下專案中用到goto的3類地方。1,多重迴...