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語句
- 動態SQLSQL
- 動態SQL intoSQL
- ABAP 動態程式設計-FIELD-SYMBOLS程式設計Symbol
- ABAP動態程式設計-DESCRIBE FIELD程式設計
- MyBatis 動態 SQLMyBatisSQL
- MybBatis動態SQLBATSQL
- Mybatics動態sqlBATSQL
- Oracle 動態SQLOracleSQL
- mybatis動態SQLMyBatisSQL
- MRP清單的動態和靜態ABAP的取法
- SAP ABAP和Java的動態代理實現Java
- 如何用程式碼動態生成ABAP型別型別
- PLSQL Language Referenc-PL/SQL動態SQL-何時需要動態SQLSQL
- PL/SQL執行動態SQLSQL
- ABAP 通過SQL修改某個程式的鎖定狀態SQL
- 1 Mybatis動態SQLMyBatisSQL
- Mybatis--動態SQLMyBatisSQL
- MyBatis(七) 動態SQLMyBatisSQL
- 避免動態SQL(二)SQL
- 避免動態SQL(一)SQL
- 動態sql 報表SQL
- PLSQL Language Referenc-PL/SQL動態SQL-本地動態SQL(EXECUTE IMMEDIATE語句)SQL
- PL/SQL 動態sql語句例SQL
- pl/sql--動態SQL常用方法SQL
- 淺談Java和SAP ABAP的靜態代理和動態代理,以及ABAP面向切面程式設計的嘗試Java程式設計
- 如何找到ABAP裡被動態呼叫的update function moduleFunction
- 動態sql和利用動態sql解決資料字典的讀取SQL
- mybatis動態sql總結MyBatisSQL
- Mybatis-06 動態SqlMyBatisSQL
- Mybatis 動態 SQL 詳解MyBatisSQL
- SqlServer中的動態SqlSQLServer
- Kettle實現動態SQLSQL
- SQL SERVER 動態查詢SQLServer
- MyBatis4:動態SQLMyBatisSQL
- 動態sql無法recoverSQL
- 用動態SQL語句SQL