ABAP④ SQL
目次
・SELECT操作
REPORT プログラム名.
DATA:
*内部テーブル(テーブル型変数)
MyTable LIKE TABLE OF SCARR,
*作業領域(行型変数)
MyRow LIKE SCARR.
*テーブル[SCARR]のSELECT結果を内部テーブルへ格納。
SELECT *
INTO TABLE MyTable
FROM SCARR.
*内部テーブル全件LOOP(作業領域へレコード情報をコピー)
LOOP AT MyTable INTO MyRow
WRITE:/ MyRow-フィールド名1, MyRow-フィールド名2.
ENDLOOP.
※VB.NET的書き方
For Each MyRow In MyTable
Debug.Print( MyRow.Item(“フィールド名1”) & “,” & MyRow.Item(“フィールド名2”) )
Next MyRow
・INSERT操作
DATA:
MyRow LIKE SCARR, *行型変数
MyCol_Fld1 LIKE SCARR-フィールド1, *列型変数
MyCol_Fld2 LIKE SCARR-フィールド2. *列型変数
*列の値設定
MyCol_Fld1 = ‘aa’.
MyCol_Fld2 = ‘bb’.
*行の値設定(行←列)
MyRow-フィールド1 = MyCol_Fld1.
MyRow-フィールド2 = MyCol_Fld2.
*テーブルにInsert(テーブル←行)
INSERT INTO SCARR VALUES MyRow.
IF SY-SUBRC = 0.
MESSAGE ID ‘SABAPDCU’ TYPE ‘S’ NUMBER 888 WITH ‘INSERT成功’.
ELSE.
MESSAGE ID ‘SABAPDCU’ TYPE ‘E’ NUMBER 888 WITH ‘INSERT失敗’.
ENDIF
・UPDATE操作
UPDATE SCARR
SET フィールド2 = ‘~’
WHERE フィールド1 = ‘~’.
または
DATA:
MyRow LIKE SCARR, *行型変数
MyCol_Fld1 LIKE SCARR-フィールド1, *列型変数
MyCol_Fld2 LIKE SCARR-フィールド2. *列型変数
MyCol_Fld1 = ‘aa’.
MyCol_Fld2 = ‘bb’.
MyRow-フィールド1 = MyCol_Fld1.
MyRow-フィールド2 = MyCol_Fld2.
UPDATE SCARR FROM MyRow.
※変更前後でキー値は同じでなければならない。
・DELETE操作
DELETE FROM SCARR
WHERE フィールド1 = ‘~’.
または
DATA:
MyRow LIKE SCARR, *行型変数
MyCol_Fld1 LIKE SCARR-フィールド1, *列型変数
MyCol_Fld2 LIKE SCARR-フィールド2. *列型変数
MyCol_Fld1 = ‘aa’.
MyCol_Fld2 = ‘bb’.
MyRow-フィールド1 = MyCol_Fld1.
MyRow-フィールド2 = MyCol_Fld2.
DELETE SCARR FROM MyRow.
・上位n件取得
SELECT *
FROM SCARR
INTO TABLE MyTable
UP TO 100 ROWS
・上位1件取得
SELECT SINGLE *
FROM SCARR
INTO TABLE MyTable
※データが必ずある事が分かっている場合にはSINGLEの方が早い。
分からない時は「UP TO 1 ROW」を用いる。
・内部テーブル(テーブル型変数)
TYPES:
BEGIN OF TypeId,
Name TYPE String,
Old TYPE I,
Tel TYPE String,
END OF TypeId.
DATA MyTable TYPE STANDARD TABLE OF TypeId.
DATA MyRow TYPE TypeId.
*テーブル型、行型、列型はLIKEを用いる(実在のDBの構造を用いる場合)
DATA myTable LIKE TABLE OF テーブル名
DATA myRow LIKE テーブル名
DATA myCol LIKE テーブル名-フィールド名
・内部テーブルのSORT
SORT MyTable ASCENDING By フィールド名1 フィールド名2.
SORT MyTable DESCENDING By フィールド名1 フィールド名2.
・FOR ALL ENTRIES IN(≒JOIN)
*内部テーブル(MyType)をキーとしてSCARRをSELECTする。
*ABAPではJOINは遅いらしい。
SELECT *
FROM SCARR
INTO TABLE MyTable
FOR ALL ENTRIES IN MyType
・選択テーブル
BEGIN OF LineType,
’I’:Inclusive
’E’;Exclusive
SIGN(1) TYPE C,
※「HIGH」未指定の時に指定
’EQ’:Equal
’NE’:NotEqual
’GT’:GreaterThan
’LE’:LessEqual
’LT’:LessThan
’CP’:パターンが含まれる
’NP’:パターンが含まれない
OPTION(2) TYPE C,
LOW TYPE ~ / LIKE ~,
HIGH TYPE ~ / LIKE ~,
END OF LineType.
DATA MyRange TYPE RANGE OF テーブル名-フィールド1.
DATA MyLine LIKE LINE OF MyRange.
MyLine-SIGN = ‘I’.
MyLine-OPTION = ‘EQ’.
MyLine-LOW = ‘AAA’.
APPEND MyLine TO MyRange.
SELECT *
FROM SCARR
INTO TABLE MyTable
WHERE CATEGORY IN MyRange.