abap系列 你不一定知道的open sql用法

2021-10-10 06:28:40 字數 1784 閱讀 9168

作為abaper ,open sql中的select和in 子查詢屬於日常必備的技能。然而,open sql還有一些語法你可能沒用過甚至沒聽過,這些語法用好了可以大大減少**複雜度和提高效能,下面就來看看這些用法吧。

場景1

取建立日期晚於憑證日期的採購憑證,用於統計補單率。

**1

select eneln bedat aedat into

table lt_ekko from ekko where..

.loop at lt_ekko into ls_ekko.

check ls_ekko-bedat >= ls_ekko-aedat. "檢查憑證日期是否大於等於建立日期

write:/ ls_ekko.

endloop.

**2

select eneln bedat aedat into

table lt_ekko from ekko as a

where a~bedat >= a~aedat.

對比兩段**,第一段將所有訂單資料載入到內錶中在做二次對比,

第二段**在資料庫層面就已經將資料篩選完成,無論是**複雜度還是處理時間都是第二段較好.

場景2

取物料憑證中沒有沖銷的憑證.

**1

select mblnr zeile gjahr sjahr smbln smblp into lt_mseg from mseg where..

.loop at lt_mseg into ls_mseg.

if ls_mseg-smbln is

not initial. "如果有被沖銷憑證,則將改憑證標識為已沖銷.

ls_mseg01-is_cancled = abap_true.

modify lt_mseg from ls_mseg01 transporting is_cancled where gjahr = ls_mseg-sjahr mblnr = ls_mseg-smbln zeile = ls_mseg-smblp.

endif.

endloop.

*刪除所有標識為已沖銷或被沖銷憑證不為空的記錄

delete lt_mseg where is_cancled = abap_true or smbln is

not initial.

**2

select mblnr zeile gjahr sjahr smbln smblp into lt_mseg from mseg as a 

where

not exist (

select

*from mseg as b on a~gjahr = b~sjahr and a~mblnr = b~smbln a~zeile = b~smblp )..

.

對比兩段**,第一段將所有憑證載入到內錶進行比較後排除沖銷憑證,第二段則通過exist關鍵字從資料庫層面排除了沖銷憑證.明顯第二段處理邏輯**量和處理邏輯都較為簡單.

第二段**由於子查詢中未用到主鍵和索引,因此從效能來說比第一段要差,但這裡只是展示exist關鍵字的用法,因此對時間不做過多考慮

你不一定知道的UrlPrefix路由規則

接上文,容器內web程式一般會繫結到或http 以確保使用容器ip可以訪問到web應用。正如我們在asp.net core官方映象顯示的,asp.net core程式在容器內80埠監聽請求 web程式啟動後,根據監聽位址urlprefix中的主機元素,會向系統元件http server api註冊不...

逃避不一定躲得過,面對不一定最難過

國王有七個女兒,這七位美麗的公主是國王的驕傲。她 們那一頭烏黑亮麗的長髮遠近皆知。所以國王送給她們每人一百個漂亮的髮夾。有一天 早上,大公主醒來,一如往常地用髮夾整理她的秀髮,卻發現少了乙個髮夾,於是她偷偷地到了二公主的房裡,拿走了乙個髮夾。二公主發現少了乙個髮夾,便到三公主房裡拿走乙個髮夾 三公主...

你不一定知道的幾個很有用的 Git 命令

這裡給大家分享一些很有用的git命令,其中很多用法你可能都不知道,無論你是工作在團隊環境中或在您的個人專案中,這些命令將對你幫助很大,讓你可以更加高效的進行專案開發,更輕鬆愉快的工作和生活。1.匯出最後一次提交修改過的檔案 我一直在使用這個命令定期進行傳送給其他人進行審查 整合。這條命令將把近期提交...