我正在使用dbms_scheduler.create_job从我的Oracle Apex应用程序启动plsql过程。工作立即开始。
该过程失败,因为它使用Oracle Apex集合,并且不会在Oracle Apex应用程序上下文之外运行。
互联网上有一些代码examples,显示了如何创建Oracle Apex应用程序上下文,但我想知道是否可以使用现有的上下文。例如,将会话ID传递给作业并在那里重复使用。
如果可以,那么如何做到这一点,Oracle Apex 4.02和5.02会有所不同吗?
答案 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;