1. 程式人生 > >ABAP學習之 【三】

ABAP學習之 【三】

第六章資料庫操作

6.2.1表字段

在資料字典中,每建立一個資料庫表後,都將同時生成一個同名的結構化資料型別.

6.2.2外部關鍵字

外部關鍵字內容必須在其對應的約束表(check table)中存在,否則無法插入.

6.2.3技術設定

1.資料型別(data class):

lAPPL0(Master data),較少需要被修改的系統資料表,如員工個人資訊.

lAPPL1(Transaction data),需要經常被修改的資料表,如產品庫存量表.

lAPPL2(Organization and customizing),系統定製資料表,在系統安裝後很少需要修改,如國家程式碼等

.

2.數量級別:

00 to6,600

16,600 to26,000

226,000 to100,000

3100,000 to420,000

4420,000 to34,000,000

3.緩沖(Buffering)機制

如果在緩沖設定中選擇了Buffering switched on,則需要設定其緩沖型別(Full,Single-recordGeneric三種).

緩沖機制的意義在於首次查詢時將資料表中的資料放入應用伺服器緩沖區,以提高後續查詢效率,注意最好不要對經常需要的資料庫表設定該機制,對於經常讀取但很少更新或者通常只有在60秒後才可能被其他應用伺服器程式修改的資料庫表,開啟緩沖機制可以上百倍地提高效率.

4.Log data changes

用於設定表中的資料修改時是否在系統日誌中記錄.

6.2.4索引

一個資料庫表可以包含一個主索引(Primary Index)和多個附屬索引(Secondary Indexes).主索引只包含表關鍵字和指向整個資料條目的指標,由系統自動生成並在新增資料庫條目時進行維護.索引中的資料已經排序.

6.3.1SELECT語句

SELECT <result> FROM <source> INTO <target>

[WHERE <condition>] [GROUP BY <fields>]

[HAVING <cond>] [ORDER BY <fields>].

lHAVING子句用於限定ORDER BY子句中資料條目組的選擇條件

1.選擇單行資料:

lSELECT SINGLE * FROM tab INTO wa_tab WHERE <condition>.選擇單行全部資料.

lSELECT SINGLE field1 ... fieldn FROM tab INTO (wa_field1,...,wa_fieldn) WHERE <condition>.選擇單行指定欄位資料到指定工作區欄位.

lSELECT SINGLE *|field1 ... fieldn FROM tab INTO CORRESPONDING FIELDS OF wa_tab WHERE <condition>.將選擇的值放入工作區中對應的欄位中.

6.3.3選擇多行資料

1.迴圈選擇(DISTINCT去掉結果重復的行):

SELECT [DISTINCT] ... .

<statement block>

ENDSELET.

系統欄位SY-DBCNT給讀取的行計數.

2.選擇至內表:

SELECT ... INTO|APPENDING [CORRESPONDING FIELDS OF] TABLE itab.

其中INTO選項將復蓋itab中的資料,如果不想復蓋只想追加則用APPENDING.

3.指定選擇包大小(一次選擇到內表的行數):

SELECT * FROM tab INTO|APPENDING TABLE wa_tab PACKAGE SIZE n.

<statement block>

ENDSELET.

6.3.4指定查詢條件

1.比較運算子:=,<,>,<>,<=,>=.

2.範圍限定運算子:WHERE ... f [NOT] BETWEEN g1 AND g2 ....

3.字元比較運算子:WHERE ... f [NOT] LIKE g [ESCAPE h]...其中g中萬用字元”_”用於替代單個字元,”%”用於替代任意字串. ESCAPE選項舉例如下:

SELECT ... WHERE city LIKE ‘edit#_%’ ESCAPE ‘#’.選擇所有以”edit_”開始的城市.

4.檢查列表值:WHERE ... f [NOT] IN (g1,...gn)...

5.檢查空值: WHERE ... f IS [NOT] NULL...:這裡的NULL值不等同於初始值INITIAL

6.檢查選擇表.

lWHERE ... f [NOT] IN seltab...其中seltab為選擇表,如選擇螢幕中使用者填充資料.

lSELECT ... WHERE ( code = ‘01’ OR code = ‘02’ ) AND NOT (country = ‘usa’ ).:AND,OR,NOT可以按照任意順序組合.

lSELECT ... WHERE <condition> AND (itab).內表itab僅包含一個型別為C的欄位,且最大長度為72.欄位中內容不能使用變數.這種方式查詢效率很低.

6.3.5多表結合查詢

1.SELECT語句巢狀

DATA:wa_carrid TYPE spfli-carrid,

wa_connid TYPE spfli-connid,

wa_carrname TYPE scarr-carrname.

SELECT carrid connid

FROM spfli

INTO (wa_carrid,wa_connid)

WHERE cityfrom = 'BOSTON'.

SELECT carrname

FROM scarr

INTO wa_carrname

WHERE carrid = wa_carrid.

WRITE:/ wa_carrname.

ENDSELECT.

ENDSELECT.

2.FOR ALL ENTRIES選項(比上面的巢狀要快)

DATA: BEGIN OF wa_carrid,

carrid TYPE spfli-carrid,

END OF wa_carrid.

DATA:wa_carrid_tab LIKE TABLE OF wa_carrid.

DATA:BEGIN OF wa_carrname,

carrid TYPE scarr-carrid,

carrname TYPE scarr-carrname,

END OF wa_carrname.

SELECT carrid

FROM spfli

INTO TABLE wa_carrid_tab

WHERE cityfrom = 'BOSTON'.

SELECT carrid carrname

FROM scarr

INTO wa_carrname

FOR ALL ENTRIES IN wa_carrid_tab相當於迴圈輸出內表在WHERE子句中出現的

WHERE carrid = wa_carrid_tab-carrid.欄位的值

WRITE:/ wa_carrname-carrid, wa_carrname-carrname.

ENDSELECT.

:此子句中不能使用LIKE,BETWEEN,IN,ORDER BY.

3.使用檢視:可先用SE11建立檢視然後查詢,效率更高.

4.結合查詢

SELECT ... FROM table [INNER] JOIN jointab1 [AS alias1] ON <cond> <options>..

[INNER] JOIN jointab2 [AS alias2] ON <cond> <options>...

WHERE <cond>...內連線,條件間只能用AND連線,也可放入WHERE子句.

SELECT ... FROM table LEFT [OUTER] JOIN jointab1 [AS alias1] ON <cond> <options>..左連線,ON附加項中,只能使用=操作符.不能在WHERE子句中對結合資料表中的欄位進行條件限定.

5.子查詢(沒有INTO子句,不能結合ON同時出現,可巢狀)

lSELECT ... FROM scar INTO

WHERE EXIST ( SELECT * FROM spfli

WHERE carrid = scarr-carrid

AND cityfrom = BOSTON ).

l...WHERE city IN ( SELECT cityfrom FROM spfli WHERE ...只返回單個欄位.

l...WHERE city = ( SELECT cityfrom FROM spfli WHERE ...單行返回結果.

l... WHERE city > ALL|ANY|SOME ( SELECT cityfrom FROM spfli WHERE ...多行返回值.

6.3.6組合查詢結果

1.總計功能

SELECT MAX|MIN|SUM|AVG|COUNT( [DISTINCT] f1 ) [AS a1]...其中DISTINCT選項將在統計之前先排除相同的選擇結果.

2.分組總計

SELECT f1 [AS a1] ... MAX|MIN|SUM|AVG|COUNT( [DISTINCT] fm ) [AS am] ...

INTO (s1,...,sm...)|CORRESPONDING FIELDS OF itab...

GROUP BY f1...

:分組總計必須指定查詢欄位或使用INTO CORRESPONDING FIELDS OF附加項,使用後者時需要通過AS後面的別名將總計結果存放在與別名同名的欄位中.

3.指定分組條件

SELECT f1 [AS a1] ... MAX|MIN|SUM|AVG|COUNT( [DISTINCT] fm ) [AS am] ...

INTO (s1,...,sm...)|CORRESPONDING FIELDS OF itab...

GROUP BY f1...

HAVING <cond>.用於對分組總計選出的資料進行二次篩選.

4.排序(SQL Trace工具檢視資料庫索引)

l...ORDER BY PRIMARY KEY.系統將按主關鍵字升序排序.

l...ORDER BY f1 [ASCENDING|DESCENDING] ...指定欄位,預設升序.

6.3.7其它格式說明

lTABLSE dbtab.宣告與資料庫表同名同結構的工作區,是一種結構體物件,不是內表.

ldbname = EKBE.SELECT f1... FROM (dbname) INTO (s1,...)...動態指定資料庫表,注意資料庫表名必須大寫.

相關推薦

ABAP學習

第六章資料庫操作 6.2.1表字段 在資料字典中,每建立一個資料庫表後,都將同時生成一個同名的結構化資料型別. 6.2.2外部關鍵字 外部關鍵字內容必須在其對應的約束表(check table)中存在,否則無法插入. 6.2.3技術設定 1.資料型別(data c

python3的學習字符串和編碼

而且 亂碼 \n spa 結果 雙引號 gb2312 span 大小寫 字符串編碼 由於計算機是美國人發明的,因此,最早只有127個字符被編碼到計算機裏,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII編碼,比如大寫字母A的編碼是65,小寫字母z

Docker學習筆記安裝Redis

art port 再次 dock 使用 contain bash Go red 項目中使用到Redis,平常都是別人搭建的,今天試著在Google Cloud Platform 上搭建一個學習環境。 1.使用 docker pull redis 從docker hub中下載

Appium自動測試框架學習筆記

前言 也不知道比賽方是怎麼想的23333,測試的app居然不支援x86架構的,沒辦法arm的模擬器太卡,所以只能用真機進行測試了。 由於是比賽,所以我也不會貼上具體的程式碼,結合著測試需求進行一個簡單

算法學習回溯法--迷宮問題

map print 檢測 tle 要求 -i result color n) 題目描述 定義一個二維數組N*M(其中2<=N<=10;2<=M<=10),如5 × 5數組下所示: int maze[5][5] = { 0, 1, 0

python3的學習路二數據類型和變量

添加 變量 之路 get 學習 如果 地板 www ins 整數 python可以處理任意大小的整數(包括負整數),如100,0,-8080等。 浮點數 浮點數也就是小數,如1.23,-9.01等。但對於很大或很小的浮點數,就必須用科學計數法表示,把10用e代

python學習第十七篇:Python中的面向物件(一)

1.什麼是類和類的物件? 類是一種資料結構,我們可以用它來定義物件,後者把資料值和行為特性融合在一起,類是現實世界的抽象的實體以程式設計形式出現。例項是這些物件的具體化。類是用來描述一類事物,類的物件指的是這一類事物的一個個體。例如:“人”就是一個類,而男人,女人,小孩等就是“人”這個類的例項物件;再比如“

NLPjieba原始碼分析關鍵字提取(TF-IDF/TextRank)

【一】綜述 利用jieba進行關鍵字提取時,有兩種介面。一個基於TF-IDF演算法,一個基於TextRank演算法。TF-IDF演算法,完全基於詞頻統計來計算詞的權重,然後排序,在返回TopK個詞作為關鍵字。TextRank相對於TF-IDF,基本思路一致,也是基於統計的思想,只不過其計算詞的權

TensorFlow原始碼系列node分配演算法placement algorithm

一個graph中各種不同特徵的node,tf需要依據一定的規則將不同的node放在不同的device上,這點對於分散式或者單機多卡比較重要。tf在node的分配演算法上有placer和costmodel(代價模型);這裡簡單分析一下placer演算法。代價模型是依據運算元對裝置的要求、裝置的情況等,

Java學習路---1List的ArrayList和LinkedList的KTV點歌系統修改

本程式碼是參考書籍敲出 ,加入了部分自己的東西讓程式完善一些,謝謝!!! KTVArrayList程式碼: 1 import java.util.Scanner; 2 import java.util.ArrayList; 3 4 public class KTVByArrayList {

opencv學習十四Opencv灰度直方圖和均值化直方圖

什麼是直方圖,以下摘自opencv國內論壇: 什麼是直方圖? 直方圖是對資料的集合 統計 ,並將統計結果分佈於一系列預定義的 bins 中。 這裡的 資料 不僅僅指的是灰度值 (如上一篇您所看到的), 統計資料可能是任何能有效描述影象的特徵。 先看一個例子吧。 假設有一個矩

機器學習無監督學習-聚類演算法-Kmeans

1.K-meansK-means,屬於無監督學習。即輸入資料沒有標籤y,經過一些演算法後,找到標籤y。聚類的目的就是找到每個樣本潛在的標籤y,並將同類別的樣本放到一起。k-means聚類:就是把n個點(可以是樣本的一次觀察或一個例項)劃分到k個聚類中,使得每個點都屬於離他最近

IOS學習常見問題 Program License Agreement updated

遇到問題: 因為要上架一款新的app,就需要在蘋果開發者中心(https://developer.apple.com/account/ios/certificate/)去申請釋出證書,於是登陸進去,就提示Program License Agreement up

opencv學習四十三K均值聚類演算法

K均值聚類演算法,在opencv中通過kmeans()函式實現;k均值通俗講:就是從一堆樣本中,隨便挑出幾個,比如3個吧,然後用樣本中的和這挑出來的比較,比較後排序,誰和挑出的那個接近就把他劃到那個類裡,比如樣A和挑1、挑2、挑3中,挑2最接近,則把樣A劃到挑2裡,當然還沒完

hive DDLcreate/drop/alter databases/schema

建立 CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION h

大前端學習筆記整理行內元素與塊級元素的區別以及絕對定位與固定定位的差異

1.簡要說明: 1. 行內元素會再一條直線上,是在同一行的。比如span和strong; 2. 塊級元素各佔一行。是垂直方向的!比如div和p 假如你要將行內元素變成塊級元素,那麼就只需要在該標籤上加上樣式 display:block; 塊級元素可以用樣式控制其高、寬的值,而行內元素不可以。 行內元素和wi

安卓學習常見問題 從Google Play 下載下來的App 白屏

█ 問題:  ● 將app打包後,發給客戶,客戶將app上架到Google Play,再下載下來,發現 介面白屏:     ● 本來是有張背景圖的,就是所謂的引導頁,之後會進入下一個頁面,結果就卡在這邊,不動,檢視手機的資訊(發現和手機沒有關係):

IOS學習常見問題 Xcode真機除錯時常遇到的問題

1. A build only device cannot be used to run this targe 這個是在編輯執行時,沒有選擇真機或者模擬器導致的,而選擇Generic iOS Device通常是打包的時候才選擇這個。切換方式如下:

Android視訊推流直播學習

前面提到了Spydroid兩個關鍵的類:Session和RtspClient。Session是負責維護流媒體資源的,而RtspClient則是建立RTSP連結的。接下來我們就詳細的分析RtspClient類。 首先RtspClient有一個Paramet

IOS學習常見問題蘋果開發者協議更新後,Edit Phone Number跳不出同意按鈕(紅色的警告)

█ 問題:  ● 蘋果開發者協議更新後,跳不出同意按鈕  ● 有提示需要編輯手機號碼(以前沒填寫),修改後還是一樣  ● 部分人換了好幾張手機卡測試(和運營商沒關係),結果還是一樣  ● 部分人反應,在4月21號操作,可以成功,之後操作的就沒成功