Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql postgres从函数返回json_Sql_Json_Function_Postgresql - Fatal编程技术网

Sql postgres从函数返回json

Sql postgres从函数返回json,sql,json,function,postgresql,Sql,Json,Function,Postgresql,我知道我可以使用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 *

我知道我可以使用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和其他返回类型无关。在PL/PgSQL函数中不能使用普通的
SELECT
,它必须是
selectinto
返回查询SELECT
、或
执行
。根据
提示
错误

在您的例子中,您只需要一个简单的SQL函数

CREATE FUNCTION find_val(val text) 
RETURNS json AS
$$
SELECT row_to_json(sample) FROM sample where $1 = ANY(col4);
$$ LANGUAGE sql;

谢谢克雷格。。这起作用了。我需要在实际函数中执行更多的操作,因此只使用plpgsql。从官方文档
CREATE或REPLACE函数find_val(val text)中找到了正确的方法,返回json为$$DECLARE t_row sample%ROWTYPE;开始从样本中选择*进入t_行,其中$1=ANY(col4);将行_返回到_json(t_行);完;$$语言“plpgsql”