【问题标题】:APEX 4.1 - Populate DB based on left panel of shuttleAPEX 4.1 - 基于梭的左面板填充数据库
【发布时间】:2012-11-19 16:47:25
【问题描述】:

APEX 版本:4.1.1.00.23 示例:http://apex.oracle.com/pls/apex/f?p=27554:51 登录:演示 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)

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

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;

提前致谢!!

【问题讨论】:

    标签: oracle-apex


    【解决方案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;
    

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

    【讨论】:

    • 我用你的第二个例子来指代'null'。我所做的唯一更改是第一个更新语句中的“SET DQ_ANALYST = null”。再次感谢您的帮助。
    • 该死,对。这就是我的意思:') 为了后代,我会修改。
    【解决方案2】:

    您可以进行两次更新,而不是循环:

    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);
    

    我是不是觉得太简单了?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      • 2014-10-23
      • 2016-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      相关资源
      最近更新 更多