SAPABAP-オープンSQLの概要

オープンSQLは、現在のASABAPの中央データベース内のデータへの直接アクセスを可能にするABAPステートメントのサブセットを示します。オープンSQLステートメントは、すべてのデータベースシステムでサポートされているABAPのSQLのデータ操作言語機能をマップします。

Open SQLのステートメントは、データベースインターフェイスのOpenSQLインターフェイスでデータベース固有のSQLに変換されます。その後、データベースシステムに転送され、実行されます。オープンSQLステートメントを使用して、ABAPディクショナリで宣言されているデータベーステーブルにアクセスできます。AS ABAPの中央データベースはデフォルトでアクセスされ、他のデータベースへのアクセスはセカンダリデータベース接続を介して可能です。

これらのステートメントのいずれかがABAPプログラムで使用される場合は常に、実行されたアクションが成功したかどうかをチェックすることが重要です。データベーステーブルにレコードを挿入しようとして、正しく挿入されない場合は、プログラムで適切なアクションを実行できるようにするために知っておくことが非常に重要です。これは、すでに使用されているシステム項目、つまりSY-SUBRCを使用して行うことができます。ステートメントが正常に実行されると、SY-SUBRCフィールドに値0が含まれるため、これを確認して、プログラムが表示された場合は続行できます。

DATAステートメントは、作業領域を宣言するために使用されます。これに「wa_customers1」という名前を付けましょう。このために1つのデータ型を宣言するのではなく、テーブルを構成する複数のフィールドを宣言できます。これを行う最も簡単な方法は、LIKEステートメントを使用することです。

INSERTステートメント

wa_customers1作業領域は、ZCUSTOMERS1テーブルのようにここで宣言され、テーブル自体になることなく同じ構造を取ります。この作業領域には、1つのレコードしか保存できません。宣言されると、INSERTステートメントを使用して、作業領域とそれが保持するレコードをテーブルに挿入できます。ここのコードは「INSERTZCUSTOMERS1FROMwa_customers1」と読みます。

作業領域にはいくつかのデータを入力する必要があります。ZCUSTOMERS1テーブルのフィールド名を使用します。これは、フォワードナビゲーション、コード内のテーブル名のダブルクリック、または新しいセッションを開いてトランザクションSE11を使用することで実行できます。次に、テーブルの項目をコピーしてABAPエディタに貼り付けることができます。

以下はコードスニペットです-

DATA wa_customers1 LIKE ZCUSTOMERS1. 
wa_customers1-customer = '100006'. 
wa_customers1-name = 'DAVE'. 
wa_customers1-title = 'MR'. 
wa_customers1-dob = '19931017'. 
INSERT ZCUSTOMERS1 FROM wa_customers1.

CHECKステートメントは次のように使用できます。これは、レコードが正しく挿入されている場合、システムがこれを示すことを意味します。そうでない場合は、ゼロに等しくないSY-SUBRCコードが表示されます。以下はコードスニペットです-

IF SY-SUBRC = 0. 
   WRITE 'Record Inserted Successfully'.  
ELSE. 
   WRITE: 'The return code is ', SY-SUBRC. 
ENDIF.

プログラムを確認し、保存してコードをアクティブ化してから、テストします。出力ウィンドウには、「レコードが正常に挿入されました」と表示されます。

CLEARステートメント

CLEARステートメントを使用すると、フィールドまたは変数をクリアして、その場所に新しいデータを挿入し、再利用することができます。CLEARステートメントは通常、プログラムで使用され、既存のフィールドを何度も使用できるようにします。

前のコードスニペットでは、作業領域構造にデータを入力して、ZCUSTOMERS1テーブルに挿入する新しいレコードを作成してから、検証チェックを実行しています。新しいレコードを挿入する場合は、CLEARステートメントを使用して、新しいデータを再度入力できるようにする必要があります。

UPDATEステートメント

テーブル内の1つ以上の既存のレコードを同時に更新する場合は、UPDATEステートメントを使用します。INSERTステートメントと同様に、作業領域が宣言され、プログラムの実行時にレコードに入れられる新しいデータが入力されます。以前にINSERTステートメントで作成されたレコードは、ここで更新されます。NAMEフィールドとTITLEフィールドに保存されているテキストを編集するだけです。次に、新しい行で、INSERTステートメントと同じ構造が使用されます。今回は、次のコードスニペットに示すようにUPDATEステートメントを使用します。

DATA wa_customers1 LIKE ZCUSTOMERS1. 
wa_customers1-customer = '100006'. 
wa_customers1-name = 'RICHARD'. 
wa_customers1-title = 'MR'. 
wa_customers1-dob = '19931017'. 
UPDATE ZCUSTOMERS1 FROM wa_customers1.

UPDATEステートメントが実行されると、ABAPディクショナリでデータブラウザを表示して、レコードが正常に更新されたことを確認できます。

MODIFYステートメント

MODIFYステートメントは、INSERTステートメントとUPDATEステートメントの組み合わせと見なすことができます。これは、新しいレコードを挿入するか、既存のレコードを変更するために使用できます。これは、作業領域に入力されたデータからレコードを変更する際の前の2つのステートメントと同様の構文に従います。

このステートメントが実行されると、関連するキーフィールドがテーブル内のフィールドと照合されます。これらのキーフィールド値を持つレコードがすでに存在する場合は、更新されます。そうでない場合は、新しいレコードが作成されます。

以下は、新しいレコードを作成するためのコードスニペットです-

CLEAR wa_customers1.
 
DATA wa_customers1 LIKE ZCUSTOMERS1. 
wa_customers1-customer = '100007'. 
wa_customers1-name = 'RALPH'. 
wa_customers1-title = 'MR'. 
wa_customers1-dob = '19910921'. 
MODIFY ZCUSTOMERS1 FROM wa_customers1.

この例では、CLEARステートメントを使用して、新しいエントリを作業領域に配置できるようにしてから、顧客(番号)100007を追加します。これは新しい一意のキーフィールド値であるため、新しいレコードが挿入され、別の検証チェックが実行されます。

これが実行され、データがデータブラウザで表示されると、顧客番号100007(RALPH)の新しいレコードが作成されます。

上記のコードは次の出力を生成します(テーブルの内容)-