您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何進行ABAP OPEN SQL中OPEN CURSOR和SELECT的比較,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
我寫了一個很簡單的report 驗證:
Source code:
OPEN CURSOR lv_cursor FOR SELECT product_guid FROM comm_product. FETCH NEXT CURSOR lv_cursor INTO TABLE lt_selection PACKAGE SIZE size.
Size = 1: 此時從ST05里觀察到表COMM_PRODUCT里總共被掃描的記錄數量是1447.
第二次以size = 100執行,PREPARE和OPEN直接變成REOPEN,但是recs仍然是1447.
對ST05里的字段Recs按F1,查看說明:
這個1447是怎么來的呢?因為我OPEN CURSOR時候沒有指定任何條件,所以在OPEN CURSOR時,DB把整個product表的所有記錄視為一個結果集,然后只返回指定package size的條數。
所以ST05里面看到的這個Recs是指滿足OPEN CURSOR 指定條件的記錄的個數,并不是最后返回給ABAP層的記錄的個數。
而在我的測試系統里,表COMM_PRODUCT總共就包含1447條記錄。
然后我再生成3個新的product,COMM_PRODUCT里面就有1450條entry。
重復執行測試report。ST05發現被掃描的記錄數變成了1450,證明我們的結論是正確的。
再做一個驗證:表COMM_PRODUCT里面有prefix為JERRY06152012開頭的3條記錄:
修改上述的測試report,添加一個WHERE查詢條件:
OPEN CURSOR lv_cursor FOR SELECT product_guid FROM comm_product WHERE product_id LIKE 'JERRY06152012%'.
第一次執行size = 1
Recs變成3了,因為匹配OPEN CURSOR條件的確實只有3條記錄
Size = 100, ST05結果和size = 1完全一致,都是3.
WebClient UI上的Maximum Number of Results(簡稱Max hit)不能控制每次OPEN CURSOR去DB查找記錄的條數,這個條數是由OPEN CURSOR后面跟的WHERE CONDITION決定的。Max hit只能控制OPEN CURSOR的WHERE CONDITION 所決定出的結果集里,到底有多少條返回給ABAP。
Through the verification above, this understanding is wrong.
OPEN SQL的select還有一個功能是UP TO XX ROWS.
用下面的代碼測試:
SELECT product_guid INTO CORRESPONDING FIELDS OF TABLE lt_line FROM comm_product UP TO num ROWS.
Num = 1
Num = 143
說明SELECT UP TO XX ROWS是可以控制數據庫表里到底有多少條記錄被處理的。
但SELECT UP TO XX ROWS不能像OPEN CURSOR那樣能夠在WHILE循環里面反復執行,它不具備像OPEN CURSOR那樣的機制,使得其能夠記住當前正在操作的記錄在結果集里的位置。
上述內容就是如何進行ABAP OPEN SQL中OPEN CURSOR和SELECT的比較,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。