筆者這四套開(kāi)發(fā)教程,寫(xiě)作進(jìn)度全部過(guò)半了: 目前筆者正在開(kāi)啟一套新的開(kāi)發(fā)教程的寫(xiě)作: ABAP CDS View 開(kāi)發(fā)教程:從入門到精通 有學(xué)習(xí)者在文章評(píng)論區(qū)提問(wèn):
![]() 筆者在教程文章里已經(jīng)詳細(xì)解答了這個(gè)問(wèn)題。在這篇微信公眾號(hào)文章里再簡(jiǎn)單解釋一下。 @AbapCatalog.sqlViewName 用于指定當(dāng) CDS View 第一次激活時(shí),在底層數(shù)據(jù)庫(kù)層生成 SQL View 所對(duì)應(yīng)的物理視圖名稱。 也就是說(shuō),在 SAP 系統(tǒng)中,CDS View 編寫(xiě)好并激活后,系統(tǒng)會(huì)根據(jù) CDS 源碼,自動(dòng)生成一個(gè)對(duì)應(yīng)的數(shù)據(jù)庫(kù)視圖,類型為 DDL SQL View,能夠在 SE11 里查看。 這個(gè)數(shù)據(jù)庫(kù)視圖不是臨時(shí)的,而是注冊(cè)在數(shù)據(jù)庫(kù)層面上,因此可以被其他工具或 SQL 語(yǔ)句訪問(wèn)。 以上圖為例,我們創(chuàng)建的 CDS View 名稱為 ZCDS_STUDY_STEP1, 對(duì)應(yīng)的 SQL 視圖指定為 ZCS1. 使用 ABAP OPEN SQL 讀取 CDS View 數(shù)據(jù),SQL 語(yǔ)句里 SELECT FROM,指定的是 CDS View 名稱:
然而 ST05 跟蹤發(fā)現(xiàn),這行 SQL 語(yǔ)句展開(kāi)執(zhí)行時(shí),底層數(shù)據(jù)庫(kù)使用的仍然是 SQL View 的名稱 ZCS1: ![]() 并且 SELECT * 自動(dòng)被展開(kāi),星號(hào)被替換成該 CDS View 聲明了的全部字段。同時(shí)自動(dòng)添加一個(gè)根據(jù)當(dāng)前 Client ID 作為值的過(guò)濾條件(Filter Condition). ![]() 我們點(diǎn)擊上圖的 Execution Trace,還可以將 Trace 文件以 .plv 格式下載到本地,然后導(dǎo)入到 HANA Studio 的 SQL Analyzer 里進(jìn)行詳細(xì)分析: ![]() ![]() 當(dāng)然,在數(shù)據(jù)庫(kù)執(zhí)行層,CDS View 到 DDL SQL View 的映射,對(duì)于 ABAP 應(yīng)用開(kāi)發(fā)層來(lái)說(shuō)是透明的。 因此,我們使用事務(wù)碼 SAT 對(duì)使用了 OPEN SQL 讀取 CDS View 的 ABAP 報(bào)表,進(jìn)行性能跟蹤時(shí),發(fā)現(xiàn)跟蹤到的數(shù)據(jù)庫(kù)讀取操作,使用的仍然是 CDS View 名稱。 使用 SAT 跟蹤監(jiān)控從瀏覽器打開(kāi)的 SAP 應(yīng)用的性能和調(diào)用棧 更進(jìn)一步的說(shuō),SELECT 操作被轉(zhuǎn)換成 OPEN CURSOR,F(xiàn)ETCH 和 CLOSE CURSOR 三個(gè)子操作。 ![]() 在 ABAP 語(yǔ)言 中,OPEN SQL 語(yǔ)句提供了統(tǒng)一的數(shù)據(jù)庫(kù)訪問(wèn)接口,而具體如何執(zhí)行查詢、如何分批次地獲取數(shù)據(jù),以及如何最終釋放資源,則是由 ABAP 運(yùn)行時(shí)和數(shù)據(jù)庫(kù)連接層共同決定的。SELECT * FROM XXX 語(yǔ)句在實(shí)際執(zhí)行時(shí),被拆解成下面三個(gè)子步驟:
當(dāng)然 ABAP 開(kāi)發(fā)人員也可以在自己的應(yīng)用程序里,手動(dòng)使用 OPEN CURSOR 和 FETCH NEXT CURSOR,對(duì)從數(shù)據(jù)庫(kù)層待讀取的超大規(guī)模數(shù)據(jù),分塊讀取到 ABAP 應(yīng)用層,以避免一次性將海量數(shù)據(jù)讀取到應(yīng)用層可能出現(xiàn)的「ABAP 工作進(jìn)程內(nèi)存耗盡」的運(yùn)行時(shí)錯(cuò)誤。 筆者之前的 ABAP 開(kāi)發(fā)教程的第 79 篇和第 80 篇,已經(jīng)對(duì)如何使用 OPEN CURSOR 和 FETCH 關(guān)鍵字,對(duì)數(shù)據(jù)庫(kù)表進(jìn)行分塊讀寫(xiě)做了詳細(xì)的講解,給出了完整的源代碼,掃碼學(xué)習(xí):
|
|