postgres 游标出错
Posted
技术标签:
【中文标题】postgres 游标出错【英文标题】:Error in postgres Cursor 【发布时间】:2013-09-23 05:43:23 【问题描述】:请帮我解决这个错误。
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”在 FETCH 的第 15 行 ********** 错误 ********** 错误:字符串意外结束 SQL状态:XX000 上下文: PL/pgSQL 函数“mycursor”在 FETCH 的第 15 行【问题讨论】:
【参考方案1】:我认为这是因为光标返回记录类型,而不是 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;
【讨论】:
CREATE OR REPLACE FUNCTION MYCURSOR () RETURNS VARCHAR AS $$ declare cur1 refcursor; var1 varchar (10) ; hstoredata hstore; r 记录; alert_mesg VARCHAR(2000) := '';开始 var1 = 'id'; OPEN cur1 FOR execute('select * from datas.tb where id =2');循环获取 cur1 到 r 中;如果没有找到则退出;万一;选择 hstore(r) 进入 hstoredata;提高通知 '%',hstoredata->'id';结束循环;关闭cur1;返回警报消息;结尾; $$ 语言 plpgsql【参考方案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
【讨论】:
以上是关于postgres 游标出错的主要内容,如果未能解决你的问题,请参考以下文章
为啥我使用 graphql > hasura > postgres 保存日期时出错
pgfouine.php 读取 Postgres 日志时出错