PL / Python:如何返回空集?

时间:2015-06-25 12:23:55

标签: sql postgresql plpython

我有一个在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称为func2func3如何检查返回0行?

1 个答案:

答案 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)