2011-10-17 38 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

相關問題