1.新建Oracle全局临时表,代码如下:
上面创建的临时表,对于每个调用它的存储过程或PL/SQL块都是独立的,互不影响的。就是说允许两个PL/SQL同时调用,结果页不会互相影响。
2.新建Oracle作业,代码如下:
其中:job是系统自动产生编号,ECSS_JOB.SMSS10_Job_DailyStatus是一个过程(里面还有一个字符串参数),next_date设置下次执行时间,这里是明天早上1点,interval设置时间间隔,多久执行一次,这里是每天执行。trunc 函数用于去掉日期里的时间,也就是得到的是某天的00:00,时间是以天为单位的所以要得到某某点某某分,就需要分数:
1/24 一小时;
1/1440 一分;
1/3600 一秒;
另外,注意SQL不要执行多次,执行了几次就会提交几个作业
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不要执行多次,执行了几次就会提交几个作业