Abap 主记录中没有匹配记录时插入的子记录

Abap 主记录中没有匹配记录时插入的子记录,abap,opensql,Abap,Opensql,我创建了两个表ZTR\u DEPT(主表)和ZTR\u EMP(子表) 当我通过ABAP程序将一条记录插入到父表中没有匹配记录的子表中时,它只是插入到数据库中,而不报告任何错误。 当我手动将记录插入子表时,它确实显示错误 出现这种差异的原因是什么?我不完全确定您所说的手动插入是什么意思,但我认为这可能意味着您可以使用类似于SE16N或SE16的事务来执行此操作 当涉及到程序插入时,我不得不让你担心。即使您在数据字典(SE11)中定义了检查字段,也绝对不会检查外键约束。在数据库级别上没有验证。您在

我创建了两个表
ZTR\u DEPT
(主表)和
ZTR\u EMP
(子表)

当我通过ABAP程序将一条记录插入到父表中没有匹配记录的子表中时,它只是插入到数据库中,而不报告任何错误。 当我手动将记录插入子表时,它确实显示错误


出现这种差异的原因是什么?

我不完全确定您所说的手动插入是什么意思,但我认为这可能意味着您可以使用类似于
SE16N
SE16
的事务来执行此操作

当涉及到程序插入时,我不得不让你担心。即使您在数据字典(
SE11
)中定义了检查字段,也绝对不会检查外键约束。在数据库级别上没有验证。您在(可能)
SE16N
中遇到的错误是因为此事务检查应用程序级别的一致性,因此很有可能在您正在处理的应用程序服务器上执行ABAP代码检查。在这种情况下,拒绝记录的是应用程序,而不是数据库


因此,为了做到这一点,您必须通过使用子表的外键从主表中选择记录来验证它。如果
sy subrc
不是首字母,则您不会继续对子表执行
INSERT
语句,而是返回错误消息,例如。

…问题是…?在哪个事务中?
deptno(pk)    |  deptname                      
-------------------------             

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