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

Oracle Apex循环批量设置Session State失效,请求排查原因

问题原因及修复方案

你的代码存在多个编译/运行时错误,导致APEX_UTIL.SET_SESSION_STATE根本没机会正常执行,具体问题如下:

  • 未声明变量:代码中使用了v_col1、v_col2但未在DECLARE部分声明,编译阶段就会报错,代码无法运行。
  • SELECT INTO无过滤条件:每次循环执行SELECT ... INTO时,会返回my_table的所有行,触发TOO_MANY_ROWS异常,循环直接终止,后续的SET_SESSION_STATE不会执行。
  • 变量赋值错误:v_text := column1;中的column1是未定义的变量,你实际查询的是text_col并赋值给v_col1,这里应该写v_text := v_col1;。
  • 未匹配循环变量与数据行:循环变量v_initial是1到100,但查询没有关联id_number = v_initial,无法对应每行数据给对应的页面项赋值。

修复后的代码示例

declare
    v_text varchar2(100);
    v_col1 varchar2(100); -- 声明查询需要的变量
    v_col2 number;
BEGIN
    FOR v_initial IN 1..100 LOOP
        -- 通过id_number匹配循环变量,确保每次取对应行
        SELECT text_col, id_number
        INTO v_col1, v_col2
        FROM my_table
        WHERE id_number = v_initial; -- 关键:添加过滤条件

        v_text := v_col1; -- 修正赋值变量

        APEX_UTIL.SET_SESSION_STATE('P1_ITEM_NUMBER_'|| v_initial, v_text);
    END LOOP;
END;

额外提示:如果my_table中id_number不是连续的1到100,建议改用游标遍历,避免出现NO_DATA_FOUND异常,示例如下:

declare
    v_text varchar2(100);
BEGIN
    -- 遍历所有id_number有序的行
    FOR rec IN (SELECT text_col, id_number FROM my_table ORDER BY id_number) LOOP
        v_text := rec.text_col;
        APEX_UTIL.SET_SESSION_STATE('P1_ITEM_NUMBER_'|| rec.id_number, v_text);
    END LOOP;
END;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:15:00