当前位置: 首页 > 图文教程 > 数据库 > Oracle > 如何解决JOB的Interval输入参数过长

Oracle
Excel VBA连接并操作Oracle
Oracle 外连接实现代码
oracle 存储过程和函数例子
Oracle 数据库操作类
ORACLE 分区表的设计
Oracle 用户权限管理方法
Oracle In和exists not in和not exists的比较分析
利用windows任务计划实现oracle的定期备份
ORACLE11g随RHEL5系统自动启动与关闭的设置方法
在oracle 数据库查询的select 查询字段中关联其他表的方法
plsql和tsql常用函数比对
plsql与tsql的语法不同
ASP.NET调用oracle存储过程实现快速分页
执行drop表操作后数据库无法起动
分析Oracle有时会用索引来查找数据的原因
数据从MySQL迁移到 Oracle的注意事项
快速理解Oracle归档模式的命令及参数
在Oracle里加快SQL执行的三种方法
几条常见的数据库分页 SQL 语句
Oracle9I OCP认证过程

Oracle 中的 如何解决JOB的Interval输入参数过长


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-31   浏览: 154 ::
收藏到网摘: n/a

本文根据一段错误代码从而来分析如何解决JOB的Interval输入参数过长的问题。

给出的运行JOB的PL/SQL代码为:


DECLAREjob BINARY_INTEGER := :job;next_date DATE := :mydate;broken BOOLEAN := FALSE;BEGINWHAT:mydate := next_date;IF broken THEN :b := 1; ELSE :b :=0; END IF; END;

并说明了如何使用NEXT_DATE作为存储过程的输出参数,来指定下次JOB的下次运行时间。

第一次看到这里的时候,一方面是感叹这种内部的东西,一般人是无法得到的,只有Tom这种内部人士才能得到;另一方面是佩服Tom的功力,说实话,即使是把代码给我,我也想不出这么巧妙的方法。

这次重读这部分内容,有了一点新的想法,对于BROKEN变量,是否也可以做点什么?

采用和上面类似的方法,可以控制JOB的行为,使JOB成功运行一次后,就自动停止不在执行。由于普通的一次性JOB,在运行后就从JOB视图中消失了,如果希望留下运行信息,则必须使用日志表,十分的麻烦。而采用下面的方法处理一次性JOB,可以方便将JOB的运行信息保留下来:

SQL> CONN /@YANGTK AS SYSDBA

已连接。

SQL> GRANT EXECUTE ON DBMS_LOCK TO YANGTK;

授权成功。

SQL> CONN YANGTK/YANGTK@YANGTK

已连接。

SQL> CREATE OR REPLACE PROCEDURE P_TEST (P_BROKEN OUT BOOLEAN) AS2 BEGIN3 P_BROKEN := TRUE;4 DBMS_LOCK.SLEEP(5);5 END; 6 /

过程已创建。

SQL> DECLARE2 V_JOB NUMBER;3 BEGIN4 DBMS_JOB.SUBMIT(V_JOB, 'P_TEST(BROKEN);', SYSDATE, 'SYSDATE + 1/1440');5 COMMIT;6 END; 7 /

PL/SQL 过程已成功完成。

SQL> COL WHAT FORMAT A30SQL> SELECT JOB, WHAT, TOTAL_TIME, BROKEN, FAILURES FROM USER_JOBS;JOB WHAT TOTAL_TIME B FA