PL/Python:如何return一个空集?
PL/Python: How to return an empty set?
我有一个在 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.
我知道我必须 return func_type
并且 func_type
没有构建因为没有 plpy.execute
但是我怎样才能做到 return 在此刻?此外,假设 func3
称为 func2
。 func3
如何检查是否有 0 行 returned?
如果您声明函数 strict
那么它将不会被执行,并且只要它的任何参数是 null
就会 return null
http://www.postgresql.org/docs/current/static/sql-createfunction.html
如果传递的数组为空,而您想要 return 一个空集,那么 return 一个空数组:
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)
我有一个在 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.
我知道我必须 return func_type
并且 func_type
没有构建因为没有 plpy.execute
但是我怎样才能做到 return 在此刻?此外,假设 func3
称为 func2
。 func3
如何检查是否有 0 行 returned?
如果您声明函数 strict
那么它将不会被执行,并且只要它的任何参数是 null
null
http://www.postgresql.org/docs/current/static/sql-createfunction.html
如果传递的数组为空,而您想要 return 一个空集,那么 return 一个空数组:
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)