Передать возвращенные значения другой функции в PostgreSQL - PullRequest
0 голосов
/ 17 октября 2011

У меня есть две функции 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 Ответ

1 голос
/ 17 октября 2011

Это возможно для любой комбинации типов данных, которые вы можете себе представить.
Опубликуйте ваши (упрощенные) функции здесь, и мы исправим то, что не работает.

Это сообщение означает, что оно говорит:

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 здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...