含义:job是oracle的一种对象,可以理解为定时执行的程序
目的:定时自动执行特定代码
照猫画虎--创建job
1、创建测试表JOB_TEST
create table JOB_TEST(a date);
2、创建存储过程往测试表插入数据
create or replace procedure JOB_PRO_TEST as begin insert into JOB_TEST values(sysdate); end; /
3、创建job,名称jobtest,作用每分钟执行一次存储过程
variable jobtest number; begin dbms_job.submit(:jobtest,\'JOB_PRO_TEST;\',sysdate,\'sysdate+1/1440\',true); end; /
另一:
declare jobtest number;
begin
dbms_job.submit(
job =>jobtest ,
what=>\'JOB_PRO_TEST;\',
next_date => sysdate,
interval => \'sysdate+1/1440\',
no_parse => true);
end;
/
job创建完成就已经运行了,不是一定要使用run
创建完成,job就开始工作了,自动插入,看看效果
4、手动运行jobtest
begin dbms_job.run(:jobtest); end; /
5.删除jjobtest
begin dbms_job.remove(:jobtest); end; /
另一
begin dbms_job.remove(jobnomuber); end; /
jobnomuber为job号,通过查询可得
拦路虎--问题
问题一:

解决:
在pl/sql中,用variable声明job号名称,会抛出‘无效的sql语句’异常,采用declare关键字
问题二:
解决:
在pl/sql中,用variable声明job号名称,会抛出‘无效的sql语句’异常,采用declare关键字
问题二:
解决:
采用这样的方式::jobtest,注意那个冒号,可能会抛出‘并非所有变量都已绑定’异常,解决的方式:去掉那个冒号
问题三:
run或者remove时如果使用名称
例如
:jobtest 可能会抛出‘并非所有变量都已绑定’的异常;
去掉冒号直接用名称jobtest可能会抛出‘jobtest未被声明’

解决:
run或者remove时如果使用名称
例如
:jobtest 可能会抛出‘并非所有变量都已绑定’的异常;
去掉冒号直接用名称jobtest可能会抛出‘jobtest未被声明’
解决:
查询到你创建的job号,然后通过job号执行
1、选择job文件夹,右键

2、点击新建

3、对应填写完成,可以点击“查看SQL”查看sql语句,确定无误后,点击“应用”即创建完成
4、此时,job文件夹下对应job创建完成,直接可见job号,右键可进行相关操作

what参数:是将被执行的PL/SQL代码块。
next_date参数:指识何时将运行这个工作。
interval参数:何时这个工作将被重执行的频度。
no_parse参数:指示此工作在提交时或执行时是否应进行语法分析——TRUE 指示此PL/SQL代码在它第一次执行时应进行语法分析, 而FALSE指示本PL/SQL代码应立即进行语法分析。
描述 INTERVAL参数值,定义job的执行频率(有些有待验证)
每天午夜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)\'
每分钟执行:\'TRUNC(sysdate,\'mi\') + 1/ (24*60)\'或 \'sysdate+1/1440\'
每天的凌晨1点执行:\'TRUNC(sysdate) + 1 +1/ (24)\'
每周定时执行:每周一凌晨1点执行:\'TRUNC(next_day(sysdate,\'星期一\'))+1/24\'
每月定时执行:每月1日凌晨1点执行:\'TRUNC(LAST_DAY(SYSDATE))+1+1/24\'
每季度定时执行:每季度的第一天凌晨1点执行:\'TRUNC(ADD_MONTHS(SYSDATE,3),\'Q\') + 1/24\'
每半年定时执行:每年7月1日和1月1日凌晨1点:\'ADD_MONTHS(trunc(sysdate,\'yyyy\'),6)+1/24\'
每年定时执行:每年1月1日凌晨1点执行:\'ADD_MONTHS(trunc(sysdate,\'yyyy\'),12)+1/24\'
学习参考地址:
http://blog.csdn.net/javaloveiphone/article/details/7947810
http://blog.csdn.net/truexf/article/details/1536730
http://blog.csdn.net/yzh54ak/article/details/5776130
select * from user_jobs; select job from all_jobs;
PlSqlDev操作job
创建job
1、选择job文件夹,右键
2、点击新建
3、对应填写完成,可以点击“查看SQL”查看sql语句,确定无误后,点击“应用”即创建完成
4、此时,job文件夹下对应job创建完成,直接可见job号,右键可进行相关操作
知其所以然--知识理解
job
参数:是由Submit()过程返回的binary_ineger。工作号,唯一标识一个工作。what参数:是将被执行的PL/SQL代码块。
next_date参数:指识何时将运行这个工作。
interval参数:何时这个工作将被重执行的频度。
no_parse参数:指示此工作在提交时或执行时是否应进行语法分析——TRUE 指示此PL/SQL代码在它第一次执行时应进行语法分析, 而FALSE指示本PL/SQL代码应立即进行语法分析。
描述 INTERVAL参数值,定义job的执行频率(有些有待验证)
每天午夜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)\'
每分钟执行:\'TRUNC(sysdate,\'mi\') + 1/ (24*60)\'或 \'sysdate+1/1440\'
每天的凌晨1点执行:\'TRUNC(sysdate) + 1 +1/ (24)\'
每周定时执行:每周一凌晨1点执行:\'TRUNC(next_day(sysdate,\'星期一\'))+1/24\'
每月定时执行:每月1日凌晨1点执行:\'TRUNC(LAST_DAY(SYSDATE))+1+1/24\'
每季度定时执行:每季度的第一天凌晨1点执行:\'TRUNC(ADD_MONTHS(SYSDATE,3),\'Q\') + 1/24\'
每半年定时执行:每年7月1日和1月1日凌晨1点:\'ADD_MONTHS(trunc(sysdate,\'yyyy\'),6)+1/24\'
每年定时执行:每年1月1日凌晨1点执行:\'ADD_MONTHS(trunc(sysdate,\'yyyy\'),12)+1/24\'
学习参考地址:
http://blog.csdn.net/javaloveiphone/article/details/7947810
http://blog.csdn.net/truexf/article/details/1536730
http://blog.csdn.net/yzh54ak/article/details/5776130