我有一个在int[]
上运行的功能。我希望能够检查数组是否为空,并且在这种情况下停止,因为没有任何事情要做。
这是我的功能:
CREATE OR REPLACE FUNCTION func2(c integer[])
RETURNS SETOF func_type AS
$BODY$
result=plpy.execute("SELECT * FROM func1(ARRAY%s)"%c)
return result;
$BODY$
LANGUAGE plpythonu VOLATILE
func_type定义为:
CREATE TYPE func_type AS
(x integer,
y numeric,
z integer,
zz integer);
当我添加支票时:
$BODY$
if not c:
return
我收到了一个错误:
ERROR: returned object cannot be iterated
DETAIL: PL/Python set-returning functions must return an iterable object.
我知道我必须返回func_type
并且func_type
没有构建,因为没有plpy.execute
但是我怎么能在此时返回它?另外,假设func3
称为func2
。 func3
如何检查返回0行?
答案 0 :(得分:2)
如果您声明函数strict
,那么它将不会被执行,只要其任何参数为null
null
http://www.postgresql.org/docs/current/static/sql-createfunction.html
如果传递的数组为空并且您想返回一个空集,则返回一个空数组:
create or replace function func2(c integer[])
returns setof func_type as
$body$
if not c:
return []
$body$ language plpythonu;
select * from func2(array[]::int[]);
x | y | z | zz
---+---+---+----
(0 rows)