Oracle 检测for循环中的最后一条记录
我有一系列循环,将来自数据表的clob以奇怪的伪json格式组合在一起 我遇到的问题是,每个循环都需要以相关字符结束部分,但我无法确定如何识别最后一条记录 到目前为止,我已经:Oracle 检测for循环中的最后一条记录,oracle,plsql,oracle11g,Oracle,Plsql,Oracle11g,我有一系列循环,将来自数据表的clob以奇怪的伪json格式组合在一起 我遇到的问题是,每个循环都需要以相关字符结束部分,但我无法确定如何识别最后一条记录 到目前为止,我已经: 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)
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 || '}';
一个_对象
包含未插入的数据,按ident
分组到前几行
从逻辑上讲,我想把下面的内容塞进
(一)
及(二)
但是这些操作符在for循环中不起作用
有人能给我一个正确的方向吗?这个怎么样:做你想做的事,在循环中连接常用字符,包括“最后”行 退出循环后,
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 || '}';
你可以这样做。您需要一个布尔变量:
first := true;
在循环内部:
if not first then
pseudojson := pseudojson || ',';
end if;
first := false;
-- Add the element
...
如果是最后一条记录呢。应该是什么样子like@XING如果是最后一个,什么也不做,退出循环。
first := true;
if not first then
pseudojson := pseudojson || ',';
end if;
first := false;
-- Add the element
...