我知道我可以使用row_to_json返回json输出
例如,如果我的查询是:
select * from sample;
我可以将其重写如下,以返回json输出:
select row_to_json(sample) from sample;
但是我要实现的一件事是该功能中的相同功能。
给你一个例子,这是函数返回表:
CREATE FUNCTION find_val(val text)
RETURNS SETOF sample AS
$$
BEGIN
RETURN QUERY
SELECT * FROM sample where $1 = ANY(col4);
END;
$$
LANGUAGE 'plpgsql';
现在,我想从函数中返回JSON输出,而不是行。我怎样才能做到这一点 ?
到目前为止,这是我尝试过的:
native=> CREATE FUNCTION find_val(val text)
RETURNS SETOF sample AS
$$
BEGIN
RETURN QUERY
SELECT row_to_json(sample) FROM sample where $1 = ANY(col4) ;
END;
$$
LANGUAGE 'plpgsql';
CREATE FUNCTION
native=> select find_val('yo');
ERROR: structure of query does not match function result type
DETAIL: Returned type json does not match expected type integer in column 1.
CONTEXT: PL/pgSQL function find_val(text) line 3 at RETURN QUERY
native=> drop function find_val(text);
DROP FUNCTION
native=> CREATE FUNCTION find_val(val text)
native-> RETURNS json AS
native-> $$
native$> BEGIN
native$> SELECT row_to_json(sample) FROM sample where $1 = ANY(col4);
native$> END;
native$> $$
native-> LANGUAGE 'plpgsql';
CREATE FUNCTION
native=> select find_val('yo');
ERROR: query has no destination for result data
HINT: If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT: PL/pgSQL function find_val(text) line 3 at SQL statement
native=>
这与json与其他返回类型无关。不能使用普通SELECT
的PL / pgSQL函数,它必须是SELECT INTO
,RETURN QUERY SELECT
或PERFORM
。每个HINT
错误。
在您的情况下,您只需要一个简单的SQL函数。
CREATE FUNCTION find_val(val text)
RETURNS json AS
$$
SELECT row_to_json(sample) FROM sample where $1 = ANY(col4);
$$ LANGUAGE sql;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句