Sap-abap-open-sql-overview

提供:Dev Guides
移動先:案内検索

SAP ABAP-オープンSQLの概要

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

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

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

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

INSERTステートメント

wa_customers1ワークエリアは、ZCUSTOMERS1テーブルのようにここで宣言され、テーブル自体にならずに同じ構造を取ります。 この作業領域には、1つのレコードのみを保存できます。 宣言されると、INSERTステートメントを使用して、作業領域とそれが保持するレコードをテーブルに挿入できます。 ここのコードは「INSERT ZCUSTOMERS1 FROM wa_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)の新しいレコードが作成されます。

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

SQLステートメント