我有以下问题。我有一个带有以下 SQL 查询的 popUp-LoV 类型的页面元素:
SELECT u.Lastname || ', ' || u.Firstname AS displayed, u.UUID as ID
from STAFF s
left outer join USERS u on s.UUID=u.UUID
union
SELECT u2.Lastname || ', ' || u2.Firstname AS displayed, m.MAID AS ID
FROM MANAGER m
left outer join USERS u2 on m.UUID=u2.UUID
这样,我想从两个表中向用户展示可供选择的人。但是,我希望一旦用户选择一个人,就设置相应表的外键。这些表的外键将保存在单独的列中。换句话说,我创建了两个隐藏页面项,每个项都有对应表的外键约束。根据值列表的返回值,我想在相应的页面项目中设置页面项目(一个为空)。
为此,我首先创建了一个函数,该函数应检查 LoV 的返回值是否作为 ID 在表中。
create or replace function search_id (p_key_value in number)
return number
is
found_person number;
begin
select m.ID into found_person from MANAGER m where p_key_value=m.ID ;
if sql%rowcount = 1 then
return found_person;
end if ;
exception
when no_data_found then
return null;
end;
更改了 LoV 的 sql 查询:
SELECT u.Lastname || ', ' || u.Firstname AS displayed, u.UUID as ID
from USERS u
and u.UUID in (select u.UUID
from STAFF s
left outer join USERS u on s.UUID=u.UUID)
OR u.UUID in (select u.UUID
from MANAGER m
left outer join USERS u on m.UUID=u.UUID)
改变的功能:
create or replace function search_id(p_key_value in number)
return number
is
found_person number;
begin
select s.STID
into found_person
from STAFF s
where s.UUID=p_key_value;
if sql%rowcount = 1 then
return found_person;
end if ;
exception
when no_data_found then
select m.MID
into found_person
from MANAGER m
where m.UUID=p_key_value;;
end;
动态操作:然后我为带有弹出 LoV 的页面项目创建了一个动态操作。当页面项目更改时(因此当用户从 LoV 中选择一个值时)会触发动态操作。
操作是:使用以下 pl/sql 函数执行 pl/sql 代码:
declare
found_person number;
begin
found_person:= search_id(V('P12_RESPONSIBLE'));
apex_util.set_session_state('P12_MANAGER_ID',found_person);
apex_util.set_session_state('P12_STAFF_ID',found_person);
exception
when no_data_found then
null;
end;
要提交的项目:P12_RESPONSIBLE 要返回的项目:P12_MANAGER_ID,P12_STAFF_ID