1,使用 data_source~*指定列
在7.40, SP08中,可以在SELECT語句中使用data_source~*來指定選取不同的數據庫表、視圖的全部列來作為結果集。它也可以和單獨指定的列col_spec結合(通過聚合表達式)。
當在結果集使用了data_source~*的時候,語法檢查會以嚴格模式運行。
2,SELECT...INTO后的內聯聲明
根據SELECT語句的返回結果集,現在可以使用DATA(...)以及轉義前綴@來內聯聲明數據對象、結構、內表。比如:
SELECT * FROM sflight INTO @DATA(ls_sflight) WHERE connid = 'AA'.
3,SQL表達式
在7.40, SP05中引入的SQL表達式,現在擴充了以下內容:
- 操作符CASE可以用於執行復雜case(searched case)和簡單case
- 可以在GROUP BY后指定SQL表達式
- 可以在SELECT列表中同時指定SQL表達式和聚合表達式
- 可以在SELECT列表或者HAVING子句中指定SQL表達式作為聚合功能(比如avg)參數
如果使用了任一新特性,語法檢查將以嚴格模式運行。
4,用參數讀取CDS視圖
從7.40, SP08開始,CDS視圖可以在定義時帶有使用時分配實參的輸入參數。為了使該特性可用,在SELECT的data source可選項部分要添加一個由括號包含起來的、由逗號分割的列表:
( pname1 = act1, pname1 = act2, ... )
因為不是所有數據庫系統都支持帶有參數的視圖,現有一個新類 CL_ABAP_DBFEATURES 和它的方法 USE_FEATURES,它會探測當前數據庫系統的支持情況。此外,通過參數訪問視圖會觸發語法檢查的警告;該警告可通過pragma隱藏。
5,移除限制
以下先前存在的限制已經移除:
- 函數表達式:
- 從7.40, SP08開始,負號 - 可以直接地放置在一個算術表達式的運算數前,而不需要放在其它算術運算符的后面。
- 從7.40, SP08開始,簡單case中的operand1, operand2也可以是SQL表達式。
- 從7.40, SP08開始,SQL表達式也可以和聚合表達式或者GROUP BY一起指定。
- joins:
- 從7.40, SP08開始,操作符LIKE和IN可以在ON條件中使用。
- 從7.40, SP08開始,單獨的比較可以通過OR連接或者通過NOT否定。
- 從7.40, SP08開始,外聯結不再需要包含至少一個來自左右側表的列的比較。
- 動態WHERE條件:
- 子查詢也可以動態指定了。
如果用到了以上的新規則,那么語法檢查將以嚴格模式運行。
6,INTO子句的位置
從7.40, SP08開始,INTO子句也可以位於SELECT語句的最末位置。在這種情況下,SELECT語句的可選項要指定在INTO的后面。
如果將INTO從句作為最后一個子句,語法檢查將以嚴格模式運行。
7,語法規則的進一步嚴格檢查
從7.40, SP08開始,以下的語法構造將包含錯誤,並產生語法錯誤或運行時錯誤。
- WHERE條件的正確性
聚合表達式之外的在HAVING從句中指定的列必須也在GROUP BY中指定。在7.40, SP08之前,這不會被靜態語法檢查記錄,但是會觸發一個可捕獲的異常。從7.40, SP08開始,這樣產生一個語法檢查警告並且觸發在嚴格模式之外無法處理的異常。
例如:DATA itab TYPE TABLE OF scarr. SELECT * FROM scarr INTO TABLE itab HAVING carrid = 'LH'.
8,語法檢查的“嚴格模式”
如果在Open SQL中使用了本文中列出的任一新特性,語法檢查將以嚴格模式運行。嚴格模式比標准模式有着更嚴格的語句處理。
9,可比較類型
數據庫會執行一個用於比較的可比較類型的表。在各種情況下,數據庫系統會判斷比較的雙方是否可比較,如果不可比較,將產生語法錯誤(在嚴格模式下)或者語法警告。
本文鏈接:http://www.cnblogs.com/hhelibeb/p/6757244.html