SAP ABAP二分查找(binary search)实际问题的深度分析
在維護公司SAP的過程中,遇到一個問題,困擾了很久!
簡單描述一下問題:(為了不牽扯公司業務,這是抽取問題)將主要的三個字段
存在一個內表TAB2,如圖所示:
需要強調一下,真是的內表比TAB2要多很多字段,(這是重點)
?
首先對系統中真實的內表進行了排序,其中主要的三個字段的排序如TAB2所示,
(如果是內表TAB2,對COLUMN1排序的話,默認的COLUMN3也會自動安裝升序排列):
SORT??TAB2? BY COLUMN1?.
得到下圖:
?
使用二分查找:
READ?TABLE?TAB2?WITH?KEY?COLUMN1?=?'0800113864'?COLUMN2?=?'2012'?COLUMN3?=?'3018054318'?BINARY?SEARCH.
返回?SY-SUBRC?=?8.
即查詢沒有相關數據!
?
這就是問題的情況所在!!
?
我發現問題的過程可以理解為如下步驟:
1. 首先定位到5條記錄的中間那條記錄,即第3條記錄,然后對比COLUMN3。
2. 第3條記錄的COLUMN3數據如果不等于?'3018054318'?,則從第3條至第5條記錄的中間那條記錄,即第4條記錄,然后對比COLUMN3。
3. 第4條記錄的COLUMN3數據如果不等于?'3018054318'?,則比較第5條記錄然后對比COLUMN3。
4. 由于都沒有等于?'3018054318'?的記錄,則返回SY-SUBRC?=?8。
?
解決此問題的關鍵:
在于對內表的排序,如果在
READ?TABLE?TAB2?WITH?KEY?COLUMN1?=?'0800113864'?COLUMN2?=?'2012'?COLUMN3?=?'3018054318'?BINARY?SEARCH.
時候,使用到COLUMN1?=?'0800113864'?COLUMN2?=?'2012'?COLUMN3?=?'3018054318'?,則對此系統中內表排序的時候需要依照此三個字段進行排序。
?
--------------------------------------------
解決疑惑,一點點開心。希望對讀者有幫助。
總結
以上是生活随笔為你收集整理的SAP ABAP二分查找(binary search)实际问题的深度分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: web dynpro配置注意事项
- 下一篇: 内表使用Binary Search的限制