2011-10-17 37 views
-1

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

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

我的问题是,我怎么可以从第一个函数唤起第二个函数,将值从第一个传递到第二个函数?

我认为这足以作为函数的相关部分,它构造了电子邮件的不同元素,包括电子邮件地址,主题,邮件正文,然后继续创建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; 

任何帮助,非常感谢。

+0

请显示完整的错误信息,函数automatortalk(l_email)'和(简化)第一个函数的定义。我怀疑这个错误来自'automatortalk(l_email)'。如果你帮助我们,我们会帮助你。 –

回答

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

+0

我不知道如果我能保持它的一切就这么简单,但有一个电子邮件变量称为l_email,其被分配返回值email_me,一个独特的类型。所以第一行是:'CREATE OR REPLACE FUNCTION email_maker_for_work_order(l_work_order_id integer,l_content_ids integer []) RETURNS email_me AS',然后是函数的主体,这个函数很复杂,而且太长了,不能发布到这里。基本上,有由循环控制的'SELECT INTO'序列,然后返回类型为email_me的l_email。我想采取这种类型,并将其传递给使用(email_me)arg的实际电子邮件功能。 – Smittles

+1

@Jon:如果你在你的问题中编辑这些信息会更好,为了更好的格式和每个人都能看到。 –

+0

于是,我就做了一些试验,只是'RETURN l_email'我把'SELECT的emailer(l_email)'这不实际发送电子邮件到我面前,但一个错误打破了功能:'错误:控制达到结束函数没有RETURN' – Smittles

相关问题