检测for循环中的最后一条记录
Posted
技术标签:
【中文标题】检测for循环中的最后一条记录【英文标题】:Detecting the last record in a for loop 【发布时间】:2018-08-13 08:13:44 【问题描述】:我有一系列循环,它们以奇怪的伪 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 循环中不起作用。
谁能指引我正确的方向?
【问题讨论】:
如果是最后一条记录怎么办。它应该是什么样子 @XING 如果是最后一个,什么都不做,退出循环。 【参考方案1】:你可以这样做。你需要一个布尔变量:
first := true;
循环内部:
if not first then
pseudojson := pseudojson || ',';
end if;
first := false;
-- Add the element
...
【讨论】:
【参考方案2】:怎么样:做任何事情,在循环中连接常用个字符,包括“最后”行。
退出循环后,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 || '';
【讨论】:
以上是关于检测for循环中的最后一条记录的主要内容,如果未能解决你的问题,请参考以下文章
django 打印 cmd 中的所有记录,但在模板上显示最后一条