2

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

我试过了

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

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

4

2 回答 2

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 */

编辑:好的,让我们一步一步看问题。首先什么都不返回: 这是一个关于函数返回如何在 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 过程语言语法的信息在这里

于 2012-10-23T07:25:52.773 回答
1

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

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

我认为有关基于 SQL 的函数的文档对您特别有帮助。

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

于 2012-10-23T07:46:22.530 回答