我有3个表:Employees,Locations和EmpLocation
我需要创建一个交互式网格,该网格将显示所有员工的数据,包括没有分配位置的员工的数据。 然后,用户需要有能力为那些将其设置为空的员工选择一个位置,并且还必须向任何员工添加其他位置。 我发现我需要的是可编辑网格中的两个选择列表。因此,可以通过选择员工和相应的位置来添加新行。
我使用以下查询:
SELECT el.Employee_ID, el.Location_ID
FROM EmpLocations el
然后,我将每一列都设为一个选择列表,其中第一列从Employees表中提取数据:
SELECT Employee_FName, Employee_ID FROM Employees
第二个-来自位置:
SELECT Location_Name, Location_ID FROM Locations
一切看起来都很不错,但是这样,我只能得到分配了至少一个地点的员工。我需要查看所有员工,以及是否给他们分配了任何位置(每个员工可以分配多个位置)。
因此我将网格的源查询更改为:
SELECT e.Employee_ID, el.Location_ID
FROM Employees e
LEFT JOIN EmpLocations el ON e.Employee_ID=el.Employee_ID
但是在这种情况下,由于涉及两个表,是否有可能使网格可更新?
答案 0 :(得分:0)
I'd say yes, but you should get rid of the automatic row processing (created by Apex, by default) and write your own PL/SQL code which would do inserting/updating. Something like an instead-of trigger on a view.
Also, for updating purposes (if you'll allow it), include the ROWID pseudocolumn.
Code (untested) would look like this:
begin
case when :apex$row_status = 'C' then
insert into emplocations (employee_id, location_id)
values (:employee_id, :location_id);
when :apex$row_status = 'U' then
update emplocations set
employee_id = :employee_id,
location_id = :location_id
where rowid = :rowid;
end;
end;