【问题标题】:Run oracle query (SQL) every 30 seconds and once count equals 8 it should proceed further and finish the job每 30 秒运行一次 oracle 查询(SQL),一旦计数等于 8,它应该继续进行并完成工作
【发布时间】:2015-08-14 19:17:39
【问题描述】:

我在互联网上寻找解决问题的方法,但找不到合适的解决方案。可以请一些例子帮助和指导我。

在 Oracle em 控制台中,我有一个运行至少 1 小时的作业,并且在作业运行过程中它将更新 Oracle 中的几个表。

基本上我希望 SQL 查询每 1 分钟运行一次,一旦计数等于 8,它应该停止并继续前进....

TABLE_NAME: TASK - 此表将在 1 小时处理期间更新

ID TYPE_ID VALUE
1  12      TEST1
2  13      TEST2
3  14      TEST3
4  15      TEST4
5  16      TEST5

感谢您的帮助。

【问题讨论】:

  • “基本上我希望 SQL 查询每 1 分钟运行一次,一旦计数等于 8,它应该停止并继续前进....” 什么 SQL?算什么?如果它从不完全等于 8 但超过 8(即从 7 跳到 9+)怎么办?它应该继续做什么?
  • 嗨 Anthony,Count 将是 ID,并且 count 不会超过 8。我有一些带有 jUnit 断言的 if 块,所以我只想在 count 达到 8 时进行断言。

标签: sql oracle plsql scheduled-tasks dbms-scheduler


【解决方案1】:

您可以使用 DBMS_SCHEDULER 创建一个作业并安排它。您的所有逻辑都可以驻留在 PL/SQL procedure 中,然后 schedule 以所需的intervals 执行该过程。

例如,

SQL> BEGIN
  2    DBMS_SCHEDULER.create_job (
  3      job_name        => 'test_job',
  4      job_type        => 'PLSQL_BLOCK',
  5      job_action      => 'BEGIN my_job_procedure; END;',
  6      start_date      => SYSTIMESTAMP,
  7      repeat_interval => 'freq=0; byminute=0; bysecond=30;',
  8      end_date        => NULL,
  9      enabled         => TRUE,
 10      comments        => 'Job defined entirely by the CREATE JOB procedure.');
 11  END;
 12  /

PL/SQL procedure successfully completed.

SQL>
SQL> SELECT JOB_NAME, ENABLED FROM DBA_SCHEDULER_JOBS where job_name ='TEST_JOB'
  2  /

JOB_NAME                 ENABL
--------------------     -----
TEST_JOB                 TRUE

SQL>

上述作业将根据您的 SYSTIMESTAMP 启动,然后每 30 秒执行一次过程 my_job_procedure

查看更多示例here

【讨论】:

  • 谢谢拉利特。实际上这是测试的一部分,所以我不会被允许创建一个过程..
  • @user3463885 没问题,创建一个匿名 PL/SQL 块,因此您不创建任何数据库对象,您只需执行您想要的逻辑。
猜你喜欢
  • 2012-03-26
  • 1970-01-01
  • 1970-01-01
  • 2015-01-18
  • 1970-01-01
  • 1970-01-01
  • 2021-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多