求 Oracle 大神指教,更具时间自动更新状态
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求 Oracle 大神指教,更具时间自动更新状态相关的知识,希望对你有一定的参考价值。
我有一张表,字段: Status(状态)、ExpireTime(过期时间)
效果:ExpireTime < SystemTime(当前时间) 时:状态为:未过期
ExpireTime > SystemTime 时:状态为:已过期
能不能自动实现更新?(即: 当SystemTime大于ExpireTime时,数据库自动将Status更新为已过期)......
求指点,
创建
variable job_feeid_create NUMBER;
begin
sys.dbms_job.submit(:job_feeid_create,'wlk_check_fee;',sysdate,'TRUNC(SYSDATE+1)');
commit;
end;
在命令控制台中这样就可以建产一个作业了。sysdate表示当前作业将来执行的时间,sysdate+1表示调用频率。
描述 INTERVAL参数值
每天午夜12点 'TRUNC(SYSDATE + 1)'
每天早上8点30分 'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'
每星期二中午12点 'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'
每个月第一天的午夜12点 'TRUNC(LAST_DAY(SYSDATE ) + 1)'
每个季度最后一天的晚上11点 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'
每星期六和日早上6点10分 'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)'
运行
begin
dbms_job.run(:job_feeid_create);
end;
查询作业记录
select * from user_jobs
具体讲解:
1.确保Oracle的工作模式允许启动任务队列管理器
Oracle定时执行“Job Queue”的后台程序是SNP进程,而要启动SNP进程,首先要确保整个系统的模式是可以启动SNP进程的,这需要以 DBA的身份去执行如下命令:
svrmgrl>; alter system enable restricted session;
或sql>; alter system disenable restricted session;
利用如上命令更改系统的会话方式为disenable restricted,为SNP的启动创造条件。
2.确保Oracle的系统已经配置了任务队列管理器的启动参数
SNP的启动参数位于Oracle的初始化文件中,该文件放在$ORACLE_HOME/dbs路径下,如果Oracle的SID是myora8的话,则初始化文件就是 initmyora8.ora,在文件中对SNP启动参数的描述部分如下:
job_queue_process=n
job_queue_interval=N
第一行定义SNP进程的启动个数为n。系统缺省值为0,正常定义范围为0~36,根据任务的多少,可以配置不同的数值。
第二行定义系统每隔N秒唤醒该进程一次。系统缺省值为60秒,正常范围为1~3600秒。事实上,该进程执行完当前任务后,就进入睡眠状 态,睡眠一段时间后,由系统的总控负责将其唤醒。
如果该文件中没有上面两行,请按照如上配置添加。配置完成后,需要重新启动数据库,使其生效。注意:如果任务要求执行的间隔很短的 话,N的配置也要相应地小一点。
3.将任务加入到数据库的任务队列中
用Oracle的dbms_job包中的存储过程,将任务加入到任务队列中:
dbms_job.submit( job out binary_integer,
what in archar2,
next_date in date,
interval in varchar2,
no_parse in boolean)
其中:
●job:输出变量,是此任务在任务队列中的编号;
●what:执行的任务的名称及其输入参数;
●next_date:任务执行的时间;
●interval:任务执行的时间间隔。
下面详细讨论一下dbms_job.submit中的参数interval。严格地讲,interval是指上一次执行结束到下一次开始执行的时间间隔,当interval设置为null 时,该job执行结束后,就被从队列中删除。假如我们需要该job周期性地执行,则要用‘sysdate+m’表示。
将任务加入到任务队列之前,要确定执行任务的数据库用户,若用户是scott, 则需要确保该用户拥有执行包dbms_job的权限;若没有,需要以 DBA的身份将权利授予scott用户:
svrmgrl>; grant execute on dbms_job to scott;
4.将要执行的任务写成存储过程或其他的数据库可执行的pl/sql程序段
例如,我们已经建立了一个存储过程,其名称为my_job,在sql/plus中以scott用户身份登录,执行如下命令:
sql>; variable n number;
sql>; begin
dbms_job.submit(:n‘my_job;’,sysdate,
‘sysdate+1/360’);
commit;
end;
/
系统提示执行成功。
Sql>; print :n;
系统打印此任务的编号,例如结果为300。
如上,我们创建了一个每隔4分钟执行一次的任务号为300的任务。可以通过Oracle提供的数据字典user_jobs察看该任务的执行情况:
sql>; select job,next_date,next_sec,failures,broken from user_jobs;
执行结果如下:
job next_date next_sec failures broken
300 2000/10/10 11:45:15 0 N
这表示任务号为300的任务,下一次将在2000/10/10 11:45:15执行,此任务的执行失败记录为0次。注意:当执行job出现错误时,Oracle将其记录在日志里,失败次数每次自动加1。当执行失败次数达到16时,Oracle就将该job标志为broken。此后,Oracle不再继续执行它,直到用户调用过程dbms_job.broken,重新设置为not broken,或强制调用dbms_job.run来重新执行它。
除了以上我们讨论的submit存储过程之外,Oracle还提供了其他许多存储过程来操作任务。例如:dbms_job.change 、 dbms_job.what、dbms_job.interval可以用来修改提交的任务。要想删除该任务,只需运行dbms_job.remove(n)即可,其中n为任务号。 参考技术A 创建一个存储过程来更新表的数据,然后在创建一个job,实现每天的午夜0点更新状态信息。 参考技术B 数据库上建一个JOB,定时执行,JOB的内容是执行一个存储过程,在存储过程中做你想做的检查和更新。
我用JQuery miniui 做了一个表格,求大神指教一个下拉框问题
上方三个必选条件(input),input的下拉框内容是从数据库里拿出来的,要求是在输入框里输入达到模糊查询(我已完成),但是如果输入了下拉框里没有的数字或字母,下拉框还是会显示一个空白的下拉框
请问大神是否有什么办法当输入不存在的东西模糊查询后,别让input出现那个空白的下拉框,请详述,万分感谢
<input id="myCar" list="cars" />
<datalist id="cars">
<option value="BMW">
<option value="Ford">
<option value="Volvo">
</datalist>追问
如果有另一种情况:如果输入的是已存在于数据库的内容,则允许执行下一步,但input框有一种缺陷,输入不存在于数据库的内容后,会出现一个没有内容的空白下拉框,一旦用户点了这个空白下拉框,input框内的内容就不会被检查,请问大神,有没有什么办法可以让输入的内容不是数据库里的内容时别出现空白的下拉框么?只要别出现就好
追答既然是下拉框,那肯定是先从数据库中读取数据,你遍历获取到的数据到option输出,然后模糊查找的时候就不用再次查找数据库了呀,datalist带有模糊查询功能,直接在输入框中输入内容,不存在什么都不会显示的
这是上面给你例子的截图,并没有空白下拉框
以上是关于求 Oracle 大神指教,更具时间自动更新状态的主要内容,如果未能解决你的问题,请参考以下文章
求大神指教,WPF安装成功后运行出现解决方案配置“DebugMCD”无效是怎么回事
hbuild mui 开发的webapp 怎么实现切换选项卡,然后执行一次下拉刷新更新数据,求各位大神指教