Oracle调度程序错误:安全组ID(您的工作区标识)无效

时间:2017-08-28 10:39:57

标签: oracle plsql oracle-sqldeveloper oracle-apex

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

  

" ORA-20001:安全组ID(您的工作区标识)无效。 ORA-06512:at" APEX_050100.WWV_FLOW_SECURITY",2939行ORA-06512:at   " APEX_050100.HTMLDB_UTIL",第3014行ORA-06512:第7行ORA-06512:   第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 developer中手动创建作业时,它可以工作。但是当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;

1 个答案:

答案 0 :(得分:0)

尝试更改此内容:

git branch -f master HEAD

git push -f origin master

对此:

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) 创建一个作业,然后从那里调用您的程序。