普段は「建設現場でレンガを動かす」仕事をしていて、基本的なスキルを意識することがほとんどないのですが、やることが無いので手に取ってレビューしてみました!
実際、プロジェクトで使用されることは非常に少ないため、プログラミングを学ぶ場合は、まずフレームワークを学び、その後詳細を学ぶ必要があります。、詳細を学ぶ必要が多すぎるためです。
JAVAをやっている友人は、現在プロジェクトでは基本的にMybtisを使用しており、初期の頃はHibernateフレームワークが使用されていましたが、現在ではデータベースを直接操作するためにJDBCが使用されることはほとんどありません。
ABAP ドメインで定義される CRUD には特別なことは何もなく、SQL ステートメントとほぼ同じです。
もしあなたが「CRUD」スタイルを使ったら、あなたが人生を終えるとき、友達はどう思うでしょうか?
1 SQLを開く
(1) SY-SUBRC、SQL操作が成功したかどうか
(2) SY-DBCNT、行数に影響します
2 データの読み取り
SELECT <result> FROM <source> [INTO <target>] [WHERE <condition>]
[GROUP BY <fields>] [ORDER BY <sort_order>].
実際のケースでは、文法ではなく、例を見てください。
SELECT
mara~zwlcms,
mara~matnr, "物料描述
mara~mtart, "物料类型
mara~meins, "单位
marc~werks,
marc~ekgrp,
marc~dismm,
marc~dispo,
marc~sfcpf,
marc~fevor,
mvke~vkorg, "销售组织
mbew~vprsv, "价格控制
mbew~mlast "物料价格确定: 控制
INTO CORRESPONDING FIELDS OF TABLE @gt_data
FROM mara
LEFT JOIN marc ON marc~matnr = mara~matnr
LEFT JOIN mvke ON mvke~matnr = mara~matnr AND mvke~dwerk = marc~werks
LEFT JOIN mbew ON mbew~matnr = mara~matnr AND mbew~bwkey = marc~werks
WHERE
mara~matnr IN @so_matnr
AND marc~werks IN @so_werks
.
選択結果の定義 SELECT
(1) 複数行のすべてのデータを選択します: SELECT [DISTINCT] * ......ENDSELECT。
(2) 単一行内のすべてのデータを選択します: SELECT SINGLE [FOR UPDATE] * ...... WHERE <条件> ......
(3) 指定した列のデータをすべて選択します: SELECT [SINGLE [FOR UPDATE]] [DISTINCT] <s1><s2> .....
データテーブルをFROMから指定
(1) プログラムでデータベース テーブルを指定します。... FROM <dbtab> [CLIENT SPECIFIED] [BYPASSING BUFFER]
[ UP TO <n> ROWS ]....
CLIENT SPECIFIED オプションは自動グループ処理をオフにするために使用され、BYPASSING BUFFER オプションを使用すると、
SAP テーブル バッファを読み取らずにデータベースを直接読み取ることができます。
(2) 実行時にデータベーステーブルを指定する
......FROM (<dbtabname>) [クライアント指定] [バッファをバイパス]
[最大 <n> 行].. INTO <ターゲット> .....
この形式の FROM 句は、INTO 句と一緒にのみ使用できます。
対象領域を指定 INTO
(1) ワークスペースにデータを読み込みます SELECT ... INTO <wa> .....
(2) データを内部テーブル SELECT .....INTO TABLE <itab> に読み込みます。
(3)事前定義されたパッケージ サイズでデータを内部テーブルに読み込みます。 SELECT * .....INTO TABLE <itab> PACKAGE SIZE <n>....
(4) 内部テーブル SELECT ..... APPENDING TABLE <itab>....にデータ行を追加します。
(5) データをコンポーネントごとに読み込む
<wa> の対応するフィールドに ... を選択します .....
テーブル <itab> の対応するフィールドに ... を選択します .....
SELECT ... テーブル <itab> の対応するフィールドを追加 ......
読み取り行を選択 WHERE
(1) プログラム内で行選択の条件を指定.... WHERE <条件>....
(2) 論理リンク演算子を使用して条件を結合する
3 データを追加する
単一行 INSERT INTO <dbtab> [CLIENT SPECIFIED] VALUES <wa> を追加します。
複数の行を追加する
テーブル <itab> [重複キーの受け入れ] から <dbtab> [クライアント指定] を挿入します。
4 データを更新する
単一行を更新する
UPDATE <dbtab> [CLIENT SPECIFIED] FROM <wa>。ワークスペース <wa> の内容は、
<wa> と同じ主キーを持つデータベース テーブル <dbtab> の行を上書きします。
ワークスペース <wa> が指定されていません。
ただし、テーブル ワークスペース <dbtab> の内容は、同じ主キーを持つデータベース テーブルの行を上書きします。
<dbtab> を更新します [クライアント指定]。
複数の行を更新する
UPDATE <dbtab> [クライアント指定] SET <S1> ..<Sn> [WHERE <条件>]。
内部テーブルを使用して複数の行を更新する
テーブル <itab> から <dbtab> [クライアント指定] を更新します。
UPDATE (<dbtabname>) [クライアント指定] テーブル <itab> から。
5 データの追加または変更
単一行を挿入
<dbtab> [クライアント指定] [<wa> から] を変更します。
MODIFY (<dbtabname>) [クライアント指定] [<wa> から]。
複数の行を挿入する
テーブル <itab> から <dbtab> [クライアント指定] を変更します。
テーブル <itab> から (<dbtabname>) [クライアント指定] を変更します。
6 データを削除する
一行削除
<wa> から <dbtab> [クライアント指定] を削除します。
<dbtab> [クライアント指定] を削除します。
複数行を削除する
DELETE FROM <dbtab> [クライアント指定] WHERE <条件>。
DELETE FROM (<dbtabname>) [クライアント指定] WHERE <条件>。
内部テーブルを使用して複数の行を削除する
<dbtab> [クライアント指定] をテーブル <itab> から削除します。
テーブル <itab> から (<dbtabname>) [クライアント指定] を削除します。
7 カーソルを使用してデータを読み取り、
ORACLE カーソルによく似ています
カーソルを開く
カーソルを開く [ホールド] <c> FOR SELECT ..... [WHERE <条件>]。
カーソルでデータを読み取る
次のカーソル <c> を <ターゲット> にフェッチします。
カーソルを閉じる
カーソル<c>を閉じます。
1) COMMIT WORK または ROLLBACK WORK ステートメントを実行するとき、
2) 独自の SQL データベースのコミットまたはキャンセルを実行するとき、
3) 画面を変更するとき、 4) リモート関数呼び出しを実行するとき、カーソルは自動的に
閉じられます。
OPEN CURSOR ステートメントで WITH HOLD オプションを使用すると、
独自の SQL でのデータベース コミットによってカーソルは閉じられません。
8つのデータクラスター
データオブジェクトをメモリに保存する
<f1> [FROM <g1>] <f2> [FROM <g2>] ... メモリ ID <key> にエクスポートします。
メモリからデータオブジェクトを読み取る
IMPORT <f1> [TO <g1>] <f2> [TO <g2>] ... メモリ ID <key> から。
メモリ内のデータクラスターを削除する
空きメモリ [ID <キー>]。
ID <key> が追加されていない場合、このステートメントはメモリ全体を削除します。
EXPORT を使用して以前に ABAP/4 メモリに保存されたすべてのデータ クラスターが含まれます。
ID <key> を追加した後、ステートメントはこの名前で指定されたデータ クラスターのみを削除します。
メモリ全体を削除すると、システム ルーチンのメモリ内容が失われるため、ID を付加した FREE MEMORY ステートメントのみを使用する必要があります。