Oracle统计时用全局临时表,新建oracle作业

1.新建Oracle全局临时表,代码如下:

DECLARE cnt int;
begin
--如果存在该临时表,则删除
SELECT count(1) into cnt from user_tables where table_name='TEMPLOGSMSHALL_SESSION';
if cnt>0 THEN
BEGIN
execute immediate 'DROP TABLE TEMPLOGSMSHALL_SESSION';
END;
end if;
end;

/
--创建临时表
CREATE GLOBAL TEMPORARY TABLE TempLogSmsHall_Session (
SESSIONID VARCHAR2(28) NOT NULL,
USERTELNO VARCHAR2(16) NOT NULL,
USERCITYNAME VARCHAR2(8) NOT NULL,
USERBRANDNAME VARCHAR2(16) NOT NULL,
NLIBIZNAME VARCHAR2(32) NOT NULL,
BIZNAME VARCHAR2(128) NOT NULL,
OPERATIONNAME VARCHAR2(16) NOT NULL,
SCENEHANDLETYPE VARCHAR2(32) NOT NULL,
SCENEHANDLEID VARCHAR2(6) NOT NULL,
SESSIONBEGINTIME TIMESTAMP NOT NULL,
SESSIONENDTIME TIMESTAMP NOT NULL,
ISTIMEOUT CHAR(1) DEFAULT '1' NOT NULL,
ALLCOSTSECONDS INTEGER DEFAULT (0) NOT NULL,
REVSMSNUM INTEGER DEFAULT (0) NOT NULL,
SENDSMSNUM INTEGER DEFAULT (0) NOT NULL
)
ON COMMIT PRESERVE ROWS;

上面创建的临时表,对于每个调用它的存储过程或PL/SQL块都是独立的,互不影响的。就是说允许两个PL/SQL同时调用,结果页不会互相影响。

2.新建Oracle作业,代码如下:

DECLARE job NUMBER;
begin
dbms_job.submit(job => job,
what => 'ECSS_JOB.SMSS10_Job_DailyStatus('''');',
next_date => trunc(sysdate) + ( 1 + 1/24),
interval => 'sysdate + 1');
commit;
end;

其中:job是系统自动产生编号,ECSS_JOB.SMSS10_Job_DailyStatus是一个过程(里面还有一个字符串参数),next_date设置下次执行时间,这里是明天早上1点,interval设置时间间隔,多久执行一次,这里是每天执行。trunc 函数用于去掉日期里的时间,也就是得到的是某天的00:00,时间是以天为单位的所以要得到某某点某某分,就需要分数:

1/24 一小时;
1/1440 一分;
1/3600 一秒;

另外,注意SQL不要执行多次,执行了几次就会提交几个作业
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值