我创建了两个表ZTR_DEPT
(主表)和ZTR_EMP
(子表)。
deptno(pk) | deptname empno(pk) | name | city | deptno(fk)
------------------------- ------------------------------------
当我通过ABAP程序将记录插入父表中没有匹配记录的子表时,它只是插入数据库而不报告任何错误。 当我手动将记录插入子表时,它确实显示错误。
出现这种差异的原因是什么?
答案 0 :(得分:1)
我不完全确定手动插入的含义,但我认为这可能意味着您使用SE16N
或SE16
这样的交易执行此操作。
当涉及到程序化插入时,我不得不担心你。即使您在数据字典(SE11
)中定义了检查字段,也绝对不会检查外键约束。数据库级别没有验证。您(可能)SE16N
中的错误是因为此事务检查应用程序级别的一致性,因此很可能检查在您正在处理的应用程序服务器上执行的ABAP代码。在这种情况下,应用程序拒绝记录而不是数据库。
因此,为了做同样的事情,您必须自己验证它,方法是使用子表的外键从主表中选择记录。如果sy-subrc
不是初始值,那么您将不会继续执行子表的INSERT
语句,而是返回错误消息,例如。