select 语句中的 Postgres 存储过程无法获取数据
Postgres Stored procedure in select statement cannot get the datas
我正在尝试从 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();
我也tried.but无法执行这些行。
BEGIN;
SELECT prison();
-- Returns: <unnamed portal 2>
FETCH ALL IN "<unnamed portal 24>";
COMMIT;
下面是一个例子code.I假设数据types.Replace是真实的。
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;
不需要 PL/pgSQL 函数:
CREATE OR REPLACE FUNCTION prison()
RETURNS setof prison_issue
AS $$
SELECT * FROM prison_issue;
$$ LANGUAGE sql;
您还需要使用:
select * from prison();
要检索数据,请不要使用select prison()
(它只有return一条记录,而不是多行)
如果您不想 return 所有列,您没有向我们展示您对 table 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)
以匹配您 select 的列的数据类型。
我正在尝试从 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();
我也tried.but无法执行这些行。
BEGIN;
SELECT prison();
-- Returns: <unnamed portal 2>
FETCH ALL IN "<unnamed portal 24>";
COMMIT;
下面是一个例子code.I假设数据types.Replace是真实的。
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;
不需要 PL/pgSQL 函数:
CREATE OR REPLACE FUNCTION prison()
RETURNS setof prison_issue
AS $$
SELECT * FROM prison_issue;
$$ LANGUAGE sql;
您还需要使用:
select * from prison();
要检索数据,请不要使用select prison()
(它只有return一条记录,而不是多行)
如果您不想 return 所有列,您没有向我们展示您对 table 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)
以匹配您 select 的列的数据类型。