【问题标题】:PL/SQL - Referencing Query Results in API CallsPL/SQL - 在 API 调用中引用查询结果
【发布时间】:2018-05-23 16:38:30
【问题描述】:

我有以下疑问:

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 授权人的用户 ID。我可以有几个 PO 授权人。我需要能够给他们所有人发电子邮件。

我正在尝试在我们的 ERP 系统中创建一个事件操作,该操作将在发布 PO 时运行以下内容:

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 部分中输入多个用户 ID,但我很难弄清楚如何在 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;

编辑2:

我已经更新到这个:

    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;

编译时没有错误。但是,不会向用户发送电子邮件。

【问题讨论】:

  • 这很相似,但我不想做同样的事情。我不明白这是怎么重复的。
  • 我认为您需要做的是将多行或电子邮件写入一个变量,以便您可以将变量分配给 to_user_name 部分。
  • 我试过:光标 get_emails 是 SELECT 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' 和 pa.notify_user = 'TRUE';结果_VARCHAR2(500);开始结果_:=空; FOR rec_ IN get_emails LOOP command_sys.mail(from_user_name_ => 'IFSAPP', to_user_name_ => result_, subject_ => '测试主题', text_ => '测试邮件正文');返回结果_;
  • 所以,这个问题仍然没有解决,但由于它被标记为重复,我不会得到答案。什么都不感谢,怀亚特。

标签: sql plsql plsqldeveloper erp


【解决方案1】:
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

您可以将此查询的结果存储到一个变量中并将其作为参数传递。

希望这对你有用。

【讨论】:

  • 这是可能重复中引用的方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-25
  • 1970-01-01
  • 2018-12-29
  • 2015-11-21
  • 2017-03-24
  • 2011-02-02
  • 1970-01-01
相关资源
最近更新 更多