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


1.新建Oracle全局临时表,代码如下:
Sql代码
  1. DECLARE cnt int;   
  2. begin  
  3. --如果存在该临时表,则删除   
  4.   SELECT count(1) into cnt from user_tables where table_name='TEMPLOGSMSHALL_SESSION';   
  5.   if cnt>0 THEN  
  6.     BEGIN  
  7.      execute immediate 'DROP TABLE TEMPLOGSMSHALL_SESSION';   
  8.     END;   
  9.   end if;   
  10. end;   
  11.   
  12. /   
  13. --创建临时表   
  14. CREATE GLOBAL TEMPORARY TABLE TempLogSmsHall_Session (   
  15.    SESSIONID          VARCHAR2(28)                    NOT NULL,   
  16.    USERTELNO          VARCHAR2(16)                    NOT NULL,   
  17.    USERCITYNAME       VARCHAR2(8)                     NOT NULL,   
  18.    USERBRANDNAME      VARCHAR2(16)                    NOT NULL,   
  19.    NLIBIZNAME          VARCHAR2(32)                    NOT NULL,   
  20.    BIZNAME            VARCHAR2(128)                   NOT NULL,   
  21.    OPERATIONNAME      VARCHAR2(16)                    NOT NULL,   
  22.    SCENEHANDLETYPE    VARCHAR2(32)                    NOT NULL,   
  23.    SCENEHANDLEID      VARCHAR2(6)                     NOT NULL,   
  24.    SESSIONBEGINTIME   TIMESTAMP                       NOT NULL,   
  25.    SESSIONENDTIME     TIMESTAMP                       NOT NULL,   
  26.    ISTIMEOUT          CHAR(1)                        DEFAULT '1' NOT NULL,   
  27.    ALLCOSTSECONDS     INTEGER                        DEFAULT (0) NOT NULL,   
  28.    REVSMSNUM          INTEGER                        DEFAULT (0) NOT NULL,   
  29.    SENDSMSNUM         INTEGER                        DEFAULT (0) NOT NULL  
  30. )   
  31. ON COMMIT PRESERVE ROWS;  
上面创建的临时表,对于每个调用它的存储过程或PL/SQL块都是独立的,互不影响的。就是说允许两个PL/SQL同时调用,结果页不会互相影响。

2.新建Oracle作业,代码如下:
Sql代码    
  1. DECLARE job NUMBER;
  2. begin  
  3.   dbms_job.submit(job => job,   
  4.                       what => 'ECSS_JOB.SMSS10_Job_DailyStatus('''');',   
  5.                       next_date => trunc(sysdate) + ( 1 + 1/24),   
  6.                       interval => 'sysdate + 1');   
  7.   commit;   
  8. end;  
其中:job是系统自动产生编号,ECSS_JOB.SMSS10_Job_DailyStatus是一个过程(里面还有一个字符串参数),next_date设置下次执行时间,这里是明天早上1点,interval设置时间间隔,多久执行一次,这里是每天执行。trunc 函数用于去掉日期里的时间,也就是得到的是某天的00:00,时间是以天为单位的所以要得到某某点某某分,就需要分数:

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

另外,注意SQL不要执行多次,执行了几次就会提交几个作业

相关内容