1.建立Oracle全域暫存資料表,代碼如下:
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作業,代碼如下:
Sql代碼
- 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不要執行多次,執行了幾次就會提交幾個作業