You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在插入前为Interactive Grid列自动赋值?遇ORA-01400错误

Oracle APEX Interactive Grid 插入前设置隐藏列值问题排查

你当前的设置方式不正确,直接在前置流程中给页面项赋值的逻辑,无法将值同步到Interactive Grid(IG)的待插入行数据中,这就是为什么会出现ORA-01400空值插入错误——IG提交的行里HOSPITAL_NO依然是空的。

正确的实现方式有两种:

1. 前端JavaScript初始化新增行

通过IG的行初始化事件,在用户新增行时自动填充隐藏列值:

  • 进入IG的属性面板,找到「Advanced > JavaScript Initialization Code」
  • 填入以下代码:
function(config) {
    config.initNewRow = function(row) {
        // 从页面项获取值并赋值给新增行的对应字段
        row.HOSPITAL_NO = apex.item('P0_HOSPITAL_NO').getValue();
        row.CREATING_DATE = apex.server.formatDate(new Date(), 'YYYY-MM-DD HH24:MI:SS');
        row.CREATING_USER = apex.item('P0_USERNAME').getValue();
        row.USER_ID = apex.item('P33_USERNAME').getValue();
    };
    return config;
}

这样用户点击新增行时,隐藏列会自动被赋值,提交保存时这些值会随行数据一起传递到后台。

2. 数据库触发器自动填充

如果更倾向于后端控制,可以在目标表上创建BEFORE INSERT触发器:

CREATE OR REPLACE TRIGGER TRG_SYS_CLINIC_USERS_INS
BEFORE INSERT ON SYS_CLINIC_USERS
FOR EACH ROW
BEGIN
    -- 从APEX会话中获取页面项值,填充到新行
    :NEW.HOSPITAL_NO := V('P0_HOSPITAL_NO');
    :NEW.CREATING_DATE := SYSDATE;
    :NEW.CREATING_USER := V('P0_USERNAME');
    :NEW.USER_ID := V('P33_USERNAME');
END;
/

触发器会在插入操作执行前自动给字段赋值,无需前端额外处理。

内容的提问来源于stack exchange,提问作者Ziad Adnan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:12:38