我使用的是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 [email protected] 999999
但现在的问题是,我在Postgresql中使用了pl/proxy
在pl/proxy服务器中,我编写了以下函数:
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
有人能解释一下有什么问题吗?
最佳答案
PL/Proxy函数正在另一个数据库中运行,而refcursor在该数据库中无效。你必须重新设计这部分代码。
关于postgresql - 在pl/proxy中获取refcursor,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18718640/