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
相关产品推荐
相关产品推荐

