Plsql 运行Oracle计划程序时出错:ORA-20001:必须从应用程序会话中调用此过程

Plsql 运行Oracle计划程序时出错:ORA-20001:必须从应用程序会话中调用此过程,plsql,oracle-apex,Plsql,Oracle Apex,我正在与Oracle Apex建立一个交互式报告。目前,我使用apex\u-mailpackage创建了一个触发器,以便在表更新时发送电子邮件。我还创建了一个调度器,它运行一个每天更新表的过程。过程本身可以成功运行,但当它在作业中运行时,作业失败,详细错误为 ORA-20001: This procedure must be invoked from within an application session. ORA-06512: at "APEX_050000.WWV_FLOW_MAIL"

我正在与Oracle Apex建立一个交互式报告。目前,我使用
apex\u-mail
package创建了一个触发器,以便在表更新时发送电子邮件。我还创建了一个调度器,它运行一个每天更新表的过程。过程本身可以成功运行,但当它在作业中运行时,作业失败,详细错误为

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;
我在互联网上搜索,发现这与安全问题有关。我尝试使用
从apex\u应用程序中选择工作区\u id,其中应用程序\u id=:p\u app\u id
并添加命令
wwv\u flow\u api来添加工作区id。设置\u安全性\u组\u id(工作区\u 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;
创建或替换触发电子邮件\u更新
更新用户信息后
每行
开始
apex_mail.send(
p_to=>'Helen@oracle.com', 
p_from=>'Jason@oracle.com',
p_body=>“”,
p_body_html=>“请查看应用程序了解详细信息”);,
p_sub=>“警报电子邮件”);
终止

我怎样才能修好它?提前感谢您的帮助

不要使用apex_mail发送邮件,而是尝试使用另一个基于UTL_SMTP或UTL_mail的过程。你可以在这里找到例子。APEX\u邮件无法从计划作业中工作,因为该作业在单独的会话中运行。

请尝试使用另一个基于UTL\u SMTP或UTL\u邮件的过程,而不是使用APEX\u邮件发送邮件。你可以在这里找到例子。APEX_邮件无法从计划的作业中工作,因为该作业在单独的会话中运行。

我也面临同样的问题,但它通过APEX_应用程序中的选择工作区id得到解决,其中应用程序id=:p_应用程序id,并添加了一个命令wwv_flow_api。设置安全组id(工作区id);在apex_mail.send()调用之前的相同函数和过程/函数中。希望这能对您有所帮助。这对我的程序不起作用。我也面临着同样的问题,但它通过从apex_应用程序中选择工作区_id解决了,其中应用程序_id=:p_app_id,并添加了一个命令wwv_flow_api.set_security_group_id(工作区_id);在apex_mail.send()调用之前的相同函数和过程/函数中。希望这对你有帮助。这对我的程序不起作用