APEX 21.2:外部包中使用APEX_CUSTOM_AUTH函数报错求助
解决PLS-00049: bad bind variable错误的方案
问题原因
你的代码存在三个核心问题:
- 参数类型错误:
apex_custom_auth.application_page_item_exists需要传入页面项的名称字符串,而你传入的是绑定变量:P10_ACCOUNT_CHANGES_FLAG,不符合函数参数要求。 - 编译阶段绑定变量检查:PL/SQL编译时会验证绑定变量有效性,若页面项不存在,
:P10_ACCOUNT_CHANGES_FLAG会被判定为无效绑定变量,直接抛出PLS-00049错误。 - 拼写不一致:页面项实际是
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
相关产品推荐
相关产品推荐

