ORACLE APEX中我做了一个定时任务,要定期调用send_mail发送邮件,但总是报错
error others:ORA-20001: This procedure must be invoked from within an application session.
后发现在APEX内部PL/SQL块内可以正常调用,但在数据库中的定时任务调用就会出错!!!!!

解决方案 »

  1.   

    这是APEX的一种安全机制,在APEX之外运行其数据库内部的存储过程需要在过程中
    调用APEX的API命令,否则就会报错
    ORA-20001: This procedure must be invoked from within an application session. 
    要求必须从一个应用程序会话中调用,
    要运行从SQL Developer或计划任务调度使用数据库,需要手动设置在执行Apex的API或访问数据的情况下安全组的命令
    APEX中发送邮件
    beginapex_mail.send(
    p_to => 'to_user@their_company.com', -- change email address
    p_from => '[email protected]', -- change to your email address
    p_body => 'Main email text goes here',
    p_subj => 'APEX_MAIL Package - Plain Text message'
    );end;
    首先获取工作区编号:
    select workspace, schemas, workspace_id
    from apex_workspaces;
    然后修改为
    beginwwv_flow_api.set_security_group_id(workspace_id);apex_mail.send(
    p_to => 'to_user@their_company.com', -- change email address
    p_from => '[email protected]', -- change to your email address
    p_body => 'Main email text goes here',
    p_subj => 'APEX_MAIL Package - Plain Text message'
    );end;