前言部分
大家可以關注我的公眾號,公眾號里的排版更好,閱讀更舒適。
正文部分
從7.40開始,SP08可以使用在INTO之后用7.40,SP02引入的聲明運算符DATA(...)來放置內聯聲明。
下面舉例說明比較清晰:
DATA id TYPE scarr-carrid. cl_demo_input=>request( CHANGING field = id ). SELECT SINGLE carrname AS name, carrid AS id FROM scarr WHERE carrid = @id INTO @DATA(result). cl_demo_output=>display( result ).
看到語法不同了嗎,如果沒看到,請回到你現有的系統中對比
上面語法是INTO DATA里面的寫法,下面說一下INTO TABLE里的寫法
舉例說明:
SELECT carrname AS name, carrid AS id FROM scarr INTO TABLE @DATA(result). cl_demo_output=>display( result ).
看到語法不同了嗎
根據SELECT列表中定義的結果集,聲明基本數據對象,結構或內部表。 有關類型構造的詳細信息,請參閱官方文檔。
將7.40,SP05引入SELECT列表中的SQL表達式使用7.40,SP08進行了增強,如下所示:
1、可以在GROUP BY之后使用SQL表達式
2、可以與聚合一起使用SQL表達式
3、可以使用SQL表達式作為聚合的參數
4、可以使用除簡單CASE之外的已搜索CASE表達式
對上述的描述,下面舉例說明更清楚一點
SELECT num1, num2, CASE WHEN col1 < 50 AND col2 < 50 THEN @both_l WHEN col1 >= 50 AND col2 >= 50 THEN @both_gt ELSE @others END AS group FROM demo_expressions ORDER BY group INTO TABLE @DATA(results).
在SELECT列表中,可以使用語法data_source〜*從7.40,SP08開始指定數據源的所有列。 這在使用連接時很方便。
舉例說明:
SELECT scarr~carrname, spfli~*, scarr~url FROM scarr INNER JOIN spfli ON scarr~carrid = spfli~carrid INTO TABLE @DATA(result).
1、從7.40,SP08開始,INTO子句可以和應該(haha)在SELECT語句的其他子句之后使用。 那些不被視為子句的添加UP TO n ROWS,BYPASSING BUFFER和CONNECTION必須放在INTO子句之后。
2、此更改背后的原理是,INTO子句不是標准SQL的一部分,而是定義SQL和ABAP之間的數據接口。 為了實現Open SQL的SQL部分中的未來增強, UNION,必須從SQL部分中刪除INTO子句。
一些限制已刪除。 例如。 從7.40開始,SP08可以在SELECT列表中的算術表達式的運算符前面放一個減號,可以對聚合執行一個簡單的CASE,在ON之后可以在連接條件中使用LIKE和IN(...) 您可以動態地在WHERE之后指定子查詢。
但是,如果您使用此處列出的任何新功能(如SP05已有的),則將以嚴格模式執行Open SQL的語法檢查,其中應用更嚴格的語法規則。 例如。 您必須在主機變量前使用逗號分隔的列表和轉義符號@。 通過這種方式,至少在Open SQL ABAP中以向下兼容的方式實施一個依賴於發布的deprecation概念。