【发布时间】:2013-09-10 12:10:59
【问题描述】:
我正在使用 Postgresql 并且有一个简单的函数,它将向客户端返回一个 refcursor:
CREATE OR REPLACE FUNCTION select_user(cur refcursor, m_id text)
RETURNS setof refcursor AS $$
BEGIN
OPEN $1 FOR SELECT * FROM public.users WHERE id=m_id;
RETURN NEXT $1;
END;
$$ LANGUAGE plpgsql;
我可以这样获取数据:
SELECT select_user('cur','999999'); FETCH ALL in cur;
像这样返回 1 行:
username email id
999999 999999@somewhere.cm 999999
但现在的问题是,我正在使用 pl/proxy 和 Postgresql 在 pl/proxy server 我写了这个函数:
CREATE OR REPLACE FUNCTION select_user(cur refcursor, m_type integer, m_hid text)
RETURNS setof refcursor AS $$
CLUSTER 'sqlcluster';
RUN ON select_db(m_hid);
$$ LANGUAGE plproxy;
从上面的函数它返回 refcursor,但我无法获取 refcursor 使用此命令:
SELECT select_user('cur','999999'); FETCH ALL in cur;
返回错误:
SQL error:
ERROR: cursor "cur" does not exist
谁能解释一下是什么问题?
【问题讨论】:
标签: postgresql cursor plpgsql ref-cursor