Oracle 10g - 链接具有不同用户权限的两个视图
Posted
技术标签:
【中文标题】Oracle 10g - 链接具有不同用户权限的两个视图【英文标题】:Oracle 10g - Linking two views with different user privileges 【发布时间】:2012-01-19 17:14:59 【问题描述】:我是新手,如果我不完全清楚,我很抱歉......
背景:
十名员工,他们都被分配了Teacher
的角色。
StaffDetails
表有 6 列 - StaffID
、StaffName
、DateOfBirth
、Gender
、HolidayDaysRemaining
和 StaffRole
我希望老师们看到所有他们自己的详细信息,但只能看到其他员工的StaffID
、StaffName
和StaffRole
列.
我已有的代码解释如下:
首先,一个显示所有员工都可以看到的三列的视图(StaffID
、StaffName
、StaffRole
):
CREATE VIEW StaffDetailsForStaffMutual AS
SELECT sd.StaffID, sd.StaffName, sd.StaffRole
FROM StaffDetails sd;
其次,一个包含DateOfBirth
、Gender
和HolidayDaysRemaining
列的视图。 这些只能由登录的人查看(如子查询所示)。仅包含 StaffID
属性,以便在两个视图中都有一个公共列 - 它在最终表格中只会出现一次。
CREATE VIEW StaffXDetailsForStaffX AS
SELECT sd.StaffID, sd.DateOfBirth, sd.Gender, sd.HolidayDaysRemaining
FROM StaffDetails sd
WHERE StaffID IN
(SELECT USER
FROM DUAL);
我的问题是,我找不到将这两个视图连接起来制作一个表格的方法。在理想情况下,如果 ID 为 301 的员工登录并查询整个表,它将显示六列,第一行将包含他们所有的数据,第二行将包含 StaffID 302 的三列数据以此类推。
这里的任何帮助将不胜感激!
(最后,为了表明我已经尝试过,我尝试了这个查询:
CREATE VIEW StaffDetailsForStaff AS
SELECT sdfsm.StaffID, sdfsm.StaffName, sdfsm.StaffRole,
sxdfsx.DateOfBirth, sxdfsx.Gender, sxdfsx.HolidayDaysRemaining
FROM StaffDetailsForStaffMutual sdfsm, StaffXDetailsForStaffX sxdfsx
WHERE sdfsm.StaffID = sxdfsx.StaffID;
但是当以301登录并查询时,它显示只有 301的数据,没有其他人的数据!)
【问题讨论】:
对于您的家庭作业问题,请查看 VPD (oracle-base.com/articles/10g/…) 【参考方案1】:您可能需要outer join
CREATE VIEW StaffDetailsForStaff AS
SELECT sdfsm.StaffID, sdfsm.StaffName, sdfsm.StaffRole,
sxdfsx.DateOfBirth, sxdfsx.Gender, sxdfsx.HolidayDaysRemaining
FROM StaffDetailsForStaffMutual sdfsm LEFT JOIN StaffXDetailsForStaffX sxdfsx
ON sdfsm.StaffID = sxdfsx.StaffID;
【讨论】:
以上是关于Oracle 10g - 链接具有不同用户权限的两个视图的主要内容,如果未能解决你的问题,请参考以下文章
自动 CSV 文件生成,在 Oracle 10g 中具有不同列数的两个标题级别的标题