我正在尝试解决以下问题:我需要准备包含 3 列的表:user_id、月份值。来自 200 多个用户的每个用户都有不同的参数值来确定期望值,它们是:LOB、CHANNEL、SUBSIDIARY。所以我决定将它存储在表 ASYSTENT_GOALS_SET 中。但是我想避免将行相乘,并认为将所有条件作为代码的一部分放在我将在过程中进一步用于“where”子句的代码中会很好。因此,作为示例 - 而不是多行:
我创建了这样的条目:
到目前为止,我创建了测试表 ASYSTENT_TEST(我在其中收集特定用户的月份和值)。我写了一段使用 BULK COLLECT 的程序。
declare
type test_row is record
(
month NUMBER,
value NUMBER
);
type test_tab is table of test_row;
BULK_COLLECTOR test_tab;
p_lob varchar2(10) :='GOSP';
p_sub varchar2(14);
p_ch varchar2(10) :='BR';
begin
select subsidiary into p_sub from ASYSTENT_GOALS_SET where user_id='40001001';
execute immediate 'select mc, sum(ppln_wartosc) plan from prod_nonlife.mis_report_plans
where report_id = (select to_number(value) from prod_nonlife.view_parameters where view_name=''MIS'' and parameter_name=''MAX_REPORT_ID'')
and year=2017
and month between 7 and 9
and ppln_jsta_symbol in (:subsidiary)
and dcs_group in (:lob)
and kanal in (:channel)
group by month order by month' bulk collect into BULK_COLLECTOR
using p_sub,p_lob,p_ch;
forall x in BULK_COLLECTOR.first..BULK_COLLECTOR.last insert into ASYSTENT_TEST values BULK_COLLECTOR(x);
end;
所以现在当表 ASYSTENT_GOALS_SET 列 SUBSIDIARY (varchar) 包含字符串 12_00_00 (这是子公司之一的代码)时,一切正常。但问题是当用户在两个子公司工作时,比如说 12_00_00 和 13_00_00。我不知道如何写下来。SUBSIDIARY 列是否应该包含:'12_00_00'、'13_00_00' 或 "12_00_00"、"13_00_00" 或者可能是 12_00_00'、'13_00_00 在挖掘诸如“使用单/转义/双引号”之类的主题后,我尝试了很多选项。也许我也应该立即执行更改?
或者我对这个问题的处理方法从一开始就完全错误(希望不是:))。我将不胜感激。