Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle Apex:交互式网格-ORA-01400_Oracle_Oracle Apex - Fatal编程技术网

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

Oracle Apex:交互式网格-ORA-01400,oracle,oracle-apex,Oracle,Oracle Apex,我有一个表/IG,其中主键通过“插入前”触发器中的序列填充。当我想创建新行时,我得到ORA-01400,该空值不能填充到字段中 老实说,我使用该示例应用程序进行了检查,所有设置/属性似乎都是以相同的方式设置的;ID字段被标记为主列并被隐藏,该过程看起来也很好。当我手动将数据插入到表中,然后更新/删除时,进程正在正确地处理行 类型:交互式网格-自动行处理(DML) (设置)->目标类型=区域源 防止丢失更新,将Insert设置为“是”后锁定行并返回主键 可编辑区域是我的交互式网格区域 Apex版本

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

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

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

我尝试使用PL/SQL手动处理交互式网格数据。不幸的是,使用rowid的更新似乎不起作用

由APEX提供帮助

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


非常感谢您的帮助。谢谢。

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


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

您提到表的主键是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,请不要忘记检查这些列-此列不能在流程中使用。
我希望它会有用,祝你好运。

我可以推荐一下吗 根据我的经验,你有两个选择,我应该使用。 在保存之前创建一个进程,将其序列设置为一个较小的数字。该进程检查:ID是否为null,如果为null,则填充它。 或者您可以在创建过程中填充ID。在案例C中,如果您使用序列填充ID,则插入ID值ID_SEQ.NEXTVAL,或者您可以在开始案例填充之前定义其值


我希望这有帮助

感谢您的快速响应。我禁用了验证,插入成功。现在,当我尝试更新一行时,我收到错误消息:ORA-01403:未找到数据。有关如何解决此问题的任何建议。谢谢。不客气。从未找到数据开始:启用调试模式,运行页面,查看调试信息-它将向您显示哪个查询失败d、 然后您就可以修复它了(希望如此)。现在出现了另一个问题。由触发器填充的ID不会出现在其他行中。列ID保持为空(-)。如何将创建的ID填充到其他行中。非常感谢。以表格形式(或其改进-交互式网格)-一行=一个ID。为多行共享同一ID没有意义,是吗?如果你想这样做,那么-我相信-你应该摆脱数据库触发器,在Apex中创建一个进程,在开始时选择ID值,然后-在循环中-为所有行设置相同的ID。这里的关键字是“Apex\u application.g\u f01”数组。与默认的Apex处理相比,这相当复杂。据我所知,“Apex_application.g_f01”数组已被PL/SQL所取代(见上图)。关于如何实现这一点,有什么建议吗?我正在努力解决rowid问题。谢谢。