调用PL/pgSQL函数忽略结果
我喜欢以与PERFORM
忽略结果相同的方式调用存储的PL/pgSQL函数,但来自普通SQL。我怎样才能做到这一点?我目前使用SELECT
来执行该功能,但是这会在控制台上输出我不需要的数据。调用PL/pgSQL函数忽略结果
我想过为特定的SELECT
语句禁用客户端输出,但我找不到任何客户端设置。也许有更好的方式来做这种电话。
在普通的sql中没有这样的功能。你可以做的是让函数不返回任何东西。
更改我的函数头没有任何返回('RETURNS integer' - >'RETURNS void'),但是如果我调用函数,我仍然会得到一个两行代码: add_translation ------------ ----- (1 row) 我的函数操纵表中的翻译字符串(更新它或将其插入为新的)。 – NagyI 2011-05-03 10:32:09
使函数返回setof something(例如int4),然后不返回任何东西。它将尽可能接近“不返回任何东西”尽可能 – 2011-05-03 11:38:36
我做了你的建议,将'RETURNS void'改为'RETURNS setof int4',并从函数中删除所有RETURN行。我仍然得到一列表,但这次(0行)结束。 – NagyI 2011-05-03 12:04:44
这是一个肮脏的黑客,我刚想出来; 背景是,我需要调用一个函数,而是指定更新,而不是一个SELECT ...也许你的背景是一样的... 所以我指定我的UPDATE这样的:
UPDATE sometable_doesnt_matter
SET some_comlumn=some_comlumn
WHERE (select my_function = 1);
我的功能总是返回整数1.
Ofc我将更改代码,以便它也可以与SELECT一起使用,但现在,作为修补程序,这适用于我。
你在使用什么客户端(psql,...)或者这是在(Java)程序中? – 2011-05-03 09:22:44
我在'psql'客户端正在执行的sql脚本中使用这个脚本,并通过'-f'开关传递文件名。 – NagyI 2011-05-03 11:48:59