Oracle Apex:交互式网格-ORA-01400

时间:2018-08-20 08:35:38

标签: oracle oracle-apex

我有一个表/ IG,其中的主键是通过“插入之前”触发器中的序列填充的。当我要创建新行时,我收到ORA-01400,该值不能填充为空值。

说实话,我检查了该示例应用程序,所有设置/属性似乎都以相同的方式设置; ID字段被标记为主要列并且被隐藏,过程看起来也不错。当我手动将数据插入表中,然后更新/删除过程正在正确处理行时。

类型:交互式网格-自动行处理(DML (设置)->目标类型=区域来源 在插入后将“防止丢失更新,锁定行和返回主键”设置为“是” 可编辑区域是我的交互式网格区域 Apex版本为5.1

我尝试使用PL / SQL手动处理Interactive Grid数据。不幸的是,使用rowid进行的更新似乎无效。

获得APEX的帮助。 enter image description here

有什么建议我可能做错了吗?

感谢您的帮助。谢谢。

3 个答案:

答案 0 :(得分:1)

检查是否存在验证,该验证表明主键列不能为NULL。如果是这样,请禁用(通过将条件设置为“从不”)或将其删除,然后重试。

显然,在数据库触发之前验证会触发,并引发错误。

答案 1 :(得分:0)

您提到表的主键是ID,如果您使用apex帮助中的示例过程,则将更新和删除限制为:ROWID-这可能是找不到数据的问题。

通过用简单的错误消息调试它,我解决了一次在网格上保存和执行其他行操作的问题,向我显示了传递给该过程的实际值。

在代码的最开始使用此代码,您将看到传递给过程的内容。它可以帮助您找到问题所在。

apex_error.add_error ( p_message => 'ENAME: ' ||:ENAME ||
                                  ' ,DEPTNO: '||:DEPTNO||
                                    'etc...'
                     , p_display_location => apex_error.c_inline_in_notification );

如果您没有将列设置为QUERY ONLY = YES,也不要忘记检查这些列-此列不能在处理中使用。 我希望它会有用,祝你好运。

答案 2 :(得分:0)

我可能会推荐 以我的经验,您有两个应该可以使用的选择。 进行保存之前的处理,因此将其顺序设置为较小的数字。然后,该过程检查:ID是否为null,如果存在,则填充它。 或者您可以在创建过程中填充ID。如果要使用序列填充ID,请在CASE C中插入ID值ID_SEQ.NEXTVAL,或者可以在开始CASE填充之前定义其值。

我希望这对您有帮助