Oracle Apex交互式网格执行PLSQL后刷新状态列可行性咨询
需求可行性及实现方案
这个需求完全可行,以下是具体实现步骤:
1. 存储PL/SQL包的执行结果
- 在PL/SQL包执行过程中,要把每条记录的执行状态(成功/失败)和原IG记录的唯一标识(比如主键ID)绑定,可将结果存入Apex集合或临时表。集合需包含原记录唯一ID和对应的Status值。
- 示例PL/SQL逻辑片段:
-- 假设COL_IG_DATA是存储传入IG记录的集合,COL_EXEC_RESULT用于存储执行结果 DECLARE CURSOR c_ig_records IS SELECT col1, col2, id FROM apex_collections WHERE collection_name = 'COL_IG_DATA'; BEGIN -- 先清空旧结果,避免干扰 apex_collection.delete_collection(p_collection_name => 'COL_EXEC_RESULT'); FOR rec IN c_ig_records LOOP BEGIN -- 调用业务包逻辑 your_business_package.process_record(rec.col1, rec.col2); -- 执行成功,写入结果集合 apex_collection.add_member( p_collection_name => 'COL_EXEC_RESULT', p_c001 => rec.id, -- 绑定原记录唯一ID p_c002 => '成功' ); EXCEPTION WHEN OTHERS THEN -- 执行失败,写入结果集合 apex_collection.add_member( p_collection_name => 'COL_EXEC_RESULT', p_c001 => rec.id, p_c002 => '失败' ); END; END LOOP; END;
2. 配置Interactive Grid的数据源
- 调整IG的SQL查询,关联执行结果集合动态获取Status值。示例查询:
SELECT t.id, t.col1, t.col2, -- 关联结果集合,无结果则显示空 NVL((SELECT c002 FROM apex_collections WHERE collection_name = 'COL_EXEC_RESULT' AND c001 = t.id), '') AS status FROM your_source_table t -- 若IG基于集合,替换为对应的集合查询语句
3. 实现IG的刷新与状态更新
- 若用页面按钮触发:先配置执行PL/SQL包的服务器端流程,再添加刷新Interactive Grid区域的动作,执行完包后自动刷新IG,新状态会同步显示。
- 若需前端灵活控制,可使用Apex JavaScript API:
// 调用服务器端PL/SQL流程后刷新IG apex.server.process( 'PROCESS_IG_RECORDS', // 对应页面PL/SQL流程的静态ID {}, { success: function() { // 获取IG组件并刷新数据 const igWidget = apex.region('YOUR_IG_REGION_STATIC_ID').widget(); igWidget.interactiveGrid('getViews','grid').model.fetch(); } } );
注意事项
- 要保证原IG记录有唯一标识(主键),否则无法准确关联执行结果。
- 每次执行前清空结果集合,避免旧数据残留影响状态显示。
内容的提问来源于stack exchange,提问作者user3436905
相关产品推荐
相关产品推荐

