2017-08-28 4 views
0

J'essaie de créer un travail de planificateur Oracle (envoi de courrier) par processus pl/sql (le travail est créé en cliquant sur le bouton). Il crée avec succès fin du travail, mais l'emploi toujours avec l'erreur:Erreur du planificateur Oracle: L'ID du groupe de sécurité (votre identité d'espace de travail) n'est pas valide

"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.

J'ai aussi essayé de mettre security_group_id directement (ou 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) mais il termine toujours avec la même erreur que mon exemple de code. Lorsque j'essaie de créer un travail manuellement dans SQL Developer cela fonctionne. Mais lorsque le travail est créé par le processus pl/sql, il finit avec l'erreur mentionnée. Le travail est créé avec succès dans les deux cas (processus pl/sql ou manuellement) avec les mêmes paramètres, donc je ne comprends pas pourquoi dans le cas où le travail est créé par pl/sql processus, il finit avec erreur.

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 => ''norepl[email protected]****.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; 

Répondre

0

Essayez de changer ceci:

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; 

à ceci:

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) 

En tout état de cause, il serait préférable de mettre votre logique dans un paquet dans la base de données et créer un emploi avec job_type => 'STORED_PROCEDURE' et appelez votre procédure à partir de là.

+0

J'ai essayé mais j'ai eu une erreur: ORA-20001: Cette procédure doit être appelée à partir d'une session d'application. ORA-06512: à "APEX_050100.WWV_FLOW_MAIL", à la ligne 595 ORA-06512: à "APEX_050100.WWV_FLOW_MAIL", à la ligne 621 ORA-06512: à "APEX_050100.WWV_FLOW_MAIL", à la ligne 654 ORA-06512: à « APEX_050100 .WWV_FLOW_MAIL_API ", ligne 47 ORA-06512: à la ligne 17 – john179

+0

Vous n'avez pas le temps de répondre maintenant, mais ce fil peut aider - https://community.oracle.com/thread/3998543 – RLOG

+0

Aussi, essayez d'utiliser' apex_mail.send' au lieu de 'HTMLDB_MAIL.SEND', suivi de' apex_mail.push_queue(); ' – RLOG