1

我创建了两个表ZTR_DEPT(主表)和ZTR_EMP(子表)。

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

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

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

造成这种差异的原因是什么?

4

1 回答 1

1

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

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

因此,为了做同样的事情,您必须通过从主表中选择具有子表外键的记录来自己验证它。如果sy-subrc不是初始的,那么您将不会继续执行INSERT子表的语句,而是返回例如错误消息。

于 2015-01-15T06:57:59.553 回答