Postgres游标错误

3

请帮我解决这个错误。

CREATE OR REPLACE FUNCTION MYCURSOR () RETURNS VARCHAR AS $$
declare

cur1 refcursor;

col_name varchar (10) ;
hstoredata hstore;
BEGIN

col_name = 'id';
OPEN cur1 FOR execute('select * from datas.tb where id =2');
loop
 fetch cur1 into hstoredata;
 if not found then
 exit ;
 end if;
    Raise Notice '%',hstoredata -> col_name ;

 end loop;
 close cur1;
 return 'r';
 END;
 $$ LANGUAGE plpgsql

当我尝试执行这个查询时,它显示了以下错误:

错误: 字符串意外结束
上下文: PL/pgSQL函数"mycursor"的第15行FETCH
********** 错误 **********
错误: 字符串意外结束 SQL状态: XX000 上下文: PL/pgSQL函数"mycursor"的第15行FETCH
2个回答

3
我认为这是因为光标返回了记录类型,而不是hstore。您可以像下面这样更改函数:

我认为这是因为光标返回了记录类型,而不是hstore。您可以像下面这样更改函数:

CREATE OR REPLACE FUNCTION MYCURSOR()
RETURNS VARCHAR AS 
$$
declare
    cur1 refcursor;
    col_name varchar(10);
    rec record;
begin
    col_name := 'id';
    open cur1 for execute('select 1 as id');
    loop
       if not found then
           exit ;
       end if;
       fetch cur1 into rec;
       Raise Notice '%', rec.<column with hstore>-> col_name;
    end loop;
    close cur1;
    return 'r';
end;
$$ LANGUAGE plpgsql;

创建或替换函数 MYCURSOR() 返回 VARCHAR AS $$ DECLAREcur1 refcursor; var1 varchar (10) ; hstoredata hstore; r record; alert_mesg VARCHAR(2000) := '';BEGIN var1 = 'id'; OPEN cur1 FOR execute('select * from datas.tb where id =2'); loop fetch cur1 into r; if not found then exit ; end if; select hstore(r) into hstoredata;Raise Notice '%',hstoredata->'id'; end loop; close cur1; return alert_mesg; END; $$ LANGUAGE plpgsql - user2797756

2
 CREATE OR REPLACE FUNCTION MYCURSOR () RETURNS VARCHAR AS $$
  declare

    cur1 refcursor;
    var1 varchar (10) ;
    hstoredata hstore;
    r record;
    alert_mesg VARCHAR(2000) := '';
       BEGIN

         var1 = 'id';
         OPEN cur1 FOR execute('select * from datas.tb where id =2');
         loop
            fetch cur1 into r;
            if not found then
                 exit ;
            end if;
        select hstore(r) into hstoredata;
            Raise Notice '%',hstoredata->'id';

         end loop;
         close cur1;
         return alert_mesg;
    END;
   $$ LANGUAGE plpgsql

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接