天天看點

ABAP 7.40, SP08 中的 Open SQL 新特性

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

參考連結:ABAP News for 7.40, SP08 – Open SQL

       ABAP 7.50 新特性

       ABAP 7.52 中的Open SQL新特性

       ABAP 7.53 中的ABAP SQL(原Open SQL)新特性

繼續閱讀