Oracle apex APEX 4.1-基于穿梭机的左面板填充DB

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

APEX版本:4.1.1.00.23 例子: 登录:演示 pw:演示

我在页面上有一个穿梭程序,当我将项目从右侧移动到左侧面板时,我想用“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)

以下是我当前的页面流程(提交后):


提前谢谢

您可以执行两个更新,而不是循环:

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;