我有一系列循环,以奇怪的伪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循环中使用。

谁能指导我正确的方向?

最佳答案

你可以这样您需要一个布尔变量:

first := true;

循环内:
if not first then
    pseudojson := pseudojson || ',';
end if;
first := false;
-- Add the element
...

09-25 22:55