APEX版本:4.1.1.00.23 示例:http://apex.oracle.com/pls/apex/f?p=27554:51 登录:演示 pw:demo
我在页面上有一个穿梭机,当我从右侧将项目移动到左侧面板时,我想用'null'更新数据库中的表格列'Analyst'
页面加载时,右侧面板中可能有也可能没有项目。
DB table (when page loads):
Field Analyst
Co-Borrower Credit Score Analyst_1
Appraised Value Analyst_1
Appraisal Identifier Analyst_1
然后,在我将部分或全部项目从右侧面板移动到左侧面板并单击“应用更改”后,我希望将“null”放入数据库的分析人员字段中,以便将每个字段名称放在左图。
DB table (after clicking button):
Field Analyst
Co-Borrower Credit Score Analyst_1
Appraised Value (null)
Appraisal Identifier (null)
这是我当前的页面流程(提交后):
declare
tab apex_application_global.vc_arr2;
l_count number;
begin
tab := apex_util.string_to_table (:P51_SHUTTLE);
for i in 1..tab.count
loop
select count(*) into l_count from DQ_MANUAL_EDIT WHERE DQ_ATTRIBUTE = tab(i);
if l_count > 0 then
UPDATE DQ_MANUAL_EDIT
SET DQ_ANALYST = :P51_DQ_ANALYST
WHERE DQ_ATTRIBUTE = tab(i);
end if;
end loop;
end;
感谢提前!!
答案 0 :(得分:1)
无法进入班车左侧。右侧具有将提交的值。因此,您只能通过确定数据库值与提交的值之间的变化来更改这些记录 如果可能,首先删除所有关联的记录,然后插入新值。
declare
tab apex_application_global.vc_arr2;
l_count number;
begin
DELETE FROM DQ_MANUAL_EDIT
WHERE DQ_ANALYST = :P51_DQ_ANALYST;
tab := apex_util.string_to_table (:P51_SHUTTLE);
for i in 1..tab.count
loop
select count(*) into l_count from DQ_MANUAL_EDIT WHERE DQ_ATTRIBUTE = tab(i);
if l_count > 0 then
INSERT INTO DQ_MANUAL_EDIT (DQ_ANALYST, DQ_ATTRIBUTE)
VALUES (:P51_DQ_ANALYST, tab(i));
end if;
end loop;
end;
如果您不想删除并保留记录但值为NULL
,那么您可以先将记录更新为NULL
declare
tab apex_application_global.vc_arr2;
l_count number;
begin
UPDATE DQ_MANUAL_EDIT
SET DQ_ANALYST = NULL
WHERE DQ_ANALYST = :P51_DQ_ANALYST;
tab := apex_util.string_to_table (:P51_SHUTTLE);
for i in 1..tab.count
loop
select count(*) into l_count from DQ_MANUAL_EDIT WHERE DQ_ATTRIBUTE = tab(i);
if l_count > 0 then
UPDATE DQ_MANUAL_EDIT
SET DQ_ANALYST = :P51_DQ_ANALYST
WHERE DQ_ATTRIBUTE = tab(i);
end if;
end loop;
end;
使用循环结构时,这是最简单的方法。
答案 1 :(得分:0)
您可以执行两项更新,而不是循环:
UPDATE DQ_MANUAL_EDIT
SET DQ_ANALYST = :P51_DQ_ANALYST
WHERE DQ_ATTRIBUTE in (select * from tab);
UPDATE DQ_MANUAL_EDIT
SET DQ_ANALYST = NULL
WHERE DQ_ATTRIBUTE not in (select * from tab);
我看到它太简单了吗?