首页 > 解决方案 > 检测for循环中的最后一条记录

问题描述

我有一系列循环,它们以奇怪的伪 json 格式将数据表中的一个 clob 放在一起。

我遇到的问题是这些循环中的每一个都需要以相关字符结束该部分,但我无法弄清楚如何识别最后一条记录。

到目前为止,我有:

for y in (select distinct ident from table(an_object))
loop
  pseudojson := pseudojson || '{';

  the_row := y.ident;
  for z in (select * from table(an_object) where ident = the_row)
    loop
    pseudojson := pseudojson || z.the_key ||': "' || z.the_value ||'"';
    -- (1)
    end loop;

  pseudojson := pseudojson || '}';
  -- (2)
end loop;

pseudojson := pseudojson || '}';

an_object包含未透视的数据,按 . 分组到前面的行中ident

出于逻辑,我试图在以下内容中硬塞

(1)

if not z.last 
then 
  pseudojson := pseudojson || ','; 
end if;

(2)

if not y.last
then 
  pseudojson := pseudojson || ','; 
end if;

但是这些运算符在 for 循环中不起作用。

任何人都可以指导我朝着正确的方向前进吗?

标签: oracleplsqloracle11g

解决方案


怎么样:做任何你做的事情,连接循环中的常用字符,包括“最后”行。

一旦退出循环,RTRIM多余的字符(逗号,对吗?)。像这样的东西:

for y in (select distinct ident from table(an_object))
loop
  pseudojson := pseudojson || '{';

  the_row := y.ident;
  for z in (select * from table(an_object) where ident = the_row)
    loop
    pseudojson := pseudojson || z.the_key ||': "' || z.the_value ||'"';
    -- (1)
    pseudojson := pseudojson ||',';
    end loop;

    pseudojson := rtrim(pseudojson, ',');  --> this

  pseudojson := pseudojson || '}';
  -- (2)
  pseudojson := pseudojson ||',';
end loop;

pseudojson := rtrim(pseudojson, ',');      --> this
pseudojson := pseudojson || '}';

推荐阅读