SAP ABAP でのオープン SQL とネイティブ SQL

このチュートリアルの目的は、あなたに教えることではありません SQL またはデータベースの概念を説明しますが、ABAP の SQL の多様性を紹介します。

ABAP/4 プログラミング言語では、XNUMX 種類の SQL が使用されます。

  1. ネイティブSQL
  2. SQLを開く。

Open SQL を使用すると、R/3 システムが使用しているデータベース プラットフォームに関係なく、ABAP ディクショナリで宣言されたデータベース テーブルにアクセスできます。

ネイティブ SQL を使用すると、ABAP/4 プログラムでデータベース固有の SQL ステートメントを使用できます。 これは、ABAP ディクショナリによって管理されないデータベーステーブルを使用できるため、R/3 システムの一部ではないデータを統合できることを意味します。

Open SQL は、R/3 システムの中央データベースで操作を実行する一連の ABAP ステートメントで構成されます。 操作の結果とエラー メッセージは、使用しているデータベース システムには依存しません。 したがって、Open SQL は、SAP がサポートするすべてのデータベース システムに統一された構文とセマンティクスを提供します。 Open SQL ステートメントのみを使用する ABAP プログラムは、使用しているデータベース システムに関係なく、どの R/3 システムでも動作します。 オープン 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 ステートメントは次の内容を満たしますwing リターンコードを含む XNUMX つのシステムフィールド。

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 プログラムのパフォーマンスを向上させるには、次のことに注意する必要があります。wing ルール-

結果セットを小さく保つ

  • where 句の使用
  • データベースから XNUMX つのレコードだけが必要な場合は、可能な限り SELECT SINGLE を使用してください。

転送されるデータ量を最小限に抑える

  • 行数を制限する
  • テーブルから特定のフィールドのみが必要な場合は、SELECT を使用します。 INTO … ステートメント
  • 列数を制限する
  • 集計関数を使用する

データ転送の数を最小限に抑える

  • ネストされた選択ループを避ける
  • 別のオプションは、SELECT .. FOR ALL ENTRIES ステートメントを使用することです。 多くの場合、このステートメントは、内部テーブルの LOOP 中に多数の SELECT ステートメントまたは SELECT SINGLE ステートメントを実行するよりもはるかに効率的です。
  • ディクショナリ ビューを使用する
  • FROM 句で結合を使用する
  • where 句でサブクエリを使用する

検索オーバーヘッドを最小限に抑える

  • where 句でインデックス フィールドを使用する
  • データベースにアクセスするときは、常に正しいインデックスが使用されていることを確認してください。

データベースの負荷を軽減する

  • バッファリング
  • 論理データベース
  • データベースへの繰り返しアクセスを避ける

内部テーブルを使用してレコードをバッファリングする

  • 同じ SELECT を複数回実行する (つまり重複した選択が発生する) ことを避けるために、タイプ HASHED の内部テーブルを使用してパフォーマンスを向上させることができます。