オープンSQLとネイティブSQL SAP ABAP
このチュートリアルの目的は、あなたに教えることではありません SQL またはデータベースの概念ではなく、ABAPのSQLの多様性を紹介します
ABAP/4 プログラミング言語では、XNUMX 種類の SQL が使用されます。
- ネイティブSQL
- SQLを開く。
Open SQL を使用すると、R/3 システムが使用しているデータベース プラットフォームに関係なく、ABAP ディクショナリで宣言されたデータベース テーブルにアクセスできます。
ネイティブ SQL を使用すると、ABAP/4 プログラムでデータベース固有の SQL ステートメントを使用できます。 これは、ABAP ディクショナリによって管理されないデータベーステーブルを使用できるため、R/3 システムの一部ではないデータを統合できることを意味します。
Open SQL は、R/3 システムの中央データベースで操作を実行する一連の ABAP ステートメントで構成されています。操作の結果とエラー メッセージは、使用中のデータベース システムに依存しません。したがって、Open SQL は、R/XNUMX でサポートされているすべてのデータベース システムに対して、統一された構文とセマンティクスを提供します。 SAPOpen SQL ステートメントのみを使用する ABAP プログラムは、使用しているデータベース システムに関係なく、どの R/3 システムでも動作します。Open SQL ステートメントは、ABAP ディクショナリで作成されたデータベース テーブルでのみ動作します。
基本的なオープン SQL コマンド
- SELECT
- INSERT
- UPDATE
- 変更
- DELETE
- カーソルを開く、フェッチする、カーソルを閉じる
例
TABLES SBOOK. DATA C TYPE CURSOR, WA LIKE SBOOK. OPEN CURSOR C FOR SELECT * FROM SBOOK WHERE CARRID = 'LH ' AND CONNID = '0400' AND FLDATE = '19950228' ORDER BY PRIMARY KEY. DO. FETCH NEXT CURSOR C INTO WA. IF SY-SUBRC <> 0. CLOSE CURSOR C. EXIT. ENDIF. WRITE: / WA-BOOKID, WA-CUSTOMID, WA-CUSTTYPE, WA-SMOKER, WA-LUGGWEIGHT, WA-WUNIT, WA-INVOICE. ENDDO.
0400 年 28 月 02.1995 日のルフトハンザ XNUMX 便の乗客リストを出力します。
オープン SQL リターン コード
すべての Open SQL ステートメントは、次の 2 つのシステム フィールドに戻りコードを入力します。
SY-SUBRC
すべての Open SQL ステートメントの後、システム フィールド SY-SUBRC には、操作が成功した場合は値 0 が含まれ、操作が成功しなかった場合は 0 以外の値が含まれま す。
SY-DBCNT
Open SQL ステートメントの後、システム項目 SY-DBCNT には、処理されたデータベース行の数が含まれます。
ネイティブSQL
すでに述べたように、ネイティブ SQL を使用すると、データベース固有の SQL ステートメントを ABAPプログラム.
ネイティブ SQL ステートメントを使用するには、その前に EXEC SQL ステートメントを置き、その後に ENDEXEC ステートメントを置く必要があります。
構文
EXEC SQL [PERFORMING <form>]. <Native SQL statement> ENDEXEC.
ネイティブ SQL ステートメントの後にはピリオドはありません。 さらに、ネイティブ SQL ステートメントの行の先頭で逆カンマ (") またはアスタリスク (*) を使用しても、通常の ABAP 構文のようにコメントは導入されません。 選択したテーブル名とフィールド名で大文字と小文字が区別されるかどうかを知る必要があります。 データベース.
ネイティブ SQL ステートメントでは、ホスト変数を使用してデータがデータベーステーブルと ABAP プログラムの間で転送されます。 これらは ABAP プログラムで宣言され、ネイティブ SQL ステートメントの前にコロン (:) が付けられます。 基本構造をホスト変数として使用できます。 例外的に、INTO 句内の構造体は、そのすべてのフィールドが個別にリストされているかのように扱われます。
Open SQL と同様に、ENDEXEC ステートメントの後に、SY-DBCNT には処理された行数が含まれます。 ほとんどの場合、SY-SUBRC には ENDEXEC ステートメントの後に値 0 が含まれます。
オープン SQL – パフォーマンス ルール
SQL のパフォーマンス、ひいては ABAP プログラムのパフォーマンスを向上させるには、次のルールに注意する必要があります。
結果セットを小さく保つ
- where 句の使用
- データベースから XNUMX つのレコードだけが必要な場合は、可能な限り SELECT SINGLE を使用してください。
転送されるデータ量を最小限に抑える
- 行数を制限する
- テーブルから特定のフィールドのみが必要な場合は、SELECT を使用します。 INTO … ステートメント
- 列数を制限する
- 集計関数を使用する
データ転送の数を最小限に抑える
- ネストされた選択ループを避ける
- 別のオプションは、SELECT .. FOR ALL ENTRIES ステートメントを使用することです。 多くの場合、このステートメントは、内部テーブルの LOOP 中に多数の SELECT ステートメントまたは SELECT SINGLE ステートメントを実行するよりもはるかに効率的です。
- ディクショナリ ビューを使用する
- FROM 句で結合を使用する
- where 句でサブクエリを使用する
検索オーバーヘッドを最小限に抑える
- where 句でインデックス フィールドを使用する
- データベースにアクセスするときは、常に正しいインデックスが使用されていることを確認してください。
データベースの負荷を軽減する
- Bufferる
- 論理データベース
- データベースへの繰り返しアクセスを避ける
内部テーブルを使用して、 Buffer 射撃記録
- 同じ SELECT を複数回実行する (つまり重複した選択が発生する) ことを避けるために、タイプ HASHED の内部テーブルを使用してパフォーマンスを向上させることができます。