ABAP 動態 SQL
ABAP的sql語句是可以動態生成的,這個特性可以帶給我們很多的便利。 比如SAP對費用的儲存結構可能會採用 將會計月作為欄位的情況,及 period001,period002。。。等這樣方式來儲存值。 通常取這樣的值都是採用 Case when的方式或 If--else 等語句選擇不同的執行語句獲取不同列的值。 這樣的處理方式無形中增加了程式碼的行數,而實際上除了數值列不一樣之外,其他列都是一樣的,如果這時候採用 動態SQL ,就可以大大簡化程式碼。
格式:
SELECT (column_syntax) FROM (dbtab_syntax)
其中:
column_syntax can be a character-type data object or an internal table with a character-type data type(可以是字串,也可以一個字元型別欄位的內表)
dbtab_syntax can be a character-type data object or an internal table with a character-type data object(可以是字串,也可以一個字元型別欄位的內表)
使用前處理方式:
If Period = ‘001’.
select obj wk001 from tableName
into .......
where con.
.......
Endselect.
ElseIf Period = '002'.
select obj wk002 from tableName
into ......
where con.
.......
Endselect.
ElseIf .....
Endif.
使用動態處理:
data_key = 'wk'.
concatenate data_key period into data_key separated by space.
concatenate ' obj ' data_key into column_syntax separated by space
select (column_syntax) From tableName
into ....
where con.
.........
Endselect.
應該說程式碼是有明顯簡化的。
有人會有效能方面的猶豫,我做過測試,不影響,甚至還快一些。
搜尋了一下網路,發現更多的資料:
ABAP動態查詢的實現:可以完全實現動態查詢,每個欄位都可以動態。
(1) 利用巨集
(2) 利用abap指標
(3) 利用FIELD-SYMBOL
具體實現:
1.結構的動態查詢
DEFINE Select_DATA_TO_WA.
Select &1
FROM &2
INTO CORRESPONDING FIELDS OF &3
Where (&4).
EXIT.
ENDSelect.
END-OF-DEFINITION.
2.變數的動態查詢
DEFINE Select_DATA_TO_VARIANT.
Select &1
FROM &2
INTO &3
Where (&4).
EXIT.
ENDSelect.
END-OF-DEFINITION.
3.內表的動態查詢
DEFINE Select_DATA_TO_VARIANT.
Select &1
FROM &2
INTO CORRESPONDING FIELDS OF TABLE &3
Where (&4).
EXIT.
ENDSelect.
END-OF-DEFINITION.
具體程式實現:
DATA: L_FIELD(100) TYPE C,
L_TABLE(10) TYPE C,
L_COND(100) TYPE C.
DATA: I_COND TYPE TALBE OF L_COND.
FIELD-SYMBOLS TYPE ANY.
START-OF-Selection.
CONCATENATE ‘CARRID’ ‘CONNID’ ‘CITYFROM’
INTO L_S SEPARATE BY SPACE.
CONCATENATE ‘CONNID = ‘ ‘’ ‘0123’ ‘’’’ INTO L_COND.
APPEND COND TO I_COND.
L_TABLE = ‘SPFLI’.
IF IS ASSIGNED.
UNASSIGN .
ASSIGN SPFLI TO .
ELSE.
ASSIGN SPFLI TO .
ENDIF.
Select_DATA_TO_WA (L_S) (L_TABLE) I_COND.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/554557/viewspace-504368/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ABAP動態內表
- ABAP 動態where語句
- MyBatis 動態 SQLMyBatisSQL
- MybBatis動態SQLBATSQL
- Mybatics動態sqlBATSQL
- mybatis動態SQLMyBatisSQL
- MyBatis(七) 動態SQLMyBatisSQL
- 1 Mybatis動態SQLMyBatisSQL
- Mybatis--動態SQLMyBatisSQL
- SAP ABAP和Java的動態代理實現Java
- 如何用程式碼動態生成ABAP型別型別
- mybatis動態sql總結MyBatisSQL
- Mybatis-06 動態SqlMyBatisSQL
- MyBatis框架之SQL對映和動態SQLMyBatis框架SQL
- MyBatis對動態SQL的支援MyBatisSQL
- mybatis動態sql與分頁MyBatisSQL
- Java-Mybatis動態SQL整理JavaMyBatisSQL
- Gbase 8s 動態 SQLSQL
- Mybatis介紹之 動態SQLMyBatisSQL
- 淺談Java和SAP ABAP的靜態代理和動態代理,以及ABAP面向切面程式設計的嘗試Java程式設計
- 如何找到ABAP裡被動態呼叫的update function moduleFunction
- SAP ABAP 動態內表實現 ALV橫向按月份動態顯示資料
- APEX 通過PL/SQL動態展示區域中動態內容SQL
- 【SQL】Oracle避免動態SQL,提高過程執行效率SQLOracle
- 動態SQL-條件分頁SQL
- 動態 SQL 和快取機制SQL快取
- Mybatis 動態執行SQL語句MyBatisSQL
- day06-動態SQL語句SQL
- SAP ABAP SQL的execution plan和cacheSQL
- 介面的繫結方案和動態SQLSQL
- hive Sql的動態分割槽問題HiveSQL
- Myabtis動態SQL,你真的會了嗎?SQL
- 【MyBatis學習總結 (五),動態SQL】MyBatisSQL
- PHP--動態生成sql查詢表格PHPSQL
- Mybatis where 1=1 動態sql問題MyBatisSQL
- ABAP 740新的OPEN SQL增強特性SQL
- MyBatis 動態 SQL 最全教程,這樣寫 SQL 太優雅了!MyBatisSQL
- SQL 如何實現動態的行列轉置SQL
- GaussDB資料庫SQL系列-動態語句資料庫SQL