2013-09-23 64 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