2015-10-15 114 views
1

我需要实现用PL/SQL编写的心跳函数,以每5分钟ping一次Web服务。我知道PL/SQL实际上不是写这个的正确语言,但它必须这样做。如何实现心跳计时器

DECLARE 
stored_time TIMESTAMP 
curr_time  TIMESTAMP 
BEGIN 
    stored_time := current_timestamp; 
    WHILE (curr_time - stored_time > 5) 
     pulse_heartbeat(); 
     stored_time := current_timestamp; 
    END WHILE 

上面的伪代码真的是我认为可以完成的唯一方法。我知道有一个与oracle的计时器包,但我不知道我是否应该使用它。有任何想法吗?

+1

你想每5分钟执行一次程序吗?如果是,则使用'DBMS_SCHEDULER'。 –

+0

是的,我只需要程序运行每5分钟来维持会话状态 –

+0

好的,然后检查解决方案。这是标准的做法。 –

回答

3

看起来你想要每5分钟安排一次程序执行。我建议使用DBMS_SCHEDULER

数据库级

BEGIN 
    DBMS_SCHEDULER.create_job (
    job_name  => 'pulse_heartbeat', 
    job_type  => 'PLSQL_BLOCK', 
    job_action  => 'BEGIN pulse_heartbeat; END;', 
    start_date  => SYSTIMESTAMP, 
    repeat_interval => 'freq=minutely; interval=5; bysecond=0;', 
    enabled   => TRUE); 
END; 
/

上述用途日历语法重复间隔每5分钟。它在数据库级创建一项工作。

OS级别

您也可以安排脚本在操作系统级别上运行。例如,在基于UNIX的平台中,您可以创建一个shell脚本并安排为cron作业

+0

这个心跳将需要为个人用户工作,而不是一份工作。是否可以创建一个时间表,并为不同的用户多次实例化它? –

+0

不清楚。该功能可以在PL/SQL代码中处理。这只是一个调度工作,它只会按需要的时间间隔执行过程。逻辑将在程序中。 –

+0

每个用户会话都会有自己的心跳。这是否意味着我将不得不为每个用户创建一个计划作业? –