背景
我正在使用Oracle Apex为第三方SIS(学生信息系统)PowerSchool生成报告,该报告位于自己的模式PS
中。
在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
中,我将关键业务逻辑抽象为一个自定义函数集合 - CKSD_Students。
的问题
试图从APEX内部访问这些功能。使用以下单个查询作为示例:
PS_Apex
从SQL Workshop, 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命令窗口,此查询执行正常
在应用程序构建器中,当我创建测试报告并将此查询用于内容正文查询时:
运行时(蓝色开始箭头)我收到以下错误:
PS_APEX
这个错误让我觉得问题是SQL Workshop使用APEX_050000
而报告正在使用PS
。这是有道理的,因为我在PS中创建的视图无法从APEX访问,直到我授予select。
为了尝试解决这个问题,在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
模式中,我已经将许多不同的模式执行(甚至绝望调试)。以下是完整列表:
{{1}}
人们做了什么来访问APEX中不同模式的包?有人能帮我弄清楚我错过了什么吗?
答案 0 :(得分:1)
APEX以不同的方式运作
所有查询,包,函数等都以解析模式的权限运行。要查看它,请转到您的应用程序(包含该应用程序页面列表的页面),单击Edit Application Properties
,转到Security
- Database session
部分。在那里,您将看到一个字段Parsing schema
- 它是您的应用程序的主要架构
您需要授予权限才能对此解析架构执行包CKSD_Students
,然后在您的代码中将此包称为PS.CKSD_Students
。
或者,第二种方式,如果您有权访问,则可以登录APEX INTERNAL
工作区。在工作区管理部分中,您可以将PS
架构分配给应用程序的工作区。之后,必须在应用程序中访问PS
模式的所有对象。