我希望能获得有关创建pg9.6结构的最佳实践的建议,该结构可以保存来自多个联接表的多行作为光标目标。文档尚不清楚,其他搜索似乎表明使用了临时表,如下所示。
DECLARE
mycursor refcursor;
BEGIN
CREATE TEMPORARY TABLE tmp_persons (
personid INTEGER,
primaryconnect INTEGER
);
OPEN mycursor FOR SELECT p.personid,c.primaryconnect FROM tpersons p JOIN tconnections c ON .....
LOOP
FETCH mycursor INTO tmp_persons;
.. do something using tmp_persons.personid, tmp_persons.primaryconnect
答案 0 :(得分:0)
我希望documentation是干净的。
FETCH将光标的下一行检索到目标中,该目标可能是行变量,记录变量或用逗号分隔的简单变量列表,就像SELECT INTO一样。如果没有下一行,则将目标设置为NULL。与SELECT INTO一样,可以检查特殊变量FOUND以查看是否获得了行。
因此,您不能使用临时表作为目标。如果没有特殊要求,请使用记录变量:
DECLARE
r record;
mycursor refcursor;
BEGIN
OPEN mycursor ..
LOOP
FETCH mycursor INTO r;
EXIST WHEN NOT FOUND;
RAISE NOTICE 'personid: %', r.personid;
对于此简单任务,最好使用FOR IN SELECT
语句。
DECLARE r record;
BEGIN
FOR r IN SELECT p.personid, ...
LOOP
RAISE NOTICE 'personid: %', r.personid;