Oracle 10g - 链接具有不同用户权限的两个视图

Posted

技术标签:

【中文标题】Oracle 10g - 链接具有不同用户权限的两个视图【英文标题】:Oracle 10g - Linking two views with different user privileges 【发布时间】:2012-01-19 17:14:59 【问题描述】:

我是新手,如果我不完全清楚,我很抱歉......

背景: 十名员工,他们都被分配了Teacher 的角色。

StaffDetails 表有 6 列 - StaffIDStaffNameDateOfBirthGenderHolidayDaysRemainingStaffRole

我希望老师们看到所有他们自己的详细信息,但只能看到其他员工的StaffIDStaffNameStaffRole列.

我已有的代码解释如下:

首先,一个显示所有员工都可以看到的三列的视图(StaffIDStaffNameStaffRole):

CREATE VIEW StaffDetailsForStaffMutual AS  
SELECT sd.StaffID, sd.StaffName, sd.StaffRole  
FROM StaffDetails sd;

其次,一个包含DateOfBirthGenderHolidayDaysRemaining 列的视图。 这些只能由登录的人查看(如子查询所示)。仅包含 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 - 链接具有不同用户权限的两个视图的主要内容,如果未能解决你的问题,请参考以下文章

安装oracle10g时出现权限不够怎么解决

自动 CSV 文件生成,在 Oracle 10g 中具有不同列数的两个标题级别的标题

如何查看oracle用户具有的权限和角色

如何将 oracle 11g 用户导出到 10g 和不同的默认表空间

如何查看oracle用户具有的权限和角色?

Oracle 10G中导入dmp文件