!--a11y-->
オープン
SQL 命令によるクラスタデータベースへのアクセス
クラスタデータベースは、
ABAP ディクショナリで使用され、 ABAP が特別な方法で使用するリレーショナルデータベースです。したがって、原則として、 データベーステーブルの読込と処理で説明するオープン SQL 命令を使用して ABAP クラスタデータベースにアクセスすることができます。クラスタデータベーステーブルに対して
OPEN SQL 命令を使用することに意味があるようにするためには、クラスタデータベーステーブルの特殊な構造がわかっていなければなりません( クラスタデータベースの構造を参照してください)。たとえば、項目
CLUSTR および CLUSTID を SELECT 命令で読み込んだり、 UPDATE 命令で変更してもほとんど意味はありません。これらの項目にはシステムによってコーディングされたデータクラスタが入っているので、正しく処理できるのは EXPORT TO DATABASE 命令と IMPORT FROM DATABASE 命令だけだからです。データクラスタに使用する命令の指定した組み合せによって、実行時間が超過した場合は、オープン
SQL 命令の UPDATE 、 MODIFY 、 DELETE のみを使用するようにしてください。クラスタデータベースに対してはオープン SQL 命令の INSERT を使用してはいけません。オープン
SQL 命令を使用してクラスタデータベースを操作することができます。たとえば、 SELECT 命令を使用すれば、クラスタデータベーステーブルを走査して特定のデータクラスタを検索することができます。ここでは、ユーザデータ項目に属する情報を利用することもできます( クラスタデータベースへのデータオブジェクトの格納の例を参照してください)。 IMPORT FROM DATABASE 命令はこの目的には適しません。
PROGRAM SAPMZTS5.
DATA COUNT TYPE I VALUE 0.
TABLES INDX.
SELECT * FROM INDX WHERE RELID = 'HK'
AND SRTF2 = 0
AND USERA = SY-UNAME.
DELETE FROM DATABASE INDX(HK) ID INDX-SRTFD.
IF SY-SUBRC = 0.
COUNT = COUNT + 1.
ENDIF.
ENDSELECT.
WRITE: / COUNT, '
クラスタが削除されました '.このサンプルプログラムは、領域“
HK ”に属するデータクラスタのうち、項目 USERA に現行プログラムユーザの名称が入っているものを、すべてテーブル INDX から削除します。テーブル作業領域 INDX の項目 SRTFD は SELECT 命令によって値が埋められ、 DELETE 命令で使用されています。 WHERE 句で SRTF2 =0 を指定することによって、各データクラスタの処理が一度だけ行われることが保証されます。
OPE SQL
コマンドセットの DELETE 命令( データベーステーブルからの行の削除を参照)を、データクラスタ用の DELETE 命令( クラスタデータベースからのデータクラスタの削除を参照)と混同しないでください。データクラスタ内のデータを削除する場合は、特定の行だけでなく、必ずすべての行を削除してください。以下の例では、
OPEN SQL 命令の UPDATE を使用して、データベーステーブル内のデータクラスタの名称と領域を変更する方法を示しています。クラスタ命令 EXPORT 、 IMPORT 、および DELETE を使用してこの処理を行うには、かなりの手間がかかります。
PROGRAM SAPMZTS5.
TABLES INDX.
DATA DIRTAB LIKE CDIR OCCURS 10 WITH HEADER LINE.
UPDATE INDX SET RELID = 'NW'
SRTFD = 'Internal'
WHERE RELID = 'HK'
AND SRTFD = '
WRITE: / 'UPDATE:',
/ 'SY-SUBRC:', SY-SUBRC,
/ 'SY-DBCNT:', SY-DBCNT.
IMPORT DIRECTORY INTO DIRTAB FROM DATABASE
INDX(NW) ID '
WRITE: / 'IMPORT:',
/ 'SY-SUBRC:', SY-SUBRC.
このプログラムは、
クラスタデータベースへのデータオブジェクトの格納のサンプルプログラムで格納したデータクラスタを変更しています。プログラムの起動時にデータクラスタが存在していて、 UPDATE 命令にその他のエラーがなければ、出力は以下のようになります。UPDATE:
SY-SUBRC: 0
SY-DBCNT: 6
IMPORT:
SY-SUBRC: 0
複数行の変更に記述したように、 UPDATE 命令はデータベーステーブル INDX の中の、指定したデータクラスタに属する6行を変更しています。次に、 IMPORT DIRECTORY 命令で、領域“ NW ”に存在する名称が“ Internal ”のデータクラスタを検索しています。