oracle - 检测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 循环中不起作用。
任何人都可以指导我朝着正确的方向前进吗?
解决方案
怎么样:做任何你做的事情,连接循环中的常用字符,包括“最后”行。
一旦退出循环,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 || '}';
推荐阅读
- rust - 我无法从函数中获得值的所有权
- java - 使用多种方法格式化问题并使变量相关
- android - 改造响应问题
- task - 在 Bonita Soft 上分配任务
- html - 更新css href中的随机数
- python - 将熊猫 set_value 转换为 at[]
- mysql - MySQL SUM 列基于另一个中的唯一值
- twilio - 如何为 Twilio SMS StatusCallback URL 处理身份验证
- amazon-web-services - 在 ECR 中删除最新标签时使用什么图像
- javascript - 在带有特殊字符的参数列表后出现错误 Uncaught SyntaxError: missing )