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