1,创建存储过程
示例:给表ATT_ST_GW_R_Z,执行插入操作。
create or replace procedure PROC_ATT_ST_GW_R_Z as
begin
insert into ATT_ST_GW_R_Z
(select GUID, A.ST_CODE, to_date(to_char(sysdate, \'yyyy-MM-dd HH24:mi:ss\'),\'yyyy-MM-dd HH24:mi:ss\') TM, null Z, round(A.BD+dbms_random.value,2) BD, null RMSY, 0 NOTE, to_date(to_char(sysdate, \'yyyy-MM-dd HH24:mi:ss\'),\'yyyy-MM-dd HH24:mi:ss\') FROM_DATE, null TO_DATE
from (select * from ATT_ST_GW_R_Z order by tm desc, st_code asc) A
where A.ST_CODE in (select distinct ST_CODE from ATT_ST_GW_R_Z));
commit;
end;
=====执行成功=====:
2,创建定时作业
示例:创建存储过程JOB_ATT_ST_GW_R_Z,定期每天早8点只执行存储过程PROC_ATT_ST_GW_R_Z;
declare
JOB_ATT_ST_GW_R_Z number;
BEGIN
DBMS_JOB.SUBMIT(
JOB => JOB_ATT_ST_GW_R_Z, /*自动生成JOB_ID*/
WHAT => \'PROC_ATT_ST_GW_R_Z;\', /*需要执行的存储过程名称或SQL语句*/
NEXT_DATE => to_date(\'2019-12-18 14:00:00\', \'yyyy-mm-dd hh24:mi:ss\'), /*初次执行时间*/
INTERVAL => \'TRUNC(SYSDATE + 1) + 8/24\' /*每天早上8点执行*/
);
commit;
end;
=====执行成功=====:
3,作业创建完成后,作业无法自动执行解决办法
(1)用oracle管理员账号登录,
(2)重启oracle所在服务器的服务OracleServiceORCL和OracleOraHome90TNSListener
(3)用命令窗口,修改job_queue_processes参数值,默认是0,修改为0-1000的整数。
3,手动运行作业方法
示例:启动第2步创建的作业,run方法的参数为作业编号。
作业编号查询语句:select * from user_jobs
启动作业语句:
begin
dbms_job.run(27);
commit;
end;
5,容易出现问题解决方案
创建失败,重点关注存储过程的sql语句是否正确(例如出入数据和数据库表字段不一致),可以把具体SQL语句执行一遍,查找错误原因。