定期运行SQL

buffalodong326 2008-11-25 09:53:30
有一张contract表,里面有一个字段是contractdate字段
问题:
我想每个月的一日自动运行SQL语句,并且这条语句只取上个月1日到本月1日之间的所有的合同
这样的SQL怎么写?
是否需要配合job一起?
...全文
130 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
范佩西_11 2008-11-26
  • 打赏
  • 举报
回复
declare
job number;
begin
sys.dbms_job.submit(job => job,
what => 'ctmc_updateprice_proc;',
next_date => to_date('2008-12-1 00:00:00',
'yyyy-mm-dd hh24:mi:ss'),
interval => 'trunc(add_months(sysdate,1) ,''mm'')');
commit;
end;
/
buffalodong326 2008-11-26
  • 打赏
  • 举报
回复
上面的代码我运行还是抱错
ora-06550:第八行,第六十七列;
pls-00103:出现符号“MM”在需要下列之一时。。。。。
咋回事?
buffalodong326 2008-11-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 linzhangs 的回复:]
SQL codebegin
sys.dbms_job.submit(job => :job,
what => 'ctmc_updateprice_proc;',
next_date => to_date('2008-12-1 00:00:00',
'yyyy-mm-dd hh24:mi:ss'),
interval => 'trunc(add_months(sysdate,1) ,' mm ')');
commit;
end;
/
[/Quote]
运行不了呀。
范佩西_11 2008-11-25
  • 打赏
  • 举报
回复
begin
sys.dbms_job.submit(job => :job,
what => 'ctmc_updateprice_proc;',
next_date => to_date('2008-12-1 00:00:00',
'yyyy-mm-dd hh24:mi:ss'),
interval => 'trunc(add_months(sysdate,1) ,' mm ')');
commit;
end;
/
sleepzzzzz 2008-11-25
  • 打赏
  • 举报
回复
如果是简单的计算总数,直接在JOB里写SQL即可.

VARIABLE JOBNO NUMBER;
begin
sys.dbms_job.submit(:JOBNO,
'insert into table_name(zs) -- 你的表名字段.
select count(*) from contract
where contractdate >= add_months(trunc(sysdate,''mm''),-1) ;commit;',
sysdate,
'add_months(trunc(sysdate,''mm''),1)');
commit;
end;
/


[Quote=引用 7 楼 buffalodong326 的回复:]
谢谢各位大虾
我说清楚一点
我有一个存储过程名字叫ctmc_updateprice_proc
我现在要写一个job,名字无所谓
目的就是每个月的1日凌晨运行存储过程。
哪位大哥麻烦把写法发出来谢谢!
[/Quote]
buffalodong326 2008-11-25
  • 打赏
  • 举报
回复
谢谢各位大虾
我说清楚一点
我有一个存储过程名字叫ctmc_updateprice_proc
我现在要写一个job,名字无所谓
目的就是每个月的1日凌晨运行存储过程。
哪位大哥麻烦把写法发出来谢谢!
sleepzzzzz 2008-11-25
  • 打赏
  • 举报
回复
VARIABLE JOBNO NUMBER;
begin
sys.dbms_job.submit(:JOBNO,
'insert ino table_name(zs)
select count(*) from contract
where contractdate >= add_months(trunc(sysdate,''mm''),-1) ;',
sysdate,
'add_months(trunc(sysdate,''mm''),1)');
commit;
end;
/
hebo2005 2008-11-25
  • 打赏
  • 举报
回复
给你看个每个月1号运行JOB


BEGIN
SYS.DBMS_JOB.REMOVE(181);
COMMIT;
END;
/

DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => 'CHINA.SP_MAKE_AB071
(''SYSTEM'' /* VARCHAR2 */ );'
,next_date => to_date('01/12/2008 02:00:00','dd/mm/yyyy hh24:mi:ss')
,interval => 'TRUNC(LAST_DAY(SYSDATE)) + 1+1/12'
,no_parse => FALSE
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
COMMIT;
END;
/



其中 interval => 'TRUNC(LAST_DAY(SYSDATE)) + 1+1/12'就是每个月的1号的一点
其实也可以这样
trunc(add_months(sysdate,1),'mm')
这个也是到每个月的1号0点
kaka730 2008-11-25
  • 打赏
  • 举报
回复
procedure+job
buffalodong326 2008-11-25
  • 打赏
  • 举报
回复
job怎么写每个月1日运行存储过程?
麻烦给各详细的写法,谢谢。
hebo2005 2008-11-25
  • 打赏
  • 举报
回复
写个存储过程
然后用个JOB来实现
vc555 2008-11-25
  • 打赏
  • 举报
回复
用JOB最方便。
wiler 2008-11-25
  • 打赏
  • 举报
回复
declare
job number;
begin
sys.dbms_job.submit(job => job,
what => 'ctmc_updateprice_proc;',
next_date => to_date('2008-12-1 00:00:00',
'yyyy-mm-dd hh24:mi:ss'),
interval => 'trunc(add_months(sysdate,1) ,' mm ')');
commit;
end;
/

这样就可以执行了
呵呵
caoleione 2008-11-25
  • 打赏
  • 举报
回复
如果是window系统新建个任务计划 设定时间执行运行文件
jingchengforever 2008-11-25
  • 打赏
  • 举报
回复
直接修改all_jobs,把你的过程加进去,试试。应该可以。

17,081

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧