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

Oracle Apex为每位员工实现交互式网格列自动递增

Oracle Apex交互式网格实现按员工单独递增EMP_SEQ的方案

第一步:将EMP_SEQ设置为只读

  • 进入交互式网格的列配置界面,选中EMP_SEQ列
  • 在「安全性」选项区域,将「可编辑」设置为「否」,禁止用户手动修改该列值

第二步:实现选择员工后自动生成序列值

提供两种实用实现方式,可根据需求选择:

方式一:前端JavaScript实时计算(选完员工即刻生成值)

  1. 打开交互式网格的「高级」设置,找到「JavaScript初始化代码」
  2. 粘贴以下代码,逻辑为监听新增行及员工姓名选择事件,调用后台Ajax获取当前员工的最大序列值,加1后自动填充到EMP_SEQ:
function(config) {
    var $ = apex.jQuery;
    var grid = config.grid;

    // 监听新增行动作
    grid.on("rowadd", function(event, data) {
        var model = grid.model;
        var newRow = data.record;
        
        // 监听员工姓名选择变化
        model.on("change:EMP_NAME", function(model, empName, options) {
            if (empName && options.record === newRow) {
                // 调用后台Ajax进程获取最大序列值
                apex.server.process("GET_MAX_EMP_SEQ", {
                    x01: empName
                }, {
                    success: function(maxSeq) {
                        var nextSeq = parseInt(maxSeq) + 1;
                        // 给当前行的EMP_SEQ赋值
                        model.set(newRow, "EMP_SEQ", nextSeq);
                    }
                });
            }
        });
    });

    return config;
}
  1. 创建对应Ajax进程:
    • 进入「共享组件」→「Ajax进程」→「创建」,命名为GET_MAX_EMP_SEQ
    • 在「PL/SQL代码」中写入(替换你的表名为实际表名称):
DECLARE
    l_max_seq NUMBER;
BEGIN
    SELECT NVL(MAX(EMP_SEQ), 0) INTO l_max_seq
    FROM 你的表名
    WHERE EMP_NAME = apex_application.g_x01;
    
    HTP.P(l_max_seq);
END;
  • 将进程「授权方案」设置为「无限制」,确保正常调用权限

方式二:数据库触发器(更安全,防止前端数据篡改)

若担心前端逻辑被绕过,推荐在数据库层实现自动生成:

  1. 确保EMP_SEQ列允许空值(新增行时无需手动填充,由触发器自动补全)
  2. 创建BEFORE INSERT触发器(替换你的表名为实际表名称):
CREATE OR REPLACE TRIGGER TRG_EMP_SEQ_AUTO_INCREMENT
BEFORE INSERT ON 你的表名
FOR EACH ROW
DECLARE
    l_next_seq NUMBER;
BEGIN
    SELECT NVL(MAX(EMP_SEQ), 0) + 1 INTO l_next_seq
    FROM 你的表名
    WHERE EMP_NAME = :NEW.EMP_NAME;
    
    :NEW.EMP_SEQ := l_next_seq;
END;
/

该方式下,前端只需正确选择员工姓名,保存数据时触发器会自动计算并填充EMP_SEQ值,无需额外前端逻辑。

第三步:测试验证

  • 打开交互式网格页面,点击新增行
  • 从EMP_NAME下拉列表选择员工(如John),检查EMP_SEQ是否自动填充为3;选择Mary则填充为4
  • 保存新增行后,再次新增同一员工的行,确认序列值持续递增即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:43:19