创建一个不返回任何内容的用户定义函数

Posted

技术标签:

【中文标题】创建一个不返回任何内容的用户定义函数【英文标题】:creating a user defined function that doesn't return anything 【发布时间】:2012-10-23 07:00:35 【问题描述】:

我正在尝试。我有身体: select form from bookings where id=$1 其中 $1 是函数接受的第一个也是唯一一个参数。

我试过了

create function findBookgins(character varying(100)) returns void
select form from bookings where id=$1;

我在选择时遇到错误。我只想显示创建的表格。

【问题讨论】:

从 id=$1 的预订中选择表格;更改为从 id=$1; 的预订中选择 更改您的返回类型,然后尝试。 我改成整数还是一样 【参考方案1】:

函数调用应该类似于:

SELECT * FROM findBookgins('FooBar' :: character varying);

或者

SELECT findBookings('Foo');

或者

Perform findBookings('Bar'); 
/* note this call will not return anything but 
   is only available when calling function from other functions */

编辑: 好的,让我们一步一步看问题。 首先什么都不返回: Here's a perfectly good explanation about how function return works in postgresql

接下来如何定义函数(因为你的代码是纯sql,我猜你也需要sql中的函数):

CREATE OR REPLACE FUNCTION findBookgins(prm_booking character varying(100))
  RETURNS SETOF bookings AS
    'SELECT * FROM bookings WHERE id = $1';
  LANGUAGE sql VOLATILE
  ROWS 1000;

这个函数应该返回所有符合你给定条件的预订:

SELECT * FROM findBookings('15');

将返回所有 ID 为 15 的预订。

我假设这就是你想要做的,因为否则你的函数不会做任何事情,要使用你需要 plpgsql 函数的循环

更多关于 plpgsql 过程语言语法here

【讨论】:

好吧,你说得对,我不想返回 void。 'LANGUAGE sql VOLATILE ROWS 1000; 是什么意思? ' 做吗? 这是一本关于函数波动的手册:postgresql.org/docs/8.2/static/xfunc-volatility.html 至于行数计数器,它是可选的,它限制了函数返回的行数。 LANGUAGE 定义用于语法的过程语言。 'sql' 表示它可能适用于所有 SQL 服务器。 postgresql 特有的是 pl/pgsql,它稍微慢一些,但有更多的选择。关于程序语言的答案底部有一个链接。 稳定和不可变有什么区别?当然有人可以更新表格,但其他一切都一样,这会使其稳定吗? 不可变基本上意味着函数的返回将在创建时定义,除非函数被修改,否则它不会改变。该手册涵盖了其余信息。如果您还有其他与此无关的问题,您应该尝试在 *** 中搜索,或者如果文档解释不够清楚,则将它们创建为新的 onesi【参考方案2】:

您的函数中有语法错误。您需要正确引用函数的主体。

CREATE FUNCTION findBookgins(character varying(100)) RETURNS VOID AS
$$
  SELECT form FROM bookings WHERE id=$1;
$$
LANGUAGE SQL
;

我认为documentation on SQL-based functions 对您特别有帮助。

顺便说一句,我真的不敢相信你想让这个特定的函数什么都不返回。这有什么意义?

【讨论】:

select 语句不会像往常一样显示吗? 在这种特殊情况下,您会收到类型不匹配错误,因为您将函数声明为返回类型 VOID,但 select 语句将尝试返回字段“form”的类型。

以上是关于创建一个不返回任何内容的用户定义函数的主要内容,如果未能解决你的问题,请参考以下文章

试图让 Excel UDF 自定义单元格格式不返回任何内容“(空单元格)”或“格式化的用户输入”

Fetch Request 执行方法不返回任何内容

没有从 postgresql 函数返回任何东西?

自定义模板标记查询集不返回任何内容

在 PostgreSQL 中返回表的用户定义函数

用户定义的函数返回#Value