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.
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的ABAP 动态 SQL的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PL/SQL Developer使用技巧
- 下一篇: plSQL复制数据的方法