Oracle APEX 动态操作锁定页面
Oracle APEX Dynamic Actions locks page
我在 Oracle APEX PAGE 中有一个动态操作,它执行 PL/SQL CODE(创建 BLOB 的存储过程)
所以当用户点击它时,后面的 javascript(动态动作,'runs' PL 和页面 'locked' 直到一切完成)
如何制作在此过程完成之前不会完全锁定浏览器的东西?
谢谢
一个 straight-forward 方法,如果您还没有移动到版本 5,那就是使用 APEX_PLSQL_JOB
package.
在数据库内部、包中的函数或过程中定义您需要的功能。
然后,使用API在后台启动该功能。
例如,如果您在包 PROJECTX_IO
中定义了一个过程 upload_pending
,那么您可以使用以下命令启动它:
declare
p_job number
begin
p_job := apex_plsql_job.submit_process(
p_sql => 'BEGIN PROJECTX_IO.upload_pending; END;',
p_status => 'Uploading');
end;
您目前没有对 p_job
中返回的职位 ID 执行任何操作。如果您知道在任何时候您只有一个后台作业 运行,那么有效的方法是将其添加到数据库中的 one-row table。这只是转到上面代码片段的底部(end;
之前):
delete from t_job;
insert into t_job values ( p_job );
然后,在后台进程中,您可以访问该进程的作业 ID。您可以在最后更改作业状态:
select job into p_job from t_job;
apex_plsql_job.update_job_status(p_job,
'Upload complete');
如何处理多个后台作业?
我在 Oracle APEX PAGE 中有一个动态操作,它执行 PL/SQL CODE(创建 BLOB 的存储过程)
所以当用户点击它时,后面的 javascript(动态动作,'runs' PL 和页面 'locked' 直到一切完成)
如何制作在此过程完成之前不会完全锁定浏览器的东西?
谢谢
一个 straight-forward 方法,如果您还没有移动到版本 5,那就是使用 APEX_PLSQL_JOB
package.
在数据库内部、包中的函数或过程中定义您需要的功能。
然后,使用API在后台启动该功能。
例如,如果您在包 PROJECTX_IO
中定义了一个过程 upload_pending
,那么您可以使用以下命令启动它:
declare
p_job number
begin
p_job := apex_plsql_job.submit_process(
p_sql => 'BEGIN PROJECTX_IO.upload_pending; END;',
p_status => 'Uploading');
end;
您目前没有对 p_job
中返回的职位 ID 执行任何操作。如果您知道在任何时候您只有一个后台作业 运行,那么有效的方法是将其添加到数据库中的 one-row table。这只是转到上面代码片段的底部(end;
之前):
delete from t_job;
insert into t_job values ( p_job );
然后,在后台进程中,您可以访问该进程的作业 ID。您可以在最后更改作业状态:
select job into p_job from t_job;
apex_plsql_job.update_job_status(p_job,
'Upload complete');
如何处理多个后台作业?