2017-08-28 23 views
0

pl/sqlプロセスによってoracleスケジューラ・ジョブ(メール送信)を作成しようとしています(ジョブはボタン・クリック時に作成されます)。それは成功したジョブを作成するが、ジョブは常にエラーで終了:Oracleスケジューラ・エラー:セキュリティ・グループID(作業領域ID)が無効です

"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 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 => ''[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; 

答えて

0

てみてください、これを変更する:これに

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'を入力し、そこから手順を呼び出してください。

+0

私は試しましたが、エラーがあります。ORA-20001:このプロシージャは、アプリケーション・セッション内から起動する必要があります。 ORA-06512: "APEX_050100.WWV_FLOW_MAIL" で、ライン621 ORA-06512: "APEX_050100.WWV_FLOW_MAIL" で、ライン654 ORA-06512:APEX_050100」AT "APEX_050100.WWV_FLOW_MAIL"、ライン595 ORA-06512で.WWV_FLOW_MAIL_API "、行47 ORA-06512:行17 – john179

+0

今すぐ返信する必要はありませんが、このスレッドは役に立ちます - https://community.oracle.com/thread/3998543 – RLOG

+0

また、 'apex_mail.push_queue();'の後に 'HTMLDB_MAIL.SEND'の代わりに' apex_mail.send'を追加します。 – RLOG

関連する問題