Oracle apex APEX 4.1-基于穿梭机的左面板填充DB
APEX版本:4.1.1.00.23 例子: 登录:演示 pw:演示 我在页面上有一个穿梭程序,当我将项目从右侧移动到左侧面板时,我想用“null”更新数据库中的表列“Analyst” 加载页面时,右面板中可能有项目,也可能没有项目Oracle apex APEX 4.1-基于穿梭机的左面板填充DB,oracle-apex,Oracle Apex,APEX版本:4.1.1.00.23 例子: 登录:演示 pw:演示 我在页面上有一个穿梭程序,当我将项目从右侧移动到左侧面板时,我想用“null”更新数据库中的表列“Analyst” 加载页面时,右面板中可能有项目,也可能没有项目 DB table (when page loads): Field Analyst Co-Borrower Credit Score Analyst_1 Appraised Value
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)
以下是我当前的页面流程(提交后):
提前谢谢 您可以执行两个更新,而不是循环:
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);
我觉得这太简单了吗?航天飞机的左侧没有通道。右侧有将要提交的值。因此,您只能通过计算数据库值与提交值之间的更改来更改这些记录。
如果可能,首先删除所有相关记录,然后插入新值
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;
这是使用循环结构时最直接的方法。我使用了第二个示例,其中提到了“null”。我所做的唯一更改是在第一个update语句中的“SET DQ_ANALYST=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;