ABAP之SQL操作(select、insert、update、delete、modify)


一、SELECT 語句

SELECT <lines>[DISTINCT]<columns>[AS<alias>]
          INTO|APPEND [CORRESPONDING FIELDS OF]<wa> TABLE<itab>[PACKAGE SIZE<n>]..
          FROM <dbtab>[AS <alias>]<options>  UP TO <n> ROWS...
            [INNER]JOIN <dbtab> [AS <alias>] ON <cond><options>...
          WHERE <s> <opertor> <f> ...
          GROUP BY <f1> <f2>..
          HIVING <condition>.
          ORDER BY PRIMARY KEY.

lines:single

讀取一條數據:.

SELECT SINGLE <cols> ... WHERE

注意:限制好where條件,否則返回任意一條數據,與預期結果不同.

DISTINCT :刪除重復值。

SELECT [DISTINCT]<cols>...WHERE   

當INTO 為字段或者結構體時,結尾必須加上ENDSELECT;如果是內表則不需要。

AS<alias>:別名

SELECT  <cols> [AS <cols>]..

INTO語句:

1. [CORRESPONDING FIELDS OF]<wa>:自動給相同字段名匹配賦值。wa為結構體,變量,查詢一條數據時,常用語loop循環中。

SELECT  ...INTO [CORRESPONDING FIELDS OF]<wa> .

2.內表

查詢多條數據是使用內表,須使用APPENDING,不能使用INTO,INTO是刪除內表數據后插入時使用的。

 SELECT ...INTO|APPEND [CORRESPONDING FIELDS OF]<wa> TABLE<itab>[PACKAGE SIZE<n>]..

PACKAGE SIZE:表示每次追加到內表的條數,此時須使用ENDSELECT.

  SELECT INTO CORRESPONDING FIELDS OF TABLE itab 
    PACKAGE SIZE 5
    FROM SPFLI.
  ENDSELECT.

FROM語句:

1.選擇靜態表:

 SELECT ...FROM <dbtab>[AS <alias>]<options>

2.JOIN語句

SELECT ...FROM <tab>[INNER] JOIN <dbtab> [AS <alias>] ON <cond><options>...

3.限制查詢個數

SELECT ...FROM <tab> UP TO <n> ROWS...

WHERE語句:

1.where條件語句

SELECT ...WHERE <s> <opertor> <f> ...

2.常用語句

  SELECT ...WHERE <s> [NOT]BETWEEN <f1> AND <F2>.
  SELECT ...WHERE COL2 LIKE '_ABC%'.
  SELECT ...WHERE <s> [NOT]IN (<f1>,..,<fn>)...
  SELECT ...WHERE <s> [NOT]IN <seltab>... 查詢存在selection table,Range變量里的數據。

3.FOR ALL ENTRIES 語句.

SELECT ... FOR ALL ENTRIES IN <itab> WHERE <cond>    
SELECT MATNR MTART
  FROM MARA
  INTO CORRESPONDING FIELDS OF TABLE GT_MARA
 WHERE MATNR IN S_MATNR.
  
IF GT_MARA[] IS NOT INITIAL.
  SELECT MATNR MAKTX
    FROM MAKR
    INTO CORRESPONDING FIELDS OF TABLE GT_MAKT
    FOR ALL ENTRIES IN GT_MARA
    WHERE MATNR IN S_MATNR
    AND SPRAS = SY-LANGU
    AND MATNR = GT_MARA-MATNR.
ENDIF.

SORT GT_MAKT BY MATNR.
LOOP AT GT_MARA.
  CLEAR GT_TOTAL.
  MOVE-CORRESPONDING GT_MARA TO GT_TOTAL.
  READ TABLE GT_MAKT WITH KEY MATNR = GT_MARA-MATNR
                              BINARY SEARCH.
  IF SY-SUBRC = 0.
    GT_TOTAL-MAKTX =GT_MAKT-MAKTX.
  ELSE.
    CONTINUE.
  ENDIF.
  APPEND GT_TOTAL.

ENDLOOP. 
View Code

注意:
1.itab的字段要與比較對象的表字段類型一致。
2.判斷內表itab不能為空,否則相當於全表掃描。
3.程序中的continue退出當前循環,執行下一次。本語句執行時,相當於INNER-JOIN;不執行時,相當於LEFT-JOIN.

4.不能與sum、avg、max、min等聚合函數一起使用,group  by。

5.使用該選項后,對於最后得出的結果集系統會自動刪除重復行。因此如果要保留重復行記錄時,記得在SELECT語句中添加足夠字段

 

GROUP :   

SELECT <f1> <f2> <agg>...
    GROUP BY <f1> <f2> ...
    HIVING <condition>.

ORDER BY:

  -根據標的key值進行排序。
  -只適合於SELECT * 語句。
  -在JOIN語句和視圖中無法使用。

SELECT ...
  ORDER BY <f1> [ASCENDING|DESCENDING] 
           <f2> [ASCENDING|DESCENDING] 

二、INSERT 

一條數據    

INSERT INTO <target> VALUES <wa>.
INSERT <target> FROM <wa>.

多條數據.

INSERT <target> FROM TABLE <itab> [ACCEPTING DUPLICATE KEYS]

插入數據時,避免有相同主鍵引起dump error錯誤,使用ACCEPTING DUPLICATE。此時sy-subrc返回4.

三、UPDATE

一條數據    

UPDATE <target> FROM <wa>.  "表結構相同

多條數據.

UPDATE <target> FROM TABLE <itab>. 
UPDATE <target> SET <set1> <set2> WHERE <cond>.

四、DELETE

一條數據    

DELETE <target> FROM <wa>.  "表結構相同

多條數據.

DELETE  FROM <target> WHERE <cond>. 

五、MODIFY.

一條數據    

MODIFY <target> FROM <wa>.  "表結構相同

多條數據.

MODIFY   <target> FROM TABLE <itab>. 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM