


版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、ABAP語法完整版SAPABAP/4基礎知識學習數據類型C:字符串D:日期型格式為YYYYMMDD例:1999/12/03'F:浮點數長度為8I:整數N:數值組成的字符串如:011,'302'P:PACKED數用于小數點數值如:12.00542T:時間格式為:HHMMSS如:'14:03:00'X:16進制數如:'1A03'*變量聲明DATA<F><Length><type><value>decimals<F>變量名稱<length><type>變量類型及
2、長度<value>初值<decimals>小數位數exp:DATA:COUNTERTYPEPDECIMALS3.NAME(10)TYPECVALUE'DELTA'.S_DATETYPEDVALUE'19991203'.exp:DATA:BEGINOFPERSON,NAME(10)TYPEC,AGETYPEI,WEIGHTTYPEDECIMALS2,ENDOFPERSON.另外,有關DATA聲明的指令還有:CONSTANTS(聲明常數)、STATICS(臨時變量聲明).exp:CONSTANTSPITYPEPDECIMALS5VALUE
3、39;3.14159'.STATICS關鍵字聲明的變量僅在目前的程序中使用,結束后會自動釋放語法:STATICS<c><length><type><value><decimals>系統專用變量說明系統內部專門創建了SYST這個STRUCTURE,里面的欄位存放系統變量,常用的系統變量有SY-SUBRC:系統執行某指令后,表示執行成功與否的變量,'0'表示成功SY-UNAME:當前使用者登入SAP的USERNAME;SY-DATUM:當前系統日期;SY-UZEIT:當前系統時間;SY-TCODE:當前執行程序的T
4、ransactioncodeSY-INDEX:當前LOOP循環過的次數SY-TABIX:當前處理的是internaltable的第幾筆SY-TMAXL:Internaltable的總筆數SY-SROWS:屏幕總行數;SY-SCOLS:屏幕總列數;SY-MANDT:CLIENTNUMBERSY-VLINE:畫豎線SY-ULINE:畫橫線TYPE關鍵字用來指定資料型態或聲明自定資料型態Example:TYPES:BEGINOFMYLIST,NAME(10)TYPEC,NUMBERTYPEI,ENDOFMYLIST.DATALISTTYPEMYLIST.LIKE關鍵字跟TYPE關鍵字使用格式相同,如
5、DATATRANSCODELIKESY-TCODE.不同的是LIKE用在已有值的資料項,如系統變量,而TYPE關鍵字則是用在指定資料型態。TABLES關鍵字用來聲明TableWorkArea的數據,對應至ABAP/4資料文件(DictionaryObject),由SQL指令加載所需數據語法:TABLES<dbtab>Example:TABLES:SPFL.SELECT*輸出一. WRITE語句ABAP/4用來在屏幕上輸出資料的指令是WRITE指令,例如:WRITE:'USERNAMEIS:',SY-UNAME.二. 指定屏幕輸出位置指定輸出位置的語句格式為:WRIT
6、E:AT/<pos>(<len>)資料項<par>FROMSPFL.WRITE:SPFL-MANDT,SPFL-CARRID,SPFL-CONNECTION.ENDSELECT.從ABAP/4Dictionary的SPFL檔載入MANDT,CARRID,CONNECTION三個字段至SPFL此TableWorkArea其中:/:在下一行輸出<pos>:指正輸出的仃節;(<len>):指定輸出位數(長度)<par>:指定顯示格式參數,參數有:LEFT-JUSTIFIED資料*左對齊CENTERED資料*中間對齊RIGHT-J
7、USTIFIED資料*右對齊UNDER<g>正對在資料項<g>的下面顯示NO-GAP緊局顯示,不留空格USINGEDITMASK<m>:使用內嵌子元顯示,如12:03:20USINGNOEDITMASK:不使用內嵌子元NO-ZER數字前面0的部分不顯示NO-SIGN:不顯示正負號DECIMALS<d>:顯示<d>位小數EXPOENT<e>:F(浮點數)指數的值ROUND<r>:四舍五入至小數點后<r>位CURRENCY<c>:幣另U顯示DD/MM/YY:日期顯示格式MM/DD/YY:YY
8、/MM/DD:YY/DD/MMMM/DD/YYYY:DD/MM/YYYYYYYY/MM/DD:YYYY/DD/MM:例如1:WRITE:/10(6)'ABCDEFGHIJK'.輸出結果為:ABCDEF例如2:DATA:XTYPEIVALUE'11:20:30',WRITE:/XUSINGEDITMASK'_:_:_'.WRITE:/XUSINGEDITMASK'$,'.WRITE:/YNO-GAP.輸出結果為:11:20:30$112,030ABCDEF例如3:DATA:LENTYPEIVALUE10,POSTYPEIVALUE1
9、1,TEXT(10)VALUE'1234567890'WRITE'Thetextappearsinthetext.'.WRITEATPOS(LEN)TEXT.WRITETO語句的基本形式要將值(文字)或源字段內容寫入目標字段,可以使用WRITETO語句:語法WRITE<F1>TO<F2>option.DATA:NUMBERTYPEFVALUE'4.3',TEXT(10),FLOATTYPEF,PACKTYPEPDECIMALS1.WRITENUMBER.WRITENUMBERTOTEXTEXPONENT2.WRITE/TE
10、XT.WRITENUMBERTOFLOAT.WRITE/FLOAT.WRITENUMBERTOPACK.WRITE/PACK.MOVENUMBERTOPACK.WRITE/PACK.exp:DATA:NAME(10)VALUE'SOURCE',SOURCE(10)VALUE'Antony',TARGET(10).WRITE(NAME)TOTARGET.WRITE:TARGET.exp:DATA:COUNTERTYPEI.COMPUTECOUNTER=COUNTER+1.COUNTER=COUNTER+1.ADD1TOCOUNTER.在此,三條運算語句進行相同算術
11、運算輸出屏幕上的線和空行用下列語法,可以在輸出屏幕上生成水平線:語法ULINEAT/<pos>(<len>).它等同于WRITEAT/<pos>(<len>)SY-ULINE.AT后的格式規范,與在在屏幕上定位WRITE輸出(頁28)中為WRITE語句說明的格式規范完全一樣。如果沒有格式規范,系統則開始新的一行,并用水平線填充該行。否則,只按指定輸出水平線。生成水平線的另一種方法,是在WRITE語句中鍵入恰當數量的連字符,如下所示:WRITEAT/<pos>(<len>)'-.'.垂直線用下列語法,可以在輸
12、出屏幕上生成垂直線:語法WRITEAT/<pos>SY-VLINE.或WRITEAT/<pos>'|'.空行用下列語法,可以在輸出屏幕上生成空行:語法SKIP<n>.該語句從當前行開始,在輸出屏幕上生成<n>個空行。如果沒有指定<n>的值,就輸出一個空行。要將輸出定位在屏幕的指定行上,請使用:語法SKIPTOLINE<n>.該語句允許將輸出位置向上或向下移動。四.顯示圖示:語法:WRITE:<symbol-name>ASSYMBOL.WRITE:<icon-name>ASICON.例
13、如:INCLUDE<SYMBOL>.INCLUDE<ICON>.WRITE:/'Phonesymbol:',SYM_PHONEASSYMBOL.WRITE:/'AlarmIcon:',ICON_VOICE_OUTPUTASICON.要查看系統所提供有那些符號及圖示,可選擇'EDIT'下的'InsertStatement',選擇'Write',接下來選擇要查看的群組,如SYMBOL或ICON,接下來按'Display'即可.*一.InternalTable的聲明ABAP/4中的
14、InternalTable是一種DataStructure,類似于其他語言中的STRUTURE,它可以由幾個不同類型的欄位(field)組成,用來表示具有不同屬性的某一事物,單獨一筆資料表示某個事物,多筆資料表示具有相同屬性的多個事物.Internaltable的定義有以下幾種格式:格式一.DATA:BEGINOF<internaltable>OCCURS<n>,<field1>TYPE<type1>,<field2>TYPE<type2>,<field3>TYPE<type3>,.ENDOF<
15、;internaltable>.語法:DATA<f><type>OCCURS<n>WITHHEADERLINEExample:LINE.DATAVECTORTYPEIOCCURS10WITHHEADER格式二.TYPES:BEGINOF<workarea>,<field1>TYPE<type1>,<field2>TYPE<type2>,<field3>TYPE<type3>,ENDOF<workarea>.TYPES<internaltable>
16、TYPE<workarea>OCCURS<n>.格式三.DATA:BEGINOF<workarea>.INCLUDESTRUCTURE<tablename>.DATA:ENDOF<workarea>.DATA:<internaltable>LIKE<workarea>OCCURS<n>.exp:TYPESVECTORTYPEIOCCURS10.TYPES:BEGINOFLINE,COLUMN1TYPEI,COLUMN2TYPEI,COLUMN3TYPEI,ENDOFLINE.TYPESITABTYP
17、ELINEOCCURS10.TYPES:BEGINOFDEEPLINE,TABLE1TYPEVECTOR,TABLE2TYPEITAB,ENDOFDEEPLINE.TYPESDEEPTABLETYPEDEEPLINEOCCURS10.本示例創建與上例相同的內表數據類型(VECTOR和ITAB)。然后創建數據類型DEEPLINE作為字段串,包含這些內表作為組件。通過該字段串,數據類型DEEPTABLE被創建為內表。因此該內表的元素本身就是內表。exp:TYPES:BEGINOFLINE,COLUMN1TYPEI,COLUMN2TYPEI,COLUMN3TYPEI,ENDOFLINE.TYPESI
18、TABTYPELINEOCCURS10.DATATAB1TYPEITAB.DATATAB2LIKETAB1WITHHEADERLINE.同創建內表數據類型(頁99)中所示,該示例創建數據類型ITAB作為內表。通過使用DATA語句的TYPE參數引用ITAB,使數據對象TAB1與ITAB結構相同。通過使用DATA語句的LIKE參數引用TAB1,使數據對象TAB2結構相同。創建的TAB2帶表頭行。因此,可以在程序中使用TAB2-COLUMN1、TAB2-COLUMN2和TAB2-COLUMN3等定位表格工作區域TAB2。exp:DATAFLIGHT_TABLIKESFLIGHTOCCURS10.本示
19、例創建數據對象FLIGHT_TAB,其結構與數據庫表格SFLIGHT相同。本示例介紹如何采用兩種不同的步驟創建同一內表。TYPESVECTOR_TYPETYPEIOCCURS10.DATAVECTORTYPEVECTOR_TYPEWITHHEADERLINE.在此創建一個內表數據類型VECTOR_TYPE,其行包含首先創建的基本類型I字段。然后,通過引用VECTOR_TYPE創建數據對象VECTOR。通過使用WITHHEADERLINE選項還創建表格工作區域VECTOR。在這種情況下,表格工作區域包含一種類型I字段,可以通過名稱VECTOR定位。DATAVECTORTYPEIOCCURS10W
20、ITHHEADERLINE.在這種情況下,通過直接在DATA語句中使用OCCURS選項創建完全一樣的數據類型VECTOR。1. *TYPEStype.2. TYPEStype(len).3. TYPES:BEGINOFstructype.ENDOFstructype.TYPESitabtypeTYPEtabkindOFlinetypeLIKEtabkindOFlineobjWITHUNIQUE|NON-UNIQUEkeydefINITIALSIZEn.4. TYPESitabtypeTYPERANGEOFtype.TYPESitabtypeLIKERANGEOFf.5. TYPESitabty
21、peTYPElinetype|LIKElineobjOCCURSn.*APPENDLINE格式:APPEND<workarea>TOinternaltable>舉例一:(使用WORKAREA)DATA:BEGINOFLINE,COL1TYPEI,COL2TYPEI,ENDOFLINE.DATAITABLIKELINEOCCURS10.DO2TIMES.LINE-COL1=SY-INDEX.LINE-COL2=SY-INDEX*2.APPENDLINETOITAB.ENDDO.LOOPATITABINTOLINE.WRITE:/LINE-COL1,LINE-COL2.ENDLO
22、OP.舉例二(不使用WORKAREA)DATA:BEGINOFITABOCCURS10,COL1TYPEI,COL2TYPEI,ENDOFITAB.DO2TIMES.ITAB-COL1=SY-INDEX.ITAB-COL2=SY-INDEX*2.APPENDITAB.ENDDO.LOOPATITAB.WRITE:/ITAB-COL1,ITAB-COL2.ENDLOOP.exp:DATA:BEGINOFITABOCCURS10,COL1TYPEC,COL2TYPEI,ENDOFITAB.DO3TIMES.APPENDINITIALLINETOITAB.ITAB-COL1=SY-INDEX.ITA
23、B-COL2=SY-INDEX*2.APPENDITAB.ENDDO.LOOPATITAB.WRITE:/ITAB-COL1,ITAB-COL2.ENDLOOP.舉例三.(加入另一個Internaltable的元素)格式:APPENDLINESOF<itab1>FROM<n1>TO<n2>TO<itab2>.將<itab1>的元素加入至<itab2>中,可選取自<n1>至<n2>的范圍.APPENDLINESOFITABTOJTAB.COLLECTLINECOLLECT指令也是將元素加入Intern
24、altable中,與APPEND的區別是:COLLECT指令在非數值欄位相同的情況下,將數值欄位匯總.格式:COLLECT<workarea>INTO<itab>DATA:BEGINOFITABOCCURS3,COL1(3)TYPEC,COL2TYPEI,ENDOFITAB.ITAB-COL1=:'ABC'.ITAB-COL2=10.COLLECTITAB.ITAB-COL1=:'XYZ'.ITAB-COL2=20.COLLECTITAB.ITAB-COL1=:'ABC'.ITAB-COL2=80.COLLECTITAB.
25、此時,internaltable中放的是2筆數據,分別為:ITAB-COL1ITAB-COL2'ABC'90'XYZ'20*INSERTLINE將元素插入在指定的internaltable位置之前.格式:INSERT<wa>INTOINITIALLINEINTO<itab>INDEX<idx>或者:INSERTLINESOF<itab1>FROM<n1>TO<n2>INTO<itab2>INDEX<idx>其中:<wa>即workarea,工作區中的元素.
26、INITIALLINEINTO:插入一筆初始化的記錄.<itab>:internaltableINDEX<idx>:internaltable的記錄號.(新加入的元素放在此記錄前面)Example:DATA:BEGINOFLINE,COL1TYPEI,COL2TYPEI,ENDOFLINE.DATAITABLIKELINEOCCURS10DO3TIMES.LINE-COL1=SY-INDEX*10.LINE-COL2=SY-INDEX*20.APPENDLINEINTOITAB.ENDDO.LINE-COL1=100.LINE-COL2=200.INSERTLINEIN
27、TOITABINDEX2.”插入在位置2之前LOOPATITABINTOLINE.WRITE:/SY-TABIX,LINE-COL1,LINE-COL2."SY-TABIX為Table位置ENDLOOP.執行結果:110202100200”插入的元素3204043060插入另一InternalTable元素語法:INSERTLINESOF<itab1>FROM<n1>TO<n2>TO<itab2>INDEX<idx>將<itab1>的元素插入至<itab2>中,位置在<idx>之前,可選取
28、自<n1>至<n2>的范圍Example:APPENDLINESOFITABTOJTABINDEX3.將ITAB所有元素插入JTAB中,位置在第三個元素之前*讀取internaltable格式一:LOOPAT<itab>INTO<wa>FROM<n1>TO<n2>WHEREconditionsstatementENDLOOP.Example:LOOPATITABINTOLINEWHERECOL1>100.WRITE:/SY-TABIX,LINE-COL1.ENDLOOP.僅讀取COL1>100的元素格式二:RE
29、ADTABLE<itab>INTO<wa>INDEX<idx>/WITHKEY<conditions>舉例.(格式二)DATA:BEGINOFITABOCCURS10,COL1TYPEI,COL2TYPEI,ENDOFITAB.DO10TIMES.ITAB-COL1=SY-INDEX.ITAB-COL2=SY-INDEX*2.APPENDITAB.ENDDO.READTABLEITABINDEX3.(或者:READTABLEITABWITHKEYCOL1=3.)WRITE:/'ITAB-COL1=',ITAB-COL1,'
30、ITAB-COL2=',ITAB-COL2.執行結果同樣是:ITAB-COL1=3ITAB-COL2=6.Example:READTABLEITABINTOLINEINDEX5讀取ITAB的第5個元素資料,放入LINE的欄位中根據欄位內容尋找語法:READTABLE<itab>INTO<wa>Example:ITAB-COL1='ABC'.READTABLEITABINTOLINE.找出ITAB中COL1位位內容是ABC的元素,找到的值放入LINE中若找到SY-SUBRC傳回0,找不到則傳回4,<itab>必須聲明有workarea*
31、修改internaltable中的值格式:MODIFY<itab>FROM<wa>INDEX<idx>TRANSPORTING<f1><f2>-WHEREconditions舉例一.READTABLEITABINDEX3.LINE-COL1=29.MODIFYITABFROMLINETRANSPORTINGCOL1.將第三筆記錄的COL1欄位的值修改為29.舉例二.T_SALARY-salary=50.MODIFYT_SALARYTRANSPORTINGsalaryWHEREbirthday='1999/12/06'.
32、DELETEinternaltable中的欄位格式:DELETE<itab>INDEX<idx>.或:DELETE<itab>FROM<n1>TO<n2>WHERE<conditions>Internaltable排序SORT<itab><orderway>BY<f1><f2>其中:<orderway>有DESCENDING和ASCENDING,Default為ASCENDING.<f1>:為指定排序的欄位.Example:SORTITABDESCEN
33、DINGBYCOL2.將ITAB根據COL2欄位遞減排序*確定內表屬性如果在處理過程中想知道內表一共包含多少行,或者想知道定義的OCCURS參數的大小,請使用DESCRIBE語句,用法如下:語法DESCRIBETABLE<itab>LINES<lin>OCCURS<occ>.如果使用LINES參數,則將填充行的數量寫入變量<lin>。如果使用OCCURS參數,則將行的初始號寫入變量<occ>。DATA:BEGINOFLINE,COL1TYPEI,COL2TYPEI,ENDOFLINE.DATAITABLIKELINEOCCURS10.
34、DATA:LINTYPEI,OCCTYPEI.DESCRIBETABLEITABLINESLINOCCURSOCC.WRITE:/LIN,OCC.DO1000TIMES.LINE-COL1=SY-INDEX.LINE-COL2=SY-INDEX*2.APPENDLINETOITAB.ENDDO.DESCRIBETABLEITABLINESLINOCCURSOCC.WRITE:/LIN,OCC.其輸出為:10101.000在此創建內表ITAB。在填充表格前后執行DESCRIBE語句。更改當前行號,但無法更改初始行號。加總SUM.總和計算存放與workarea中,但只能在LOOP中使用.例:LOO
35、PATITABINTOLINE.SUM.ENDLOOP.WRITE:/LINE-COL1,LINE-COL2.LINE-COL1和LINE-COL2存數值總和初始化internaltableREFRESH<itab>.清空<itab>中的值.使用在沒有HEADERLINE的InternalTable中,清除所有元素CLEAR<itab>.素清空<itab>的HeaderLine.使用在有HEADERLINE的InternalTable中,清除所有元FREE<itab>.指令之后釋放內存空間.釋放(Release)InternalTab
36、le所占的內存空間,用在REFRESH和CLEAR將值重置為默認值可以用CLEAR語句重置任何數據對象值,如下所示:語法CLEAR<f>.exp:DATANUMBERTYPEIVALUE'10'.WRITENUMBER.CLEARNUMBER.WRITE/NUMBER.輸出為:100CLEAR語句將字段NUMBER的內容從10重置為默認值0。*添加字段順序并將結果賦給另一個字段語法ADD<n1>THEN<n2>UNTIL<nz>GIVING<m>.如果<n1>、<n2>、.、<nz>
37、是在內存中相同類型和長度的等距字段序列,則進行求和計算并將結果賦給<m>添加字段順序并將結果添加到另一個字段的內容中語法ADD<n1>THEN<n2>UNTIL<nz>TO<m>.該語句除了將字段總和添加到<m>的舊內容中之外,與上面語句的工作方式相同。有關其它相似變體的信息,參見有關ADD語句的關鍵字文檔。DATA:BEGINOFSERIES,N1TYPEIVALUE10,N2TYPEIVALUE20,N3TYPEIVALUE30,N4TYPEIVALUE40,N5TYPEIVALUE50,N6TYPEIVALUE60,
38、ENDOFSERIES.DATASUMTYPEI.ADDSERIES-N1THENSERIES-N2UNTILSERIES-N5GIVINGSUM.WRITESUM.ADDSERIES-N2THENSERIES-N3UNTILSERIES-N6TOSUM.WRITE/SUM.輸出如下:150350在此,將N1到N5組件內容求和并將其值賦給字段SUM。然后,將N2到N6組件求和并將其添加到SUM的值中。*屏幕輸入命令在ABAP/4中要從屏幕輸入變量,使用的命令是PARAMETERS及SELECTION-OPTIONS:1. PARAMETER:輸入一個變量或欄位內容SELECTION-OPTIO
39、NS:使用條件篩選畫面來輸入數據PARAMETERS指令基本的輸入命令,類似如BASIC的INPUT命令,但無法使用F格式(浮點數)語法:PARAMETERS<p>DEFAULT<f>LOWERCASEOBLIGATORYASCHECKBOXRADIOBUTTONGROUP<rad>Example:PARAMETERS:NAME(8),AGETYPEI,BIRTHTYPED.執行結果:在日期的輸入格式上為MM/DD/YY,MM/DD/YYYY,MMDDYY或MMDDYYYY,如輸入020165表1965年02月01日,與02/01/65的輸入是一樣的,日期輸
40、入范圍為西元1950年至2049年DEFAULT設定輸入的預設值Example:PARAMETERS:COMPANY(20)DEFAULT'DELTA',BIRTHTYPEDDEFAULT'19650201'.1. LOWERCASEABAP/4預設是將字串輸入值自動轉換為大寫,加上此參數會將輸入的資料轉成小寫OBLIGATORY強制要求輸入,屏幕上會出現一個?,使用者必須要輸入才可.ASCHECKBOX輸入CHECKBOX的格式Example:PARAMETERS:TAXASCHECKBOXDEFAULT'X',NTDASCHECKBOX.執行
41、結果:2. RADIOBUTTONGROUP<rad>輸入RADIOBUTTONGROUP的方式Example:PARAMETERS:BOYRADIOBUTTONGROUPSEXDEFAULT'X',GIRLRADIOBUTTONGROUPSEX.exp:TABLESSPLFI.PARAMETERS:LOWLIKESPFLI-CARRID,HIGHLIKESPFLI-CARRID.SELECT*FROMSPLFIWHERECARRIDBETWEENLOWANDHIGH.ENDSELECT.*SELECTION-OPTIONSSELECTION-OPTIONS所輸入的
42、值實際上是放在internaltable中的,該Internaltable有四個欄位,分別是:SIGN,OPTION,LOW,HIGH.條件篩選檢查條件輸入畫面指令,輸入條件后可配合SELECT指令自TABLE讀取符合條件的資料,直接執行或放入InternalTable中,條件有四個參數:1. SIGN:I:表篩選條件符合的資料2. E:表篩選條件不符合的資料OPTION:比較的條件符號EQ(等于),NE(不等于),GT(大于),LE(小于),CP(包含),NP(不包含)LOW:最小值HIGH:最大值語法:SELECTION-OPTIONS<check-option>FOR<
43、table-field>Example:TABLESSPFLI.SELECT-OPTIONSAIRLINEFORSPFLI-CONNID.將條件的輸入值存放入AIRLINE,篩選選擇為SPFLI中的CONNID欄位改變條件輸入格式DEFAULT<begin>TO<end>設定開始結束范圍輸入預設值Example:SELECT-OPTIONSAIRLINEFORSPFLI-CONNIDDEFAULT'2042'TO'4555'.NO-EXTENSION設定不要Multi-Option輸入畫面NOINTERVALS設定不要區間范圍輸入畫
44、面LOWERCASE輸入轉換成大寫OBLIGATORY強制要求輸入*配合SELECT命令條件輸入完后要將符合條件的資料篩選出來,可配合使用SELECT指令使用WHERE條件式Example:TABLESSPFLI.SELECT-OPTIONSAIRLINEFORSPFLI-CONNID.SELECT*FROMSPFLIWHERECONNIDINAIRLINE.WRITE:/SPFLI-CONNID,SPFLI-CITYFROM,SPFLI-CITYTO.ENDSELECT.使用CHECK參數Example:TABLESSPFLI.SELECT-OPTIONSAIRLINEFORSPFLI-CO
45、NNID.SELECT*FROMSPFLI.CHECKAIRLINE.WRITE:/SPFLI-CONNID,SPFLI-CITYFROM,SPFLI-CITYTO.ENDSELECT.*exp:TABLESSPFLI.SELECT-OPTIONS:S_CARRIDFORSPFLI-CARRID,S_CITYFRFORSPFLI-CITYFROM,S_CITYTOFORSPFLI-CITYTO,S_CONNIDFORSPFLI-CONNID.SELECT*FROMSPFLI.CHECK:SPFLI-CARRIDINS_CARRID,SPFLI-CITYFRINS_CITYFR,SPFLI-CI
46、TYTOINS_CITYTO,SPFLI-CONNIDINS_CONNID.WRITE:/SPFLI-CARRID,SPFLI-CONNID,SPFLI-CITYFROM,SPFLI-CITYTO.ENDSELECT.1. 使用IF-IN關鍵字Example:SELECT-OPTIONSAIRLINEFORSPFLI-CONNID.SELECT*FROMSPFLI.IFSPFLI-CONNIDINAIRLINE.WRITE:/SPFLI-CONNID,SPFLI-CITYFROM,SPFLI-CITYTO.ENDIF.ENDSELECT.SELECTION-SCREEN1.產生空白列語法:SE
47、LECTION-SCREENSKIP<n>Example:SELECTION-SCREENSKIP2.產生兩列空白列2.產生底線語法:SELECTION-SCREENULINE/<pos>(length)Example:SELECTION-SCREENULINE/10(30).自第10格開始產生長度30的底線2. 印出備注說明語法:SELECTION-SCREENCOMMENT/<pos>(length)<name>Example:REMARK='Plsenteryourname'.SELECTION-SCREENCOMMENT/
48、10(30)REMARK.同一列中輸入數個資料項語法:SELECTION-SCREENBEGINOFLINE.SELECTION-SCREENENDOFLINE.Example:SELECTION-SCREENBEGINOFLINE.SELECTION-SCREENPOSITION20.PARAMETERSNAME(10).SELECTION-SCREENPOSITION40.PARAMETERSBIRTHTYPED.SELECTION-SCREENENDOFLINE.在20格輸入NAME內容,40格輸入BIRTH的內容繪出BLOCKPANEL語法:SELECTION-SCREENBEGINO
49、FBLOCK<block>WITHFRAMETITLE<title>.OFBLOCK<block>.OFBLOCKRADIORADIOBUTTONGROUPRADIOBUTTONGROUPRADIOBUTTONGROUPSELECTION-SCREENENDExample:SELECTION-SCREENBEGINPARAMETERR1PARAMETERR2PARAMETERR3WITHFRAMEGR1.GR1.GR1.SELECTION-SCREENENDOFBLOCKRADIO.*SQL語法我們在編寫ABAP4程序的時候,經常需要從TABLE中根據某些條
50、件讀取數據,讀取數據最常用的方法就是通過SQL語法實現的。ABAP/4中可以利用SQL語法創建或讀取TABLE,SQL語法分為DDL(DATADEFINELANGUAGE)語言和DML(DATAMULTIPULATIONLANGUAGE)語言,DDL語言是指數據定義語言,例如CREATE等,DML語言是數據操作語言,例如SELECT,INSERT等語句。SQL語句有OPENSQL語句和NATIVESQL語句。OPENSQL語句不是標準SQL語句,是ABAP/4語言,利用OPENSQL語句能在Databases和Command之間產生一個BUFFER,所以它有一個語言轉換的過程。而NATIVES
51、QL語句則是標準的SQL語句,它直接針對Databases操作。OPENSQLSELECT語句語法格式:SELECT<result>INTO<target>FROM<source>WHERE<condition>GROUPBY<fields>ORDERBY<sortorder>其中:<result>指定要抓取的欄位<target>將讀取的記錄存放在workarea中<source>指定從那個TABLE中讀取資料<condition>抓取資料的條件<fields>指
52、定按那些欄位分組<sortorder>排序的欄位及方式相關的系統變量:SY-SUBRC=0表示讀取數據成功<>0表示未找到符合條件的記錄SY-DBLNT:被處理過的記錄的筆數.相關的命令:EXIT.退出循環.CHECK<logisticstatement>.如果邏輯表達式成立,則繼續執行,否則,開始下一次循環。利用循環方式讀取所有記錄SELECT-.ENDSELECT.是循環方式讀取記錄的。例如:TABLESMARD.SELECTDISTINCT*FROMMARDWHEREMATNR='3520421700'.<Statements&g
53、t;.ENDSELECT.(從MARD中抓取所有料號=3520421700的資料)賣取一筆資料Example:TABLESSPFLI.SELECTSINGLE*FROMSPFLIWHEREPLANT='CHUNGLI'ANDTEL='4526174'.WRITE:/SPFLI-COMPANY,SPFLI-PLANT,SPFLI-TEL.務讀取的記錄放在workarea中,并且加入Internaltable中.格式有:.INTO<workarea>.INTOCORRESPONDINGFIELDSOF<workarea>.INTO(f1,.,
54、fn)變量組.INTOTABLEinternaltable>.INTOCORRESPONDINGFIELDSOFTABLE<internaltable>.APPENDINGTABLE<internaltable>.APPENDINGCORRESPONDINGFIELDSOFTABLE<internaltable>舉例一:TABLESMARD.DATA:BEGINOFITABOCCURS10,MATNRLIKEMARD-MATNR,WERKSLIKEMARD-WERKS,LGORTLIKEMARD-LGORT,LABSTLIKEMARD-LABST,EN
55、DOFITAB.SELECTMATNRWERKSLGORTLABSTINTOCORRESPONDINGFIELDSOFITABFROMMARDWHEREMATNR='3520421700'.APPENDITAB.CLEARITAB.ENDSELECT.(將讀取的結果放在InternaltableITAB中)DATA:BEGINOFWA,LINE(240),ENDOFWA.DATANAME(10).NAME='SPFLI'.SELECT*FROM(NAME)INTOWA.WRITE:/WA-LINE.ENDSELECT.數據庫表名稱SPFLI被賦給字符字段NAME
56、。SELECT語句將所有的行從SPFLI中讀到目標區WA中。在該示例中,WA與SPFLI的結構并不相同,每一行都將自動地轉換成字符字段舉例二.TABLESMARD.SELECTMATNRMTARTMAKTXINTO(t_matnr,t_mtart,maktx)FROMMARDWHEREMATNR='3520421700'.Statements.ENDSELECT.(從MARD中抓取料號=3520421700的料號、類型和描述,放在變量t_matnr,t_mtart,maktx中)。Example:TABLESSPFLI.DATAWALIKETABLES.SELECT*FROMS
57、PFLIINTOWA.WRITE:/WA-COMPANY,WA-PLANT.ENDSELECT.逐筆寫入WA工作區中舉例三.將讀取的資料寫入InitialTable中語法:SELECT.INTOTABLE<itab>Example:TABLESSPFLI.DATAITABLIKESPFLIOCCURS10WITHHEADERLINE.SELECT*FROMSPFLIINTOITAB.一次讀10筆(InitialTable的長度)記錄存入ITAB中SELECT.INTOTABLE<itab>PACKAGESIZE<n>一次讀取<n>筆記錄至<
58、itab>中Example:TABLESSPFLI.DATAITABLIKESPFLIOCCURS10WITHHEADERLINE.SELECT*FROMSPFLIINTOITABPACKAGESIZE5.一次讀取5筆記錄exp:TABLESSPFLI.DATA:BEGINOFWA,NUMBERTYPEIVALUE1,CITYFROMLIKESPFLI-CITYFROM,CITYTOLIKESPFLI-CITYTO,ENDOFWA.SELECT*FROMSPFLIINTOCORRESPONDINGFIELDSOFWA.WRITE:/WA-NUMBER,WA-CITYFROM,WA-CIT
59、YTO.ENDSELECT.輸出如下所示:在該示例中,系統只將數據庫表SPFLI中選定行的列CITYFROM和CITYTO傳送到WA中。WA中的組件NUMBER保持不變。*按指定的欄位排序TABLESSBOOK.SELECT*FROMSBOOKWHERECARRID='LH'ANDCONNID='0400'ANDFLDATE='19950228'ORDERBYBOOKIDASCENDING.WRITE:/SBOOK-BOOKID,SBOOK-CUSTOMID,SBOOK-CUSTTYPE,SBOOK-SMOKER,SBOOK-LUGGWEIGHT
60、,SBOOK-WUNIT,SBOOK-INVOICE.ENDSELECT.* (利用參數ORDERBY所指定的欄位排序)*取數據的條件關鍵字(1)BETWEEN<g1>AND<g2>例如:WHEREYEARBETWEEN1995AND2000.LIKE<g>例如:WHERENAMELIKE'MIKE%'.('%'是通配符號)IN(<g1>-<gn>)是<g1><gn>里面的任意一個值即可.例如:WHEREPLANTIN('CHUNGLI','TAOYUAN
61、','LIUTU').(表示PLANT只要是'CHUNGLI'或'TAOYUAN'或'LIUTU'都可以).(4)ORDERBY關鍵字指定排序的欄位或順序(1) .ORDERBYPRIMARYKEY.根據PRIMARYKEY遞增排序-ORDERBY<f1>DESCENDING<f2>DESCENDINGExample:SELECT*FROMIMORDERBYPART.*INSERT語句砌<workarea加入到InternalTable中格式:INSERTINTOdatabaseVALUES<workarea>例如:DATA:BEGINOFWA,CODE(6)TYPEC,NAME(30)TYPEC,ENDOFWA.DATA:VENLIKEWAOCCURS10.WA
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司臘八促銷活動方案
- 公司物業送花活動方案
- 公司歡迎晚會策劃方案
- 公司聚餐寫活動方案
- 公司生日會小策劃方案
- 公司淘寶推廣活動方案
- 公司旅游營銷策劃方案
- 2025年在線教育平臺運營考試試卷及答案
- 2025年智能制造及工程技術考試題及答案
- 2025年信貸風險管理師職業資格考試試題及答案
- GB/T 12149-2017工業循環冷卻水和鍋爐用水中硅的測定
- 斷絕子女關系協議書模板(5篇)
- 成都小升初數學分班考試試卷五
- Q∕SY 01007-2016 油氣田用壓力容器監督檢查技術規范
- 水利水電 流體力學 外文文獻 外文翻譯 英文文獻 混凝土重力壩基礎流體力學行為分析
- 零星維修工程項目施工方案
- 物流公司超載超限整改報告
- 起重機安裝施工記錄表
- 江蘇省高中學生學籍卡
- 碳排放問題的研究--數學建模論文
- 贏越酒會講解示范
評論
0/150
提交評論