PL / SQL - ссылка на результаты запроса в вызовах API - PullRequest
0 голосов
/ 23 мая 2018

У меня следующий запрос:

SELECT DISTINCT purchase_authorizer_api.get_userid('30', pagl.authorize_id)
FROM purch_authorize_group_line pagl join purchase_authorizer pa
ON pagl.authorize_id = pa.authorize_id
WHERE pagl.authorize_group_id = '30-QA-NUC'
AND pa.notify_user = 'TRUE';

, который дает мне идентификаторы пользователей для авторизаторов PO в этой группе авторизации.У меня может быть несколько авторизаторов ПО.Мне нужно иметь возможность отправить их все по электронной почте.

Я пытаюсь создать действие события в нашей системе ERP, которое будет запускать следующее при каждом выпуске ПО:

BEGIN
   command_sys.mail(from_user_name_ => 'IFSAPP', 
                    to_user_name_ => 'youremail@yourdomain.com', 
                    subject_ => 'Test subject', 
                    text_ => 'Test message body');
   COMMIT;
 END;

Я могу ввести несколько идентификаторов пользователей в разделе to_user_name, но мне трудно понять, как я могу получить результаты этого запроса в разделе to_user_name?

РЕДАКТИРОВАТЬ: я все еще пытаюсь, но я 'я не могу заставить его работать:

CREATE PROCEDURE a_proc
AS
cursor get_emails is
SELECT DISTINCT purchase_authorizer_api.get_userid('30', pagl.authorize_id) AS "EMAIL"
FROM purch_authorize_group_line pagl join purchase_authorizer pa
ON pagl.authorize_id = pa.authorize_id
WHERE pagl.authorize_group_id = '30-PM-COM'
AND pa.notify_user = 'TRUE';
result_ VARCHAR2(500);

BEGIN
    OPEN  get_emails;
    FETCH get_emails BULK COLLECT INTO vi_emails;
    CLOSE get_emails;

    FOR indx IN 1..vi_emails.COUNT LOOP
     command_sys.mail(from_user_name_ => 'IFSAPP', 
                    to_user_name_ => result_, 
                    subject_ => 'Test subject', 
                    text_ => 'Test message body');
    END LOOP;
END a_proc;

EDIT2:

Я обновил это:

    CREATE OR REPLACE PROCEDURE a_proc
is vi_get_emails varchar2(500);
cursor get_emails is
SELECT DISTINCT purchase_authorizer_api.get_userid('30', pagl.authorize_id) AS "EMAIL"
FROM purch_authorize_group_line pagl join purchase_authorizer pa
ON pagl.authorize_id = pa.authorize_id
WHERE pagl.authorize_group_id = '30-PM-COM'
AND pa.notify_user = 'TRUE';

BEGIN
    OPEN  get_emails;
    FETCH get_emails  INTO vi_get_emails;
    CLOSE get_emails;

  FOR rec_ IN get_emails LOOP
     command_sys.mail(from_user_name_ => 'IFSAPP', 
                    to_user_name_ => vi_get_emails, 
                    subject_ => 'Test subject', 
                    text_ => 'Test message body');
    END LOOP;
END a_proc;

, который компилируется без ошибок.Тем не менее, электронные письма пользователям не отправляются.

1 Ответ

0 голосов
/ 23 мая 2018
SELECT
    LISTAGG(EMAIL,',') WITHIN GROUP(ORDER BY EMAIL) AS LIST
FROM
    (
        SELECT
            'abc@abc.com' AS EMAIL
        FROM
            DUAL
        UNION
        SELECT
            'xyz@abc.com' AS EMAIL
        FROM
            DUAL
        UNION
        SELECT
            'def@abc.com' AS EMAIL
        FROM
            DUAL
        UNION
        SELECT
            'ddd@abc.com' AS EMAIL
        FROM
            DUAL
        UNION
        SELECT
            'fff@abc.com' AS EMAIL
        FROM
            DUAL
        UNION
        SELECT
            'ggg@abc.com' AS EMAIL
        FROM
            DUAL
    );

Вывод -

LIST
abc@abc.com,ddd@abc.com,def@abc.com,fff@abc.com,ggg@abc.com,xyz@abc.com

Вы можете сохранить результаты этого запроса в переменной и передать в качестве аргумента.

Надеюсь, это сработаетдля тебя.

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