【问题标题】:Oracle APEX Dynamic Actions locks pageOracle APEX 动态操作锁定页面
【发布时间】:2017-02-08 15:50:59
【问题描述】:

我在 Oracle APEX PAGE 中有一个动态操作,它执行 PL/SQL CODE(一个创建 BLOB 的存储过程)

所以当用户点击它时,后面的javascript(动态操作,'运行' PL 并且页面被'锁定'直到一切完成)

如何制作在此过程完成之前不会完全锁定浏览器的东西?

谢谢

【问题讨论】:

    标签: javascript multithreading oracle oracle-apex


    【解决方案1】:

    如果您还没有迁移到版本 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 执行任何操作。如果您知道在任何时候只有一个后台作业正在运行,那么可行的方法是将其添加到数据库中的单行表中。这简单到上面代码sn-p的底部(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');
    

    如何处理多个后台作业?

    【讨论】:

    • 不推荐使用 APEX_PLSQL_JOB 包。推荐 DBMS_SCHEDULER。
    • @JeffreyKemp 谢谢你的提示
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多