Sql 多次使用listagg写入输出
我做的第一次更新确实显示了输出,但第二次更新完成后,它什么也没有显示,我不知道如何解决这个问题Sql 多次使用listagg写入输出,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我做的第一次更新确实显示了输出,但第二次更新完成后,它什么也没有显示,我不知道如何解决这个问题 declare v_ids varchar2(4000); v_ids2 varchar2(4000); begin select listagg(tl.limit_template, ',') within group (order by tl.limit_template) into v_ids from base_timeline_section bbts, base
declare
v_ids varchar2(4000);
v_ids2 varchar2(4000);
begin
select listagg(tl.limit_template, ',') within group (order by
tl.limit_template) into v_ids
from base_timeline_section bbts,
base_timeline_org bts,
trmt_timeline tl
where bbts.base_trmt_set_id = bts.base_trmt_set_id
and tl.limit_id = bts.limit_id
and bbts.bse_trmt_st_tplt_id = '720';
update time_line tl
set tl.limit_template = 'LIM0178'
where tl.limit_template IN (select REGEXP_SUBSTR (v_ids, '[^,]+', 1,
level)
from (select rownum from dual )
connect by level <=
length(regexp_replace(v_ids,'[^,]*'))+1);
dbms_output.put_line('Updated IDs: ' || v_ids || ' to LIM0178');
select listagg(tl.limit_template, ',') within group (order by
tl.limit_template) into v_ids2
from base_timeline_section bbts,
base_timeline_org bts,
trmt_timeline tl
where bbts.base_trmt_set_id = bts.base_trmt_set_id
and tl.limit_id = bts.limit_id
and bbts.bse_trmt_st_tplt_id = '111';
update time_line tl
set tl.limit_template = 'LIM0178'
where tl.limit_template IN (select REGEXP_SUBSTR (v_ids2, '[^,]+', 1, level)
from (select rownum from dual )
connect by level <=
length(regexp_replace(v_ids2,'[^,]*'))+1);
dbms_output.put_line('Updated IDs: ' || v_ids2 || ' to LIM0178');
end;
更新的IDs表1:1300813069131301340134021346713532135971359713662137271379213857139221398714052141171418221424714771444214507145721463714702147671489714962150271502719215157152221528715352154171548215547156116262621652216716782至LIM0178
更新的IDs表2:to LIM0178检查update和select语句之间的顺序。我想第二个选择是stmt。应该在第二次更新stmt之后出现。我认为您的第二次SELECT查询没有返回任何结果。您是否已通过将第二个查询输出作为单个SQL执行来检查它?与当前问题无关,但您为什么要在过程中使用csv?您可以将sys.odciVarchar2list类型的变量设置为,然后选择tl.limit_template bulk collect to v_id,最后选择forall进行更新,这样您就不必处理令人讨厌的csv操作。此外,不需要将中间结果存储到变量中,您可以在update语句中直接使用SELECT查询,其中子句my SELECT确实会返回一条记录,但由于某些原因,它不会存储变量