熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

如何才能解決JOB的Interval輸入參數過長

2013-11-13 16:03:55  來源: Oracle 
本文中我們根據一段錯誤代碼從而來分析如何解決JOB的Interval輸入參數過長的問題

  

  

  給出的運行JOB的PL/SQL代碼為

  

  DECLARE job BINARY_INTEGER := :job; next_date DATE := :mydate; broken BOOLEAN := FALSE; BEGIN WHAT :mydate := next_date; IF broken THEN :b := ; ELSE :b :=; END IF; END;

  

  

  

  

  

  並說明了如何使用NEXT_DATE作為存儲過程的輸出參數來指定下次JOB的下次運行時間

  

  第一次看到這裡的時候一方面是感歎這種內部的東西一般人是無法得到的只有Tom這種內部人士才能得到另一方面是佩服Tom的功力說實話即使是把代碼給我我也想不出這麼巧妙的方法

  

  

  

  這次重讀這部分內容有了一點新的想法對於BROKEN變量是否也可以做點什麼?

  

  

  

  采用和上面類似的方法可以控制JOB的行為使JOB成功運行一次後就自動停止不在執行由於普通的一次性JOB在運行後就從JOB視圖中消失了如果希望留下運行信息則必須使用日志表十分的麻煩而采用下面的方法處理一次性JOB可以方便將JOB的運行信息保留下來

  

  SQL> CONN /@YANGTK AS SYSDBA 已連接 SQL> GRANT EXECUTE ON DBMS_LOCK TO YANGTK; 授權成功 SQL> CONN YANGTK/YANGTK@YANGTK 已連接 SQL> CREATE OR REPLACE PROCEDURE P_TEST (P_BROKEN OUT BOOLEAN) AS BEGIN P_BROKEN := TRUE; DBMS_LOCKSLEEP(); END; / 過程已創建 SQL> DECLARE V_JOB NUMBER; BEGIN DBMS_JOBSUBMIT(V_JOB P_TEST(BROKEN); SYSDATE SYSDATE + /); COMMIT; END; / PL/SQL 過程已成功完成 SQL> COL WHAT FORMAT A SQL> SELECT JOB WHAT TOTAL_TIME BROKEN FAILURES FROM USER_JOBS; JOB WHAT TOTAL_TIME B FAILURES P_TEST(BROKEN); N SQL> SELECT JOB WHAT TOTAL_TIME BROKEN FAILURES FROM USER_JOBS; JOB WHAT TOTAL_TIME B FAILURES P_TEST(BROKEN); Y

  

  

  

  采用這種方法運行一次後JOB不再運行但是JOB信息並沒有丟失仍然保留在USER_JOBS視圖中


From:http://tw.wingwit.com/Article/program/Oracle/201311/17751.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.