Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 多次使用listagg写入输出_Sql_Oracle_Oracle11g - Fatal编程技术网

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确实会返回一条记录,但由于某些原因,它不会存储变量