0

我有以下问题。我有一个带有以下 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

4

0 回答 0