2013-09-23 2 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 execute ('select * from datas.tb где id = 2'); петля выборка cur1 в r; если не найден, то выход; end if; \t выберите hstore (r) в hstoredata; Raise Notice '%', hstoredata -> 'id'; конец петли; close cur1; return alert_mesg; END; $$ LANGUAGE plpgsql – user2797756

Смежные вопросы