Postgres 调用 void 函数

Posted

技术标签:

【中文标题】Postgres 调用 void 函数【英文标题】:Postgres calling a void function 【发布时间】:2014-04-02 07:18:30 【问题描述】:

我有一个无效的 plsql 函数:

CREATE OR REPLACE FUNCTION do_something(p_id BIGINT) 
RETURNS void
AS $$
BEGIN
   insert ....
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;

我想从另一个 plsql 函数调用这个函数,但是在一个查询中,比如:

SELECT  do_something(m.id) 
FROM    MyTable m
WHERE   m.IsActive;

当我运行sproc 时,我得到:

错误:查询没有结果数据的目的地提示:如果你想 丢弃 SELECT 的结果,改用 PERFORM。

是否可以在 select 语句中调用 void 函数?

【问题讨论】:

【参考方案1】:

提示:如果要丢弃 SELECT 的结果,请改用 PERFORM。

PERFORM  do_something(m.id) 
FROM    MyTable m
WHERE   m.IsActive;

PERFORMSELECT 的 PL/PgSQL 替代方案,当您想丢弃结果时。它不能在 PL/PgSQL 之外使用。有关详细信息,请参阅手册。

【讨论】:

也许值得一提,PERFORM 仅在 pl/pgsql 上下文中有效。 是的,公平的。我通常会写更深入的答案,但这是一个“您是否真的阅读了错误消息/搜索错误”... :-) 我确实阅读了错误并且我确实尝试了“PERFORM”......但我一定是把它弄乱了......因为在它不起作用之前......现在它确实...... .grrr ...抱歉浪费大家的时间。

以上是关于Postgres 调用 void 函数的主要内容,如果未能解决你的问题,请参考以下文章

使用临时表调用 postgres 函数的节点导致“内存泄漏”

在 Postgres 触发函数中调用异常之前执行操作

从java调用带有UDT参数的postgres函数给SQL尚未实现异常

Node-Postgres 查询方法未调用其回调函数

为选择中的每一行调用一个函数 - Postgres

如何在 jpa 查询中调用 postgres position() 函数