我试图从select prison();的数据库使用函数中获取数据但是我收到了错误。请告诉我。
CREATE OR REPLACE FUNCTION prison() RETURNS refcursor AS $$
DECLARE
ref refcursor;
BEGIN
OPEN ref FOR SELECT round,ben_sc,ben_st FROM prison_issue;
RETURN ref;
END;
$$ LANGUAGE plpgsql;
并像这样打电话
select prison();
我也试过了。但是无法执行行。
BEGIN;
SELECT prison();
-- Returns: <unnamed portal 2>
FETCH ALL IN "<unnamed portal 24>";
COMMIT;
答案 0 :(得分:1)
不需要PL / pgSQL函数:
CREATE OR REPLACE FUNCTION prison()
RETURNS setof prison_issue
AS $$
SELECT * FROM prison_issue;
$$ LANGUAGE sql;
您还需要使用:
select * from prison();
要检索数据,请不使用select prison()
(仅返回单个记录,而不是多行)
如果您不希望返回所需的所有列,那么您没有向我们展示您对表prison_issue
的定义:
CREATE OR REPLACE FUNCTION prison()
RETURNS table (round integer, ben_sc text, ben_st text)
AS $$
SELECT SELECT round,ben_sc,ben_st FROM prison_issue;
$$ LANGUAGE sql;
您需要调整零件table (round integer, ben_sc text, ben_st text)
以匹配您选择的列的数据类型。
答案 1 :(得分:0)
下面是一个示例代码。我假设了数据类型。用真实代码替换。
CREATE OR REPLACE FUNCTION prison() RETURNS TABLE(round numeric,ben_sc character varying,ben_st character varying) AS $$
BEGIN
RETURN QUERY SELECT p.round,p.ben_sc,p.ben_st FROM prison_issue p;
END;
$$ LANGUAGE plpgsql;