无法打开SELECT查询作为游标

时间:2014-12-29 19:39:24

标签: postgresql

我正在尝试从表中构造一个字符串。我需要从每一行构造一个字符串,然后将这些字符串(使用适当的分隔符)连接在一起。在一个简单的例子中,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;

2 个答案:

答案 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