2013-09-23 66 views
3

请帮我解决这个错误。错误postgres光标

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 

当我尝试执行这个查询它显示我的错误作为

 
ERROR: Unexpected end of string 
CONTEXT: PL/pgSQL function "mycursor" line 15 at FETCH 

********** Error ********** 

ERROR: Unexpected end of string 
SQL state: XX000 
Context: PL/pgSQL function "mycursor" line 15 at FETCH 

回答

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 
3

我认为这是发生,因为返回游标的记录类型,不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; 
+0

CREATE OR REPLACE FUNCTION MYCURSOR()返回VARCHAR AS $$ 声明 CUR1 REFCURSOR; var1 varchar(10); hstoredata hstore; r记录; alert_mesg VARCHAR(2000):=''; BEGIN var1 ='id'; OPEN cur1 FOR执行('select * from datas.tb where id = 2'); 循环 将cur1转换为r; 如果未找到,则退出 ; end if; \t将hstore(r)选入hstoredata; 提高通知'%',hstoredata - >'id'; end loop; close cur1; return alert_mesg; END; $$语言plpgsql – user2797756