Plsql 如何将游标结果作为过程中的参数传递

Plsql 如何将游标结果作为过程中的参数传递,plsql,cursor,Plsql,Cursor,我有一个返回两行的游标: Attach name Attach MIME type ---------- --------------- abc.pdf application/pdf xyz.pdf application/pdf 现在,我想将这些值传递到一个过程**中,并在下面标记参数 send_smtp_mail(p_to => 'xyx@xyz.com',p_from => 'xyx@xyz.

我有一个返回两行的游标:

Attach name         Attach MIME type
----------          ---------------
abc.pdf             application/pdf
xyz.pdf             application/pdf
现在,我想将这些值传递到一个过程**中,并在下面标记参数

send_smtp_mail(p_to => 'xyx@xyz.com',p_from => 'xyx@xyz.com',p_subject => 'TEst',p_text_msg => NULL,p_attach_name=> ********,p_attach_mime=> *********)

我该怎么做呢?

如果有一个游标,那么应该有一个循环,您可以在其中使用该游标返回的值。大概是这样的:

begin
  for cur in (select attach_name, attach_type from some_table)
  loop
    send_smtp_mail
     (p_to          => 'xyx@xyz.com',
      p_from        => 'xyx@xyz.com',
      p_subject     => 'TEst',
      p_text_msg    => NULL,
      p_attach_name => cur.attach_name,         --> this
      p_attach_mime => cur.attach_mime_type     --> and this
    );
  end loop;
end;

如果可以更改“发送smtp邮件”功能,则可以将光标作为参数传递,将参数p_attach_name和p_attach_mime替换为p_attachment_光标:


谢谢你的回复。虽然它不能解决我的问题。实际上,我只需要调用该过程一次,并且我必须在该调用中传递游标的结果。我不知道我怎么能做到。可能是数组还是什么?一旦我调用了这个过程,我需要处理这个游标获取的REORD的结果……好吧,这取决于你的代码到底是什么样子的。例如,您可以将LISTAGG应用于查询返回的结果,并将连接的附加名称和mime类型传递给SEND_SMTP_MAIL过程。问题是:该程序将如何处理这些值?你处理好了吗?我刚刚在我的评论中详细阐述了这个问题。在这里,我写了一段代码…关于我的过程在得到值后做了什么。你能帮我查一下吗。。我认为如果我使用一个数组,那么这个问题就会得到解决…但我不确定如何做到这一点…似乎整个过程应该在一个过程中完成,而不是两个过程。这只是发送SMTP邮件的包装。主要问题是什么?发送带有多个附件的邮件?如果是这样的话,看看这个博客:下面的评论表明它有效。我没有尝试过。但是在这种情况下,我应该在哪里打开光标呢。我必须在一个进程中声明游标,然后在调用第二个进程时传递它…对..现在我应该在第二个进程中在哪里打开游标?然后获取行?有可能吗?也许像这里描述的那样创建一个包对您来说是一个解决方案?
CREATE OR REPLACE PROCEDURE send_smtp_mail(..., p_attachment_cursor IN SYS_REFCURSOR)
AS
  attach_name ...
  attach_mime ...
BEGIN
LOOP
FETCH p_attachment_cursor INTO attach_name, attach_mime ...
EXIT WHEN p_attachment_cursor%NOTFOUND;

-- process data as needed
END LOOP;

CLOSE p_cursor;
END;
/