如何在预定作业中使用Oracle Apex会话

时间:2017-02-06 09:31:01

标签: oracle session scheduled-tasks oracle-apex

我正在使用dbms_scheduler.create_job从我的Oracle Apex应用程序启动plsql过程。工作立即开始。

该过程失败,因为它使用Oracle Apex集合,并且不会在Oracle Apex应用程序上下文之外运行。

互联网上有一些代码examples,显示了如何创建Oracle Apex应用程序上下文,但我想知道是否可以使用现有的上下文。例如,将会话ID传递给作业并在那里重复使用。

如果可以,那么如何做到这一点,Oracle Apex 4.02和5.02会有所不同吗?

1 个答案:

答案 0 :(得分:0)

创建一个类型,将其传递给作业中使用的过程。使用参数创建作业。

包括包含Blob和文件名的表类型的示例:

CREATE OR REPLACE TYPE blob_files AS OBJECT(
              attachment BLOB,
              filename varchar2(255),
              mime_type varchar2(255)
             )

create or replace type blobs as table of blob_files;

declare
  attachments BLOBS;
  i NUMBER;
begin
  select blob_files(invoice_blob,invoice_filename, mime_type) 
  BULK COLLECT INTO attachments
  from receive.inv_invoice_blobs
  where invoice_id = 223730;

  i := attachments.FIRST;
  WHILE i IS NOT NULL LOOP
    htp.p(dbms_lob.getlength(attachments(i).attachment) || ' ' || attachments(i).filename);
    i := attachments.NEXT(i);
  END LOOP;
end;