【问题标题】:Oracle Apex: Interactive Grid - ORA-01400Oracle Apex:交互式网格 - ORA-01400
【发布时间】:2019-01-26 08:33:54
【问题描述】:

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

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

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

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

获得 APEX 的帮助。

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

感谢任何帮助。谢谢。

【问题讨论】:

    标签: oracle oracle-apex


    【解决方案1】:

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

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

    【讨论】:

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

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

    【讨论】:

      【解决方案3】:

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

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2020-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-11
        • 2021-09-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多