1

ZTR_DEPT(マスターテーブル) とZTR_EMP(子テーブル)の 2 つのテーブルを作成しました。

deptno(pk)    |  deptname                      
-------------------------             

empno(pk) | name | city | deptno(fk)    
------------------------------------  

ABAPプログラムを介して親テーブルに一致するレコードがない子テーブルにレコードを挿入すると、エラーを報告せずにデータベースに挿入されます。レコードを子テーブルに手動で挿入すると、エラーが表示されます。

このような不一致の理由は何ですか?

4

1 に答える 1

1

手動挿入の意味がよくわかりませんが、SE16Nまたはのようなトランザクションでこれを行うことを意味する可能性があると思いますSE16

プログラムによる挿入に関しては、心配する必要があります。データ ディクショナリ ( ) でチェック フィールドを定義した場合でも、外部キー制約はまったくチェックされませんSE11。データベース レベルでの検証はありません。(おそらく) エラーが発生するのSE16Nは、このトランザクションがアプリケーション レベルで整合性をチェックするためです。そのため、作業中のアプリケーション サーバーで実行される ABAP コードでチェックが行われる可能性が高くなります。この場合、レコードを拒否するのはアプリケーションであり、データベースではありません。

したがって、同じことを行うには、子テーブルの外部キーを持つマスター テーブルからレコードを選択して、自分で検証する必要があります。sy-subrcが初期化されていない場合INSERT、子テーブルのステートメントに進まず、代わりにたとえばエラー メッセージを返します。

于 2015-01-15T06:57:59.553 に答える