Oracle 计划程序错误:安全组 ID(工作区标识)无效



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

"ORA-20001:安全组 ID(工作区标识(无效。ORA-06512:在"APEX_050100.WWV_FLOW_security",第 2939 行 ORA-06512:在 "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_idwwv_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'创建一个作业并从那里调用您的过程。

最新更新