0

APEX 版本:4.1.1.00.23 示例:http ://apex.oracle.com/pls/apex/f?p=27554:51 登录:演示密码:演示

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

提前致谢!!

4

2 回答 2

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;

当您使用循环结构时,这将是最直接的方式。

于 2012-11-26T09:04:29.217 回答
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);

我是不是觉得太简单了?

于 2012-11-22T12:17:34.470 回答