日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

SAP CDS View 開(kāi)發(fā)時(shí),需要指定 SQL View 的原因到底是什么?

 汪子熙 2025-04-07 發(fā)布于上海

筆者這四套開(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):

既然我們?cè)?CDS View 源代碼里,已經(jīng)使用 define view 定義了視圖的名稱,為什么仍然需要使用注解 @AbapCatalog.sqlViewName 定義一個(gè)對(duì)應(yīng)的 ABAP SQL 視圖?這不是多此一舉嗎?

筆者在教程文章里已經(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 名稱:

DATA: lt_table TYPE TABLE OF zcds_study_step1.SELECT * INTO TABLE @lt_table FROM zcds_study_step1.

然而 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è)子步驟:

  • OPEN CURSOR:告知數(shù)據(jù)庫(kù)打開(kāi)一個(gè)游標(biāo),并設(shè)置好查詢語(yǔ)句及其條件,數(shù)據(jù)庫(kù)知道要從哪個(gè)表中獲取數(shù)據(jù),也知道需要哪些字段和過(guò)濾條件。

  • FETCH:在游標(biāo)打開(kāi)后,通過(guò) FETCH 操作將數(shù)據(jù)分批讀入,減少一次性讀取過(guò)多行造成的資源浪費(fèi)。ABAP 運(yùn)行時(shí)環(huán)境會(huì)根據(jù)程序請(qǐng)求的大小,每次獲取相應(yīng)數(shù)量的記錄,然后將結(jié)果放入內(nèi)存結(jié)構(gòu)(例如內(nèi)表)中。

  • CLOSE CURSOR:在程序使用完所有需要的數(shù)據(jù)之后,系統(tǒng)會(huì)自動(dòng)或顯式地關(guān)閉游標(biāo),釋放數(shù)據(jù)庫(kù)的連接資源,避免長(zhǎng)時(shí)間占用造成阻塞或鎖定。

當(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í):

  • 79. 使用 OPEN CURSOR 和 FETCH NEXT CURSOR 對(duì) SAP 數(shù)據(jù)庫(kù)表進(jìn)行分塊讀寫(xiě)

  • 80. 使用事務(wù)碼 SAT 比較傳統(tǒng)的 SELECT SQL 語(yǔ)句和 OPEN / FETCH CURSOR 分塊讀取 ABAP 數(shù)據(jù)庫(kù)表兩種方式的性能差異

更多閱讀

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章