Oracle apex APEX 4.1-基于穿梭机右侧面板填充DB

Oracle apex APEX 4.1-基于穿梭机右侧面板填充DB,oracle-apex,Oracle Apex,APEX版本:4.1.1.00.23 我在页面上有一个穿梭程序,当我将项目从左侧移动到右侧面板时,我想用选择列表中的内容更新数据库中的表 在本例中,当我从下拉列表中选择“Analyst_1”时,它将基于javascript填充右侧 DB table (before clicking button): Field Analyst Co-Borrower Credit Score Analyst_1 Appraised Value

APEX版本:4.1.1.00.23

我在页面上有一个穿梭程序,当我将项目从左侧移动到右侧面板时,我想用选择列表中的内容更新数据库中的表

在本例中,当我从下拉列表中选择“Analyst_1”时,它将基于javascript填充右侧

DB table (before clicking button):
Field                          Analyst
Co-Borrower Credit Score       Analyst_1
Appraised Value                (null)
Appraisal Identifier           (null)
然后,在我将一些项目从左面板移动到右面板并单击“应用更改”后,我希望将“Analyst_1”放在DB上的Analyst字段中,用于右面板上的每个字段名称

DB table (after clicking button):
Field                          Analyst
Co-Borrower Credit Score       Analyst_1
Appraised Value                Analyst_1
Appraisal Identifier           Analyst_1
这是我点击“应用更改”按钮时的代码

更新数据表 设置分析师名称=:P51\u分析师
其中字段=:P51_右

穿梭值以冒号分隔的字符串提交到会话状态。例如“VALUE1:VALUE2:VALUE4:VALUE7”。显然,这是行不通的。 当然,你可以用几种方法来处理这个问题。一种是在in子句中使用字符串,并将其拆分为几个元素

UPDATE data_table 
   SET analyst_name = :P51_ANALYST 
 WHERE field IN (SELECT a_field
                   FROM 
                     xmltable('/root/e/text()' passing xmltype('<root><e>'
                     || REPLACE(:P51_SHUTTLE_RIGHT,':','</e><e>')
                     || '</e></root>') columns a_field VARCHAR2(50) path '/');

我使用以下代码让DB仅基于右面板中的项目来更新Analyst选择列表

注意:这只更新了基于右面板的数据库。如果将某个内容从右面板移动到左面板,则在提交页面后,它仍将显示在右面板上

提交后创建页面进程PL/SQL匿名块:

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