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

Oracle APEX动态调用包存储过程报PLS-00302错误求助

问题:APEX动态动作调用存储过程提示PLS-00302错误

页面有一个值变更触发的动态动作,其他关联流程正常运行。新增调用包hri.pkg_apex_eab中存储过程get_emp_info的动作后,APEX验证时抛出错误:

ORA-06550: line 11, column 19: PLS-00302: component 'GET_EMP_INFO' must be declared

但在Toad中直接执行该存储过程可得到预期输出,因此判断存储过程本身无问题。以下是动态动作中执行的PL/SQL代码:

DECLARE
    l_job_code varchar(200);
    l_job_title varchar(200);
    l_position_number varchar(200);
    l_position_suffix varchar(200);
    l_org_number varchar(200);
    l_org_name varchar(200);

BEGIN
    --call procedure in package and directly assign output to page items (and some vars)
    hri.pkg_apex_eab.get_emp_info (
        in_ee                               => :P2_EE,
        out_emp_employee_number             => :P2_EE_EMPLOYEE_NUMBER,
        out_emp_full_name                   => :P2_EE_FULL_NAME,
        out_emp_email_address               => :P2_EE_EMAIL_ADDRESS,
        out_emp_user_name                   => :P2_EE_USER_NAME,
        out_emp_job_classification_code     => l_job_code,
        out_emp_job_classification_title    => l_job_title,
        out_emp_position_number             => l_position_number,
        out_emp_position_suffix             => l_position_suffix,
        out_emp_working_title               => l_position_suffix,
        out_emp_org_number                  => l_org_number,
        out_emp_org_name                    => l_org_name,
        out_supv_employee_number            => :P2_EE_SUPV_EID,
        out_supv_full_name                  => :P2_EE_SUPV_FULLNAME,
        out_supv_user_name                  => :P2_EE_SUPV_USERNAME,
        out_supv_email_address              => :P2_EE_SUPV_EMAIL);

        --combine some return vars and assign to page items
        :P2_EE_JOB := l_job_code || '.' || l_job_title;
        :P2_EE_POSITION := l_position_number || '.' || l_position_suffix || '.' || l_working_title;
        :P2_EE_ORG := '[' || l_org_number || '] ' || l_org_name;

        --set session values
        apex_util.set_session_state('P2_EE_EMPLOYEE_NUMBER', out_emp_employee_number);
        apex_util.set_session_state('P2_EE_FULL_NAME', out_emp_full_name);
        apex_util.set_session_state('P2_EE_EMAIL_ADDRESS', out_emp_email_address);
        apex_util.set_session_state('P2_EE_USER_NAME', out_emp_user_name);
        apex_util.set_session_state('P2_EE_JOB', l_job_code || '.' || l_job_title);
        apex_util.set_session_state('P2_EE_POSITION', l_position_number || '.' || l_position_suffix || '.' || l_working_title);
        apex_util.set_session_state('P2_EE_ORG', '[' || l_org_number || '] ' || l_org_name);
        apex_util.set_session_state('P2_EE_SUPV_FULLNAME', out_supv_full_name);
        --apex_util.set_session_state('P2_EE_SUPV_EID', '[' || l_supv_eid || '] ' || l_supv_eid);
        apex_util.set_session_state('P2_EE_SUPV_EMAIL', out_supv_email_address);
        apex_util.set_session_state('P2_EE_SUPV_USERNAME', out_supv_user_name);

END;

原本期望通过该调用获取数据并赋值至其他页面项,却触发上述错误。

排查方向

  • 权限缺失:APEX应用运行时使用的数据库账号(如APEX_PUBLIC_USER或自定义解析账号)没有hri.pkg_apex_eab包的执行权限。Toad使用的账号可能有权限,但APEX账号没有,需执行授权语句:
    GRANT EXECUTE ON hri.pkg_apex_eab TO [APEX运行账号];
    
  • 大小写不匹配:如果包或存储过程创建时使用双引号指定了大小写,调用时必须严格匹配。检查ALL_OBJECTS视图中对象的实际名称:
    SELECT OBJECT_NAME, STATUS FROM ALL_OBJECTS WHERE OWNER = 'HRI' AND OBJECT_NAME LIKE '%PKG_APEX_EAB%';
    
  • 包状态异常:确认包体已正确编译,状态为VALID。若状态为INVALID,需重新编译包:
    ALTER PACKAGE hri.pkg_apex_eab COMPILE;
    ALTER PACKAGE hri.pkg_apex_eab COMPILE BODY;
    
  • 解析账号配置错误:检查APEX应用的解析账号是否为有权限访问该包的账号,避免使用了无权限的默认账号。
  • 代码拼写错误:仔细核对调用时的包名pkg_apex_eab和存储过程名get_emp_info是否存在拼写错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 21:13:12