在主服务器中没有匹配的记录时插入子记录

时间:2015-01-14 12:51:37

标签: database sap abap

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

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

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

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

1 个答案:

答案 0 :(得分:1)

我不完全确定手动插入的含义,但我认为这可能意味着您使用SE16NSE16这样的交易执行此操作。

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

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