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

APEX 21.2:外部包中使用APEX_CUSTOM_AUTH函数报错求助

解决PLS-00049: bad bind variable错误的方案

问题原因

你的代码存在三个核心问题:

  1. 参数类型错误:apex_custom_auth.application_page_item_exists需要传入页面项的名称字符串,而你传入的是绑定变量:P10_ACCOUNT_CHANGES_FLAG,不符合函数参数要求。
  2. 编译阶段绑定变量检查:PL/SQL编译时会验证绑定变量有效性,若页面项不存在,:P10_ACCOUNT_CHANGES_FLAG会被判定为无效绑定变量,直接抛出PLS-00049错误。
  3. 拼写不一致:页面项实际是P10_ACCOUNT_CHANGED_FLAG,但代码中写成了P10_ACCOUNT_CHANGES_FLAG,即使逻辑正确也会误判页面项不存在。

解决方案

方案一:修正参数类型并检查存在性

将页面项名称以字符串形式传入函数,同时用字符串参数调用v()函数获取值(避免编译时绑定变量检查):

DECLARE
  l_page_item_exists BOOLEAN;
BEGIN
  -- 传入页面项名称字符串,修正拼写错误
  l_page_item_exists := apex_custom_auth.application_page_item_exists('P10_ACCOUNT_CHANGED_FLAG');

  IF l_page_item_exists THEN
    -- 用字符串参数调用v(),运行时动态查找页面项
    g_changed_flag := v('P10_ACCOUNT_CHANGED_FLAG');
  ELSE
    g_changed_flag := 'N';
  END IF;
END;

方案二:使用apex_util.get_session_state简化代码

apex_util.get_session_state支持直接设置默认值,无需提前检查页面项是否存在,一行代码即可完成需求:

g_changed_flag := apex_util.get_session_state('P10_ACCOUNT_CHANGED_FLAG', 'N');

说明:当页面项P10_ACCOUNT_CHANGED_FLAG存在时返回其值;不存在或值为空时,返回默认值'N',完全匹配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:36:30