[英]PostgreSQL, Npgsql returning 42601: syntax error at or near “$1”
[英]Postgresql - ERROR: syntax error at or near "RETURN" SQL state: 42601
我正在使用 Postgresql 9.6 并尝试创建以下函数:
CREATE FUNCTION public."getInventory"("vals1Arg" character varying[], "vals2Arg" character varying[])
RETURNS json
LANGUAGE 'sql'
AS $BODY$
CREATE TEMP TABLE t1 AS
SELECT * FROM unnest(vals1Arg) AS u(c);
CREATE TEMP TABLE t2 AS
SELECT * FROM unnest(vals2Arg) AS u(c);
RETURN QUERY
SELECT * FROM "INVENTORY"
JOIN t1 ON "COLUMN_1" = t1.c
JOIN t2 ON "COLUMN_2" = t2.c;
$BODY$;
我的实际需求提到这里在单独的交
我收到以下语法错误:
ERROR: syntax error at or near "RETURN"
LINE 12: RETURN QUERY
^
SQL state: 42601
我该如何解决?
提前致谢!
您不能在language sql
函数中使用return query
。
当您使参数区分大小写时,您还必须在使用它们时引用它们。
但是当您从"INVENTORY"
表中返回所有行时,您还需要将函数声明为returns setof
“INVENTORY”`
CREATE FUNCTION public."getInventory"("vals1Arg" character varying[], "vals2Arg" character varying[])
RETURNS setof "INVENTORY"
LANGUAGE sql
AS
$BODY$
CREATE TEMP TABLE t1 AS
SELECT * FROM unnest("vals1Arg") AS u(c);
CREATE TEMP TABLE t2 AS
SELECT * FROM unnest("vals2Arg") AS u(c);
SELECT i.*
FROM "INVENTORY" i
JOIN t1 ON i."COLUMN_1" = t1.c
JOIN t2 ON i."COLUMN_2" = t2.c;
$BODY$;
但是临时表是不必要的(并且会减慢查询速度)。 您可以直接在查询中使用unnest
:
CREATE FUNCTION public."getInventory"("vals1Arg" character varying[], "vals2Arg" character varying[])
RETURNS setof "INVENTORY"
LANGUAGE sql
AS
$BODY$
SELECT i.*
FROM "INVENTORY" i
JOIN unnest("vals1Arg") AS t1(c) ON i."COLUMN_1" = t1.c
JOIN unnest("vals2Arg") AS t2(c) ON i."COLUMN_2" = t2.c;
$BODY$;
但是你真的想加入参数吗? 也许你想要一个“IN”条件?
CREATE FUNCTION public."getInventory"("vals1Arg" character varying[], "vals2Arg" character varying[])
RETURNS setof "INVENTORY"
LANGUAGE sql
AS
$BODY$
SELECT i.*
FROM "INVENTORY" i
WHERE i."COLUMN_1" = any("vals1Arg")
AND i."COLUMN_1" = any("vals2Arg");
$BODY$;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.