01.CREATE OR REPLACE FUNCTION get_short_name(p_username VARCHAR2) RETURN VARCHAR2 IS
東蘭網站建設公司成都創(chuàng)新互聯公司,東蘭網站設計制作,有大型網站制作公司豐富經驗。已為東蘭上1000家提供企業(yè)網站建設服務。企業(yè)網站搭建\外貿網站制作要多少錢,請找那個售后服務好的東蘭做網站的公司定做!
02.v_username VARCHAR2(1000);
03.
04.BEGIN
05.v_username := p_username;
06.
07.IF INSTR(v_username, 'TenGigabitEthernet') 0 THEN
08.v_username := REPLACE(v_username, 'TenGigabitEthernet', 'TGE');
09.END IF;
10.
11.RETURN v_username;
12.
13.EXCEPTION
14.WHEN NO_DATA_FOUND THEN
15.return null;
16.WHEN OTHERS THEN
17.return null;
18.
19.END get_short_name;
用SCHEDULER,兩個SCHEDULER合并,前一個是通常的情況(不包括最后一天),另外一個是最后1天的,各自定義后再合并。
這個東西,你為什么不登錄windows的執(zhí)行計劃?
日期時間配合去執(zhí)行存儲過程。我一般會采用windows的執(zhí)行計劃
然后調用cmd,然后cmd執(zhí)行這個存儲過程。
oracle 存儲過程的基本語法
1.基本結構
CREATE OR REPLACE PROCEDURE 存儲過程名字
(
參數1 IN NUMBER,
參數2 IN NUMBER
) IS
變量1 INTEGER :=0;
變量2 DATE;
BEGIN
END 存儲過程名字
2.SELECT INTO STATEMENT
將select查詢的結果存入到變量中,可以同時將多個列存儲多個變量中,必須有一條
記錄,否則拋出異常(如果沒有記錄拋出NO_DATA_FOUND)
例子:
BEGIN
SELECT col1,col2 into 變量1,變量2 FROM typestruct where xxx;
EXCEPTION
WHEN NO_DATA_FOUND THEN
xxxx;
END;
...
3.IF 判斷
IF V_TEST=1 THEN
BEGIN
do something
END;
END IF;
4.while 循環(huán)
WHILE V_TEST=1 LOOP
BEGIN
XXXX
END;
END LOOP;
5.變量賦值
V_TEST := 123;
6.用for in 使用cursor
...
IS
CURSOR cur IS SELECT * FROM xxx;
BEGIN
FOR cur_result in cur LOOP
BEGIN
V_SUM :=cur_result.列名1+cur_result.列名2
END;
END LOOP;
END;
7.帶參數的cursor
CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID;
OPEN C_USER(變量值);
LOOP
FETCH C_USER INTO V_NAME;
EXIT FETCH C_USER%NOTFOUND;
do something
END LOOP;
CLOSE C_USER;
8.用pl/sql developer debug
連接數據庫后建立一個Test WINDOW
在窗口輸入調用SP的代碼,F9開始debug,CTRL+N單步調試
通過網上查詢,找到一種方案,就是先在oracle里面對要定時的sql寫成存儲過程,再用DBMS_scheduler對存儲過程進行定時執(zhí)行。
在數據庫中新建了一個表MY_JOB_TEST
在數據庫中新建了一個表MY_JOB_TEST
在數據庫中新建了一個表MY_JOB_TEST
在PLSQL中,執(zhí)行下面語句模擬存儲過程的調用,執(zhí)行后要點提交才有反應
[sql] view plain copy
BEGIN
INSERT?INTO?MY_JOB_TEST?(NUM)?VALUES?(1);
END;
然后下面建立一個存儲過程JOB_TEST
(注意,這里用戶需要CREATE JOB權限,可以用超級管理員用戶執(zhí)行下面語句給指定用戶賦予該權限)
[sql] view plain copy
Grant?Create?Job?To?指定用戶名
[sql] view plain copy
SQLCREATE?OR?REPLACE?PROCEDURE
JOB_TEST
BEGIN
INSERT?INTO?MY_JOB_TEST?(NUM)?VALUES?(1);
END;
(此處要執(zhí)行存儲過程不能用exec JB_TEST,這種執(zhí)行方式只能在命令行中使用)
使用DBMS_SCHEDULER進行定時,這里為每分鐘執(zhí)行一次
[sql] view plain copy
SQL?BEGIN
DBMS_SCHEDULER.CREATE_JOB?(
job_name???????????=??'SCHEDULER_TEST',
job_type???????????=??'STORED_PROCEDURE',
job_action?????????=??'JOB_TEST',
start_date?????????=??sysdate,
repeat_interval????=??'FREQ=MINUTELY;INTERVAL=1');
END;
但是這樣子定時任務并不會執(zhí)行。
我們可以用下面的命令查看一下scheduler的狀態(tài)
[plain] view plain copy
SQLSELECT?*?FROM?USER_SCHEDULER_JOBS;
此時我們可以看到enable的狀態(tài)是false的,因此我們需要去啟動定時任務
[plain] view plain copy
SQLBEGIN
DBMS_SCHEDULER.ENABLE('SCHEDULER_TEST');
END
dbms_scheduler.enable('j_test'); ?--啟用jobs ??
dbms_scheduler.disable('j_test'); ?--禁用jobs ? ?
dbms_scheduler.run_job('j_test'); ?--執(zhí)行jobs ? ?
dbms_scheduler.stop_job('j_test'); ?--停止jobs ??
dbms_scheduler.drop_job('j_test'); ?--刪除jobs ?
然后再查詢job的enable裝態(tài),發(fā)現為true了。
然后查看MY_JOB_TEST表,發(fā)現每分鐘會往里面添加記錄。
當需要修改定時任務或者調度的其他屬性時,可以用下面的
dbms_scheduler.set_attribute('調度名','調度屬性','調度值');
至此,定時任務完成。
網站題目:oracle調度怎么寫,oracle作業(yè)調度
網頁鏈接:http://vcdvsql.cn/article8/hsppip.html
成都網站建設公司_創(chuàng)新互聯,為您提供網站收錄、網站營銷、服務器托管、網站制作、建站公司、品牌網站制作
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯