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

时间:2012-10-23 07:00:36

标签: sql postgresql user-defined-functions

我正在尝试创建一个不返回任何内容的用户定义函数。我有身体: select form from bookings where id=$1其中$ 1是函数的第一个也是唯一的参数。

我试过

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

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

2 个答案:

答案 0 :(得分:2)

函数调用应该类似于:

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

的更多信息

答案 1 :(得分:1)

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

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

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

顺便说一下,我真的不敢相信你想要这个特殊功能什么都不返回。有什么意义呢?