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 table (after clicking button):
Field Analyst
Co-Borrower Credit Score Analyst_1
Appraised Value Analyst_1
Appraisal Identifier Analyst_1
以下是我点击“应用更改”按钮时的代码。
更新Data_Table 设置ANALYST_NAME =:P51_ANALYST 其中FIELD =:P51_SHUTTLE_RIGHT;
答案 0 :(得分:0)
Shuttle值以冒号分隔的字符串提交到会话状态。例如'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 '/');
这只是一种风格,还有许多其他示例和方法,例如使用regexp或connect by。选择你喜欢的任何一个。
另一种方法是使用PLSQL代码循环遍历字符串中的所有值。您可以使用APEX_UTIL.STRING_TO_TABLE。同样,您喜欢的任何风味(例如INSTR
+ SUBSTR
)。
DECLARE
l_vc_arr2 APEX_APPLICATION_GLOBAL.VC_ARR2;
BEGIN
l_vc_arr2 := APEX_UTIL.STRING_TO_TABLE('One:Two:Three');
FOR z IN 1..l_vc_arr2.count LOOP
htp.p(l_vc_arr2(z));
END LOOP;
END;
答案 1 :(得分:0)
我使用以下代码让数据库更新基于 ONLY 的分析师(选择列表),在右侧面板中的项目上工作。
注意:这只是根据右侧面板更新了数据库。如果您从右侧面板向左侧面板移动某些内容,则在提交页面后它仍将显示在右侧面板上。
提交后创建页面进程(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;