我正在尝试通过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;
答案 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)
创建一个作业,然后从那里调用您的程序。