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
相关产品推荐
相关产品推荐

