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

从localStorage获取P_ITEM_1值用于SQL查询时返回null,如何解决?

解决方案

问题核心:服务器端计算项在页面渲染前就已执行,此时localStorage的客户端值还未传递到服务器,因此:P_ITEM_1在服务器端为空值,导致查询返回null;而控制台调用$v(P_ITEM_1)是在客户端完成值设置后执行,所以能获取正确结果。

以下是可行的解决方法:

方法1:动态操作结合服务器端PL/SQL(推荐,支持复杂SQL查询)

  • 步骤:
    1. 创建一个动态操作,触发条件选择「页面加载完成(After Page Load)」
    2. 添加第一个动作:执行JavaScript代码,内容为:
      $s('P_ITEM_1', localStorage.getItem('AA:BB'));
      
      作用:将localStorage的值同步到客户端的P_ITEM_1项
    3. 添加第二个动作:执行服务器端代码,类型选「PL/SQL」,代码示例:
      SELECT a INTO :P_TARGET_ITEM FROM dual WHERE a = :P_ITEM_1;
      
      (将P_TARGET_ITEM替换为你需要设置值的目标项)
    4. 在该服务器端代码动作的「提交页面项」设置中,添加P_ITEM_1,确保服务器能接收客户端传递的该项值

方法2:改用客户端计算项(仅适用于简单逻辑)

如果你的SQL查询逻辑简单(比如仅需匹配值返回),可将目标项改为客户端计算:

  • 步骤:
    1. 编辑目标项,将「计算类型」改为「JavaScript表达式」
    2. 计算代码示例:
      const storedValue = localStorage.getItem('AA:BB');
      // 若查询逻辑是返回匹配的a值,直接返回storedValue即可;复杂逻辑请使用方法1
      return storedValue;
      

方法3:AJAX提交值+刷新计算项

  • 步骤:
    1. 在「页面加载时执行」的JavaScript区域添加代码:
      const storedValue = localStorage.getItem('AA:BB');
      // 调用AJAX回调将值设置到服务器会话的P_ITEM_1
      apex.server.process('SET_P_ITEM_1', {
          x01: storedValue
      }, {
          success: function() {
              // 刷新依赖P_ITEM_1的计算项
              apex.item('P_TARGET_ITEM').refresh();
          }
      });
      
    2. 在共享组件中创建AJAX回调进程,命名为SET_P_ITEM_1,PL/SQL代码:
      apex_util.set_session_state('P_ITEM_1', apex_application.g_x01);
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:12:23