Oracle 10g - связывание двух представлений с различными привилегиями пользователя - PullRequest
2 голосов
/ 19 января 2012

Я новичок в этом, поэтому я прошу прощения, если мне не совсем ясно ...

Справочная информация:
Десять сотрудников, все с назначенной им ролью 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 данные и никто другой!)

1 Ответ

0 голосов
/ 20 января 2012

Возможно, вам нужно внешнее соединение

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...