运行Oracle调度程序时出错:ORA-20001:必须在应用程序会话中调用此过程

时间:2016-12-12 07:08:18

标签: plsql oracle-apex

我正在与Oracle Apex构建交互式报告。目前,我使用apex_mail包创建了一个触发器,以便在表更新时发送电子邮件。我还创建了一个调度程序,它运行一个每天更新表的过程。该过程可以单独成功运行,但是当它在作业中运行时,作业失败,并且详细错误是

ORA-20001: This procedure must be invoked from within an application session. 
ORA-06512: at "APEX_050000.WWV_FLOW_MAIL", line 562 
ORA-06512: at "APEX_050000.WWV_FLOW_MAIL", line 588 
ORA-06512: at "APEX_050000.WWV_FLOW_MAIL", line 621 
ORA-06512: at "APEX_050000.WWV_FLOW_MAIL_API", line 47 
ORA-06512: at "USER.EMAIL_UPDATED", line 3 
ORA-04088: error during execution of trigger 'USER.EMAIL_UPDATED' 
ORA-06512: at "USER.CHANGE_CURRENT_CONTACT", line 19 
ORA-06512: at line 1

我只需将use_current_session属性设置为true即可使用以下命令成功运行作业。

 BEGIN
 DBMS_SCHEDULER.RUN_JOB(
    JOB_NAME            => 'update_contact',
    USE_CURRENT_SESSION => TRUE);
 END;

我在互联网上搜索并发现它与安全问题有关。我尝试使用select workspace_id from apex_applications where application_id = :p_app_id添加工作区ID,并添加命令wwv_flow_api.set_security_group_id(workspace_id);。但这不起作用。

以下是我发送电子邮件的源代码。

 create or replace trigger email_updated
 after update on users_info
 for each row
 begin
 apex_mail.send(
    p_to       => 'Helen@oracle.com', 
    p_from     => 'Jason@oracle.com',
    p_body     => '',
    p_body_html     => '<b>Please</b> review the app for details');,
    p_subj     => 'Alert Email'); 
  end;

我该如何解决?在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

不要使用apex_mail发送邮件,而是尝试使用基于UTL_SMTP或UTL_MAIL的其他过程。您可以在(sending email from Oracle)找到示例。 APEX_MAIL无法在预定作业中运行,因为作业在单独的会话中运行。