Oracle scheduler error: Security Group ID (your workspace identity) is invalid

Oracle scheduler error: Security Group ID (your workspace identity) is invalid

我正在尝试通过 pl/sql 进程创建 oracle 调度程序作业(发送邮件)(作业是在单击按钮时创建的)。它成功创建作业,但作业总是以错误完成:

"ORA-20001: Security Group ID (your workspace identity) is invalid. ORA-06512: at "APEX_050100.WWV_FLOW_SECURITY", line 2939 ORA-06512: at "APEX_050100.HTMLDB_UTIL", line 3014 ORA-06512: at line 7 ORA-06512: at line 7.

我也试过直接设置security_group_id(apex_util.set_security_group_id(p_security_group_id => my_worspace_id或者 wwv_flow_api.set_security_group_id(p_security_group_id=>my_worspace_id) 但它总是以与我的示例代码相同的错误结束。当我尝试在 sql 开发人员中手动创建工作时,它起作用了。但是,当作业由 pl/sql 进程创建时,它会以上述错误结束。在两种情况下(pl/sql 进程或手动)都使用相同的参数成功创建了作业,所以我不明白为什么当 pl/sql 进程创建作业时它以错误结束。

    BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
            job_name => '"INVERTORY"."TEST"',
            job_type => 'PLSQL_BLOCK',
            job_action => 'begin
for c1 in (
   select workspace_id
     from apex_applications
    where application_id = 104 )
loop
   apex_util.set_security_group_id(p_security_group_id =>
c1.workspace_id);
end loop;

HTMLDB_MAIL.SEND(
               p_to =>  ''****.****@****.com'',
               p_from => ''noreply@****.com'',
               p_subj =>  ''test mail'',
               p_body => ''komu'');

            end;',
            number_of_arguments => 0,
            start_date => TO_TIMESTAMP_TZ('2017-08-28 10:29:57.000000000 EUROPE/PRAGUE','YYYY-MM-DD HH24:MI:SS.FF TZR'),
            repeat_interval => NULL,
            end_date => NULL,
            enabled => TRUE,
            auto_drop => FALSE,
            comments => '');

    DBMS_SCHEDULER.SET_ATTRIBUTE( 
             name => '"INVERTORY"."TEST"', 
             attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_OFF);

    DBMS_SCHEDULER.enable(
             name => '"INVERTORY"."TEST"');
END;

尝试改变这个:

for c1 in (
   select workspace_id
     from apex_applications
    where application_id = 104 )
loop
   apex_util.set_security_group_id(p_security_group_id =>
c1.workspace_id);
end loop;

对此:

  SELECT MAX(workspace_id) 
  INTO v_workspace FROM apex_applications
  WHERE application_id = 104;
 --set workspace - declare v_workspace above as type number
  wwv_flow_api.set_security_group_id(v_workspace)

无论如何,最好将您的逻辑放在数据库中的一个包中并使用 job_type => 'STORED_PROCEDURE' 创建一个作业并从那里调用您的过程。