【问题标题】:why dbms_job.submit doesn't work while the same code work with execute immediate?为什么 dbms_job.submit 不起作用,而相同的代码可以立即执行?
【发布时间】:2016-01-15 09:52:45
【问题描述】:

这是我第一次使用 dbms_job.submit。

以下代码不起作用:

    declare
    i_job_no BINARY_INTEGER;
begin
    dbms_job.submit(JOB => i_job_no, what =>  'declare x number; begin x := f_threads(''my_program'', '|| 6058883 ||' , '|| 2 || '); end;', next_date => sysdate);

    dbms_output.put_line(i_job_no);
end;

但同样的事情也适用于立即执行。谁能帮忙?!

> declare
    i_job_no BINARY_INTEGER;
begin
    execute immediate  'declare x number; begin x := f_threads(''my_program'', '|| 6058883 ||' , '|| 2 || '); end;';
end;

谢谢!

【问题讨论】:

  • “不起作用”是什么意思?也许您没有启动所需的数据库进程
  • 我没有收到任何错误信息

标签: oracle oracle-sqldeveloper oracleforms


【解决方案1】:

这样你的 pl/sql 块就可以工作了:

      declare
        i_job_no BINARY_INTEGER;
    begin
        dbms_job.submit(JOB => i_job_no, what =>  'declare x number; begin x := f_threads(''my_program'', '|| 6058883 ||' , '|| 2 || '); end;', next_date => sysdate);

        dbms_output.put_line(i_job_no);
        commit;
    end;

您的代码中缺少commit

问候 乔瓦

【讨论】:

  • 我添加了提交,但它仍然无法正常工作。它根本不调用 f_threads。我在函数顶部放了一个 dbms_output.put_line('I am here')。
  • 请尝试添加模式名称作为函数的前缀
  • 我在函数名之前添加了模式名,它没有解决我的问题。我google了一下。这个 dbms_job.submit 只是在 user_jobs 中提交 jjob。当我运行上面的代码时,我将 20 个作业写入 user_jobs 表。问题仍然是如何并行运行它们?
  • 我们可以使用 dbms_job.run 来运行提交的作业,但不会并行。
  • 并行运行的作业数量由 Orscle 实例参数 job_queue_processes 确定。您正在解决问题。请简化它。第一次尝试运行单个作业。然后执行 20 个作业.....
【解决方案2】:

试试这个:

declare
  i_job_no BINARY_INTEGER;
begin
  dbms_job.submit(JOB => i_job_no, what =>  'declare x number; begin x := f_threads(''my_program'', '|| 6058883 ||' , '|| 2 || '); end;', next_date => sysdate);
  dbms_output.put_line(i_job_no);
  commit;
  dbms_job.run(i_job_no);
end;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多