将返回值传递给PostgreSQL中的另一个函数

时间:2011-10-17 18:33:07

标签: function postgresql

我有两个PostgreSQL函数。一个名为email_me的类型返回一组数据,包括电子邮件地址和有关搜索的一些详细信息。另一个接受来自第一个的数据集并通过通知系统处理它,该通知系统将带有第一个的文本和细节的电子邮件发送到第一个提供的电子邮件地址。

现在我正在通过复制/粘贴(实际导出,使用单引号格式化和粘贴)测试这两个函数,第一个函数的结果集作为第二个函数的参数。

我的问题是,我如何从第一个函数中引出第二个函数,将值从第一个传递到第二个函数?

我认为这足以作为函数的相关部分,它构建电子邮件的不同元素,包括电子邮件地址,主题,邮件正文,然后继续创建CC的列表。

-- BUILD EMAIL ELEMENTS into l_email
--we always want to know the primary_contact_email -we use it in the message body
SELECT email_address INTO l_primary_contact_email FROM users  WHERE user_id = l_primary_contact_id;

l_email.email_address := l_primary_contact_email;

l_email.subject     := 'Work Order: '||l_work_order_id||' '||l_work_order_name||' has been completed.';

l_email.message_body    := 'Work Order: '||l_work_order_id||' , has been completed.  Please verify and set to closed: ' || l_jobs_url || '/jobs?workOrderId='||l_work_order_id || '\r\n\r\n Details: \r\n\r\n' || l_asset_list;


------------------------------------------------------
SELECT automatortalk(l_email);
RETURN l_email;

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以想象的任何数据类型组合都是可能的 在这里发布你的(简化)函数,我们将纠正什么不起作用。

此消息表示内容:

ERROR: control reached end of function without RETURN

在功能结束时必须缺少RETURN语句。检查所有涉及的功能!现在,如果你已经从第一个函数中调用第二个函数,那么我认为没有必要从第一个函数返回l_email。更改函数的RETURNS子句,只返回所需的内容。

所以你的解决方案看起来像这样:

CREATE OR REPLACE FUNCTION f1()
  RETURNS void AS
$BODY$
BEGIN

-- do stuff

PERFORM f2(l_email);

-- as you return void, RETURN statement is not needed.
-- Else you would have to use it - or use OUT parameters.

END;
$BODY$
  LANGUAGE plpgsql VOLATILE;

了解OUT参数here