如何在APEX中创建显示列值的成功提示消息
问题:Oracle Apex中迁移选中行后,如何显示包含实际姓名的成功提示?
我拥有如下数据表:
| id | first_name | last_name |
|---|---|---|
| 1 | Harry | Potter |
| 2 | Hermione | Granger |
| 3 | Ron | Weasley |
我创建了按钮和对应的处理流程,用于删除勾选的行并迁移至另一表,执行代码如下:
INSERT INTO target_table (PK_1, first_name, last_name) SELECT PK, first_name, last_name FROM source_table WHERE PK IN (SELECT column_value FROM apex_string.split(:P3_SELECTED_ID,':')); DELETE FROM source_table WHERE PK IN (SELECT column_value FROM apex_string.split(:P3_SELECTED_ID,':'));
我希望迁移完成后显示类似如下格式的成功提示:
"Ron已成功移至另一个表"
但我在Process的Identification页签设置的成功消息first_name was successfully moved to another table无法显示选中行的实际姓名,请问该如何解决?
解决方案
方法一:通过页面项存储选中姓名,再在成功消息中引用
- 创建页面项:新增一个类型为「Text Field」的页面项(比如
P3_SELECTED_NAMES),设置为隐藏状态(无需展示给用户)。 - 添加预处理逻辑:在现有迁移SQL之前,新增一个PL/SQL处理步骤,查询选中行的姓名并拼接后存入页面项:
SELECT LISTAGG(first_name, '、') WITHIN GROUP (ORDER BY first_name) INTO :P3_SELECTED_NAMES FROM source_table WHERE PK IN (SELECT column_value FROM apex_string.split(:P3_SELECTED_ID,':'));
- 修改成功消息:在Process的Success Message中设置为:
&P3_SELECTED_NAMES.已成功移至另一个表
选中单行时会显示Ron已成功移至另一个表,选中多行时会显示Harry、Ron已成功移至另一个表。
方法二:用PL/SQL块统一处理迁移和消息设置
直接将原有的SQL处理替换为PL/SQL块,在逻辑中获取选中姓名并动态设置成功消息:
DECLARE v_selected_names VARCHAR2(1000); BEGIN -- 获取选中行的姓名并拼接 SELECT LISTAGG(first_name, '、') WITHIN GROUP (ORDER BY first_name) INTO v_selected_names FROM source_table WHERE PK IN (SELECT column_value FROM apex_string.split(:P3_SELECTED_ID,':')); -- 执行迁移操作 INSERT INTO target_table (PK_1, first_name, last_name) SELECT PK, first_name, last_name FROM source_table WHERE PK IN (SELECT column_value FROM apex_string.split(:P3_SELECTED_ID,':')); DELETE FROM source_table WHERE PK IN (SELECT column_value FROM apex_string.split(:P3_SELECTED_ID,':')); -- 动态设置成功消息 apex_util.set_success_message(v_selected_names || '已成功移至另一个表'); END;
替换后无需单独设置Process的Success Message,PL/SQL块会直接调用apex_util.set_success_message生成包含实际姓名的提示。
内容的提问来源于stack exchange,提问作者iamstilllearning
相关产品推荐
相关产品推荐

