【问题标题】:Executing a package function works in SQL Workshop but not in Application Builder执行包函数在 SQL Workshop 中有效,但在 Application Builder 中无效
【发布时间】:2017-07-31 18:46:03
【问题描述】:

背景
我正在使用 Oracle Apex 为位于其自己的架构PS 中的第 3 方 SIS(学生信息系统)PowerSchool 生成报告。 在 PS 中,我已将关键业务逻辑抽象为单个自定义包中的自定义函数集合 - CKSD_Students。
问题
在尝试从 APEX 中访问这些功能。以以下单个查询为例:

Select   S.ID As Student_ID
         , S.Student_Number As Student_Number
         , S.LastFirst As LastFirst
         , ps.cksd_student.get_student_enroll_status(S.Enroll_Status)
                                             As Enroll_Status
         , S.Grade_Level As Grade_Level
         , S.SchoolID As SchoolID
         , Sch.Name As School_Name
From Students S
        Inner Join Schools Sch
               On Sch.School_Number = S.SchoolID

来自 SQL Workshop,PS_Apex 架构中的 SQL 命令窗口,此查询执行良好。
在应用程序生成器中,当我创建测试报告并将此查询用于内容正文查询时:

  1. 查询编译(验证)没有错误。
  2. 运行时(蓝色开始箭头)出现以下错误:

      Technical Info (only    visible for developers)
    •   is_internal_error: true
    •   apex_error_code: APEX.AUTHORIZATION.ACCESS_DENIED
    •   component.type: APEX_APPLICATION_AUTHORIZATION
    •   component.id: 8270293315071117
    •   component.name: User still logged into PowerSchool
    •   error_backtrace: 
    •   ----- PL/SQL Call Stack -----
    •     object      line  object
    •     handle    number  name
    •   00007FFCA77EF398       642  package body APEX_050000.WWV_FLOW_ERROR
    •   00007FFCA77EF398       710  package body APEX_050000.WWV_FLOW_ERROR
    •   00007FFCA77EF398      1014  package body APEX_050000.WWV_FLOW_ERROR
    •   00007FFCC10C9B30       793  package body APEX_050000.WWV_FLOW_AUTHORIZATION
    •   00007FFCBE34C0A0      4518  package body APEX_050000.WWV_FLOW
    •   00007FFCA89F3C28       173  procedure APEX_050000.F
    •   00007FFCA0EA4800         2  anonymous block
    

这个错误让我觉得问题在于 SQL Workshop 使用PS_APEX 而报告使用的是APEX_050000。这是有道理的,因为在我授予选择权之前,我在 PS 中创建的视图无法从 APEX 访问。

为了尝试解决这个问题,在PS 架构中,我已将执行(甚至绝望地调试)授予许多不同的架构。以下是完整列表:

EXECUTE APEX_050000 NO  PS  CKSD_STUDENT
DEBUG   APEX_050000 NO  PS  CKSD_STUDENT
EXECUTE APEX_ADMINISTRATOR_ROLE NO PS   CKSD_STUDENT
EXECUTE APEX_LISTENER   NO  PS  CKSD_STUDENT
EXECUTE APEX_PUBLIC_USER NO PS  CKSD_STUDENT
EXECUTE APEX_REST_PUBLIC_USER NO PS CKSD_STUDENT
EXECUTE NAVIGATOR_ROLE  NO  PS  CKSD_STUDENT
EXECUTE PSNAVIGATOR NO  PS  CKSD_STUDENT
EXECUTE PS_APEX     NO  PS  CKSD_STUDENT
EXECUTE PS_MGMT     NO  PS  CKSD_STUDENT

人们做了什么来访问 APEX 中不同模式的包?有人可以帮我弄清楚我错过了什么吗?

【问题讨论】:

    标签: oracle database-schema oracle-apex


    【解决方案1】:

    APEX 以不同的方式工作。
    所有查询、包、函数等都以解析模式的权限运行。要查看它,请转到您的应用程序(包含应用程序页面列表的页面),单击Edit Application Properties,转到Security - Database session 部分。在那里您将看到一个字段 Parsing schema - 它是您的应用程序的主要架构。
    您需要授予权限以对该解析模式执行包 CKSD_Students,然后在您的代码中将此包称为 PS.CKSD_Students

    或者,第二种方式,如果您有访问权限,您可以登录到 APEX INTERNAL 工作区。在那里,在工作区管理部分,您可以将 PS 模式分配给应用程序的工作区。之后,PS 模式的所有对象都必须在应用程序中可访问。

    【讨论】:

      猜你喜欢
      • 2017-08-17
      • 1970-01-01
      • 2014-08-14
      • 1970-01-01
      • 1970-01-01
      • 2015-01-06
      • 1970-01-01
      • 2020-04-14
      • 1970-01-01
      相关资源
      最近更新 更多