ABAP-數據庫操作OPEN SQL SELECT總結


ABAP-數據庫操作OPEN SQL SELECT總結

 

OPEN SQL 是使用ABAP語言操作數據庫的一種語句,由於OPEN SQL操作的數據庫表是已經在ABAP數據字典中創建的,所以使用OPEN SQL操作數據庫不用關心系統使用的數據庫類型。

語句用法

SELECT:

SELECT result
       FROM source
       INTO|APPENDING target
       [[FOR ALL ENTRIES IN itab] WHERE sql_cond]
       [GROUP BY group] [HAVING group_cond]
       [ORDER BY sort_key].
  ...
[ENDSELECT].

1.result :選擇的結果。確定要選出的field。常見用法有 SINGLE , * , DISTINCT XX , FIELD(可多個)等。

2.source : 此處為數據庫表。對應一個數據庫表,ABAP數據字典中有一個structure類型transparent table(透明表)與之對應,這里寫的就是這個transparent table的名字。
SOURCE中包含了很多語法,
... FROM { {dbtab [AS tabalias]}
         | join
         | {(dbtab_syntax) [AS tabalias]} }
         [UP TO n ROWS]      *表示共選取多少行
         [CLIENT SPECIFIED]  *是否是指定client的
         [BYPASSING BUFFER]  *(還沒見過,待補全)
         [CONNECTION {con|(con_syntax)}] ... .  *(還沒見過,待補全)
FROM之后的部分是source的內容。
[AS tabalias]為dbtab重命名,例如 dbtab as a,那么其中的field可以表示為a~field。(在SELECT語句中where之后要用到from后面出現的dbtab的column時,表示表中的FIELD,用"~"來避免混淆,在where部分會說到。在表示結構的字段用"-")。
join:將多個數據庫表進行聯合查詢的時候用JOIN來連接。

... [(] {dbtab_left [AS tabalias_left]} | join
          {[INNER] JOIN}|{LEFT [OUTER] JOIN}
            {dbtab_right [AS tabalias_right] ON join_cond AND ..} [)] ...  .

 

3.INTO|APPENDING target 用APPENDING時,不刪除原來內表中的內容,而且standard,hashed,sorted table都可以使用APPENDING。

此句用法:

1. ... INTO [CORRESPONDING FIELDS OF] wa  "wa為與數據庫表結構相同的結構

2. ... INTO (dobj1, dobj2 ... )  "傳入field

3. ... INTO|APPENDING [CORRESPONDING FIELDS OF] TABLE itab [PACKAGE SIZE n]  "package size n :以n行為限量,打包傳遞。

 

4.[FOR ALL ENTRIES IN itab]: 此語句用作數據庫表與內表的聯合,對於itab有以下限制:itab中不能有重復的記錄,且表不能為空。


5.WHERE sql_cond:這里是寫從數據庫表中尋找相關記錄的邏輯的地方,比較重要。

句式1:... col operator f ...

此處col是指source中的dbtab的column,f可以是任何數據對象或者是source中的表的column,如果f是source的column,那么f應該表示為source~column。
operator:=(EQ) <>(NE) <(LT) >(GT) <=(LE) >=(GE)

句式2: ... col [NOT] BETWEEN dobj1 AND dobj2 ... *dobj為數字對象

句式3: ... col [NOT] LIKE dobj [ESCAPE esc] ...

 

這個表達式用來判斷col是否和dobj是同一類型。注意:dobj不能指定為column ID.而且col和dobj必須為character-type。 當加上ESCAPE時,dobj可以以'XXX'的形式出現,ESCAPE esc用來去掉dobj中的通配符esc.
例如  LIKE '%!_%' ESCAPE '!'
dobj的類型中可以有通配符 _ (單個字符)、%(任意長字符串)等

句式4: ... col [NOT] IN (dobj1, dobj2 ... ) ...

 

判斷col的值或內容是否與括號中的dobj的值或內容一致。舉例如下:
SELECT *   FROM sbook  INTO TABLE sbook_tab
       WHERE class NOT IN ('C','F','Y'). 

句式5: ... col [NOT] IN seltab ...
seltab是由SELECT-OPTIONS語句確定的選擇區域。下面由一個例子說明:

DATA spfli_wa TYPE spfli.
SELECT-OPTIONS: s_carrid FOR spfli_wa-carrid NO INTERVALS
                                             NO-EXTENSION,
                s_connid FOR spfli_wa-connid NO INTERVALS
                                             NO-EXTENSION.
SELECT SINGLE * FROM spfli INTO spfli_wa
       WHERE carrid IN s_carrid AND
             connid IN s_connid.


句式6: ... col IS [NOT] NULL ...  這個不用解釋了吧,就是column是否為空值。

句式7: ... cond1 AND cond2 AND cond3  ... cond1 OR cond2 OR cond3 ...

 AND 和 OR 用來連接多個條件。此處值得注意的是AND要寫在OR之前,如果需要改變順序可添加括號。

句式8: ... [NOT] EXISTS subquery ...

     ... col [NOT] IN subquery ...

subquery的形式是(select …)。

6[GROUP BY group] [HAVING group_cond] [ORDER BY sort_key].
group by  group 是如果加了下划線的field在數據庫表中出現了多次,那么只取一條。group不能為string
having group_cond:為group by group提供選擇條件,having 后可以跟數據統計語句如count/sum等,除了數據統計語句外,having后只能跟在group by 之后的字段中出現過的字段。
sort key 必須是出現在SELECT之后的result中的column,而且有多個sort key時,自左向右確定排序順序。后面可加DESCENDING和ASCENDING。也可以用order by primary key.


免責聲明!

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



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