我正在尝试从表中构造一个字符串。我需要从每一行构造一个字符串,然后将这些字符串(使用适当的分隔符)连接在一起。在一个简单的例子中,select产生一个包含3行的表;但是,我收到上面的消息。
有人可以帮忙吗?感谢
for mFiles in
select url || pth || basename || '/' || basename || '.2.' || clientname into fName from files
where ( userId is null or uid != userId ) and (url is not null) and (pth is not null)
order by RANDOM() limit nImages LOOP
res := res || fName || '|';
RAISE NOTICE ' fName: % ' , fName;
END LOOP;
答案 0 :(得分:2)
问题是'进入fName'。用'as fName'替换它并写入 res:= res || mFiles.fName || '|';
修复了问题。不明白为什么,但......
答案 1 :(得分:0)
根据Craig Ringer的建议,如果你删除了limit
子句,而是用这样的代码打破了循环(这将测试limit
是否是罪魁祸首,提供一个很好的解决方法):
idx := 1
for mFiles in
select url || pth || basename || '/' || basename || '.2.' || clientname into fName from files
where ( userId is null or uid != userId ) and (url is not null) and (pth is not null)
order by RANDOM()
LOOP
res := res || fName || '|';
RAISE NOTICE ' fName: % ' , fName;
IF idx = nImages THEN
EXIT
END IF;
END LOOP;
在代码中更高的相应部分添加声明idx
。