Oracle APEX 动态操作调用包抛出错误“ORA-06550:第 11 行,第 19 列:PLS-00302:必须声明组件 'GET_EMP_INFO'”

问题描述 投票:0回答:1

我有一个具有动态操作(更改时)的页面项目。 这有效(其他进程会触发)。 我添加了一个操作来调用包中的过程来获取员工信息。 当我尝试验证时,APEX 中的调用抛出错误“ORA-06550:第 11 行,第 19 列:PLS-00302:必须声明组件“GET_EMP_INFO””。

我可以直接执行包中的过程(在Toad中),并且得到预期的输出。所以我不认为过程是问题所在。

这是 APEX 动态操作调用(执行服务器端代码 > 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 动态操作调用 hri.pkg_apex_eab.get_emp_info 并期望返回多个数据点(分配到其他页面项)。 相反,我收到错误“ORA-06550:第 11 行,第 19 列:PLS-00302:必须声明组件 'GET_EMP_INFO'”。

oracle oracle-apex
1个回答
0
投票

这就是你的称呼:

hri.pkg_apex_eab.get_emp_info

这意味着:

  • 程序名称是
    get_emp_info
  • 它是
    pkg_apex_eab
    套餐的一部分...
  • ...由名为
    hri
  • 的用户拥有

问题/建议:

  • Apex 工作区是否允许与
    hri
    用户一起使用?如果没有,请要求 Apex 管理员执行此操作
  • 您没有说开发这个应用程序时使用哪个数据库用户。如果不是
    hri
    ,您是否将 execute
    hri
    权限授予当前用户?
    请注意,这不是 Apex 用户,而是您在连接到 Apex 时输入的用户(您必须指定工作区名称、用户名和密码 - 这是 Apex 的情况)。我说的是 
      Oracle
    • 用户。
© www.soinside.com 2019 - 2024. All rights reserved.