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

Oracle APEX 20.x交互式网格多选复选框迭代处理并插入数据至emp表技术咨询

在APEX 20.x中实现交互式网格选中行批量插入EMP表

嘿,刚好在APEX 20.x里做过类似的批量操作需求,给你梳理下具体实现步骤,完全贴合你的需求:

核心思路

交互式网格(IG)的选中状态是前端维护的,所以我们需要先通过JavaScript获取选中行的数据,再调用后端PL/SQL完成插入——既满足你逐个遍历选中行的要求,又比前端循环调用后端效率更高。

步骤1:创建触发操作的按钮

在页面上添加一个按钮(比如命名为「批量插入到EMP表」),放在IG上方或下方方便操作的位置就行。

步骤2:给按钮添加动态动作

给这个按钮绑定「单击」事件的动态动作,动作类型选「执行JavaScript代码」,粘贴下面的代码:

// 替换成你的交互式网格区域静态ID(在IG属性的「高级」标签里找)
const igRegion = apex.region("YOUR_IR_STATIC_ID");
const igGrid = igRegion.call("getViews", "grid");
const selectedRows = igGrid.model.getSelectedRecords();

// 收集选中行的firstname和lastname
const empRecords = [];
selectedRows.forEach(row => {
    const rowData = igGrid.model.getRecordData(row);
    // 注意:这里的FIRSTNAME、LASTNAME要和你IG里的列名完全一致(APEX对大小写敏感)
    empRecords.push({
        fstname: rowData.FIRSTNAME,
        lstname: rowData.LASTNAME
    });
});

// 如果有选中行,就调用后端进程
if (empRecords.length > 0) {
    apex.server.process("INSERT_TO_EMP", {
        x01: JSON.stringify(empRecords)
    }, {
        success: () => {
            apex.message.showPageSuccess("选中数据已成功插入EMP表!");
            // 可选:刷新IG或者EMP表的报表,确保数据同步
            igRegion.refresh();
        },
        error: (xhr) => {
            apex.message.showError(`插入失败:${xhr.responseText}`);
        }
    });
} else {
    apex.message.showWarning("请先选中至少一行数据哦!");
}

步骤3:创建后端AJAX处理进程

在页面的「进程」里新建一个进程,设置如下:

  • 名称:INSERT_TO_EMP(要和JS里的进程名完全一致)
  • 类型:PL/SQL代码
  • 代码:
DECLARE
    l_emp_data JSON;
    l_single_record JSON;
BEGIN
    -- 解析前端传来的JSON数据
    l_emp_data := JSON.parse(apex_application.g_x01);
    
    -- 逐个遍历选中的记录,执行插入
    FOR i IN 0 .. l_emp_data.get_size() - 1 LOOP
        l_single_record := l_emp_data.get(i);
        -- 注意:这里的字段顺序要和你的EMP表结构完全匹配!
        -- 你需求里的INSERT语句是insert into emp values (fstname,lstname),但预期输出是Lastname在前,请根据实际表结构调整
        INSERT INTO emp (firstname, lastname)
        VALUES (l_single_record.get_string('fstname'), l_single_record.get_string('lstname'));
    END LOOP;
    
    COMMIT;
EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
        -- 抛出错误让前端捕获
        raise_application_error(-20001, '插入失败:' || SQLERRM);
END;

关键注意事项

  • 一定要替换代码里的YOUR_IR_STATIC_ID为你实际的IG区域静态ID,否则无法获取到IG对象
  • 确保JS里的列名(FIRSTNAME/LASTNAME)和你IG中配置的列名完全一致
  • 调整PL/SQL里的INSERT语句字段顺序,匹配你的EMP表实际结构——比如你预期输出是Lastname在前,那可能需要写成INSERT INTO emp (lastname, firstname) VALUES (...)

这样操作后,当你选中IG里的多行并点击按钮,就能把选中行的firstname和lastname批量插入到EMP表,最终得到你想要的结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 20:37:26