<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Open-Source World

    let's learn and study.
    posts - 28, comments - 23, trackbacks - 0, articles - 1
    對(duì)于JAVA系統(tǒng)中的定時(shí)操作有兩種實(shí)現(xiàn)方式(針對(duì)oarcle):

      1. 通過(guò)程序在應(yīng)用層實(shí)現(xiàn),如quartz,Timer等

      如在spring中:

    <bean id="abcJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

    <property name="targetObject"><ref bean="abcService"/></property>

    <property name="targetMethod"><value>abc</value></property>

    </bean>



    <bean id="abcTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">

    <property name="jobDetail">

    <ref bean="abcJobDetail"/>

    </property>

    <property name="cronExpression">

    <value>0 0 4 * * ?</value>

    </property>

    </bean>



    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

    <property name="triggers">

    <list>

    <ref local="abcTrigger"/>

    </list>

    </property>

    </bean>

      2. 直接在數(shù)據(jù)庫(kù)層實(shí)現(xiàn),先寫個(gè)存儲(chǔ)過(guò)程,然后創(chuàng)建一個(gè)job,定時(shí)執(zhí)行該存儲(chǔ)過(guò)程。

      具體方法如下:

      DBMS_JOB系統(tǒng)包是Oracle“任務(wù)隊(duì)列”子系統(tǒng)的API編程接口。DBMS_JOB包對(duì)于任務(wù)隊(duì)列提供了下面這些功能:提交并且執(zhí)行一個(gè)任務(wù)、改變?nèi)蝿?wù)的執(zhí)行參數(shù)以及刪除或者臨時(shí)掛起任務(wù)等。




      DBMS_JOB包中所有的過(guò)程都有一組相同的公共參數(shù),用于定義任務(wù),任務(wù)的運(yùn)行時(shí)間以及任務(wù)定時(shí)運(yùn)行的時(shí)間間隔。

      下面我們來(lái)詳細(xì)討論這些參數(shù)的意義及用法。

    1、job參數(shù)

      job是一個(gè)整數(shù),用來(lái)唯一地標(biāo)示一個(gè)任務(wù)。該參數(shù)既可由用戶指定也可由系統(tǒng)自動(dòng)賦予,這完全取決于提交任務(wù)時(shí)選用了那一個(gè)任務(wù)提交過(guò)程。DBMS_JOB.SUBMIT過(guò)程通過(guò)獲得序列SYS.JOBSEQ的下一個(gè)值來(lái)自動(dòng)賦予一個(gè)任務(wù)號(hào)。該任務(wù)號(hào)是作為一個(gè)OUT參數(shù)返回的,所以調(diào)用者隨后可以識(shí)別出提交的任務(wù)。而DBMS_JOB.ISUBMIT過(guò)程則由調(diào)用者給任務(wù)指定一個(gè)識(shí)別號(hào),這時(shí)候,任務(wù)號(hào)的唯一性就完全取決于調(diào)用者了。

    2、what

     what參數(shù)是一個(gè)可以轉(zhuǎn)化為合法PL/SQL調(diào)用的字符串,該調(diào)用將被任務(wù)隊(duì)列自動(dòng)執(zhí)行。在what參數(shù)中,如果使用文字字符串,則該字符串必須用單引號(hào)括起來(lái)。 what參數(shù)也可以使用包含我們所需要字符串值的VARCHAR2變量。實(shí)際的PL/SQL調(diào)用必須用分號(hào)隔開。在PL/SQL調(diào)用中如果要嵌入文字字符串,則必須使用兩個(gè)單引號(hào)。

    what參數(shù)的長(zhǎng)度在Oracle7.3中限制在2000個(gè)字節(jié)以內(nèi),在Oracle 8.0以后,擴(kuò)大到了4000個(gè)字節(jié),這對(duì)于一般的應(yīng)用已完全足夠。該參數(shù)的值一般情況下都是對(duì)一個(gè)PL/SQL存儲(chǔ)過(guò)程的調(diào)用。在實(shí)際應(yīng)用中,盡管可以使用大匿名Pl/SQL塊,但建議大家最好不要這樣使用。還有一個(gè)實(shí)際經(jīng)驗(yàn)就是最好將存儲(chǔ)過(guò)程調(diào)用封裝在一個(gè)匿名塊中,這樣可以避免一些比較莫名錯(cuò)誤的產(chǎn)生。我來(lái)舉一個(gè)例子,一般情況下,what參數(shù)可以這樣引用:

    what =>‘my_procedure(parameter1);’

    但是比較安全的引用,應(yīng)該這樣寫:

    what =>‘begin my_procedure(parameter1); end;’

    3、next_date Next_

      date參數(shù)是用來(lái)調(diào)度任務(wù)隊(duì)列中該任務(wù)下一次運(yùn)行的時(shí)間。這個(gè)參數(shù)對(duì)于DBMS_JOB.SUBMIT和DBMS_JOB.BROKEN這兩個(gè)過(guò)程缺省為系統(tǒng)當(dāng)前時(shí)間,也就是說(shuō)任務(wù)將立即運(yùn)行。

    當(dāng)將一個(gè)任務(wù)的next_date參數(shù)賦值為null時(shí),則該任務(wù)下一次運(yùn)行的時(shí)間將被指定為4000年1月1日,也就是說(shuō)該任務(wù)將永遠(yuǎn)不再運(yùn)行。在大多數(shù)情況下,這可能是我們不愿意看到的情形。但是,換一個(gè)角度來(lái)考慮,如果想在任務(wù)隊(duì)列中保留該任務(wù)而又不想讓其運(yùn)行,將next_date設(shè)置為null卻是一個(gè)非常簡(jiǎn)單的辦法。

    Next_date也可以設(shè)置為過(guò)去的一個(gè)時(shí)間。這里要注意,系統(tǒng)任務(wù)的執(zhí)行順序是根據(jù)它們下一次的執(zhí)行時(shí)間來(lái)確定的,于是將next_date參數(shù)設(shè)置回去就可以達(dá)到將該任務(wù)排在任務(wù)隊(duì)列前面的目的。這在任務(wù)隊(duì)列進(jìn)程不能跟上將要執(zhí)行的任務(wù)并且一個(gè)特定的任務(wù)需要盡快執(zhí)行時(shí)是非常有用的。

    4、Interval

      Internal參數(shù)是一個(gè)表示Oracle合法日期表達(dá)式的字符串。這個(gè)日期字符串的值在每次任務(wù)被執(zhí)行時(shí)算出,算出的日期表達(dá)式有兩種可能,要么是未來(lái)的一個(gè)時(shí)間要么就是null.這里要強(qiáng)調(diào)一點(diǎn):很多開發(fā)者都沒有意識(shí)到next_date是在一個(gè)任務(wù)開始時(shí)算出的,而不是在任務(wù)成功完成時(shí)算出的。

      當(dāng)任務(wù)成功完成時(shí),系統(tǒng)通過(guò)更新任務(wù)隊(duì)列目錄表將前面算出的next_date值置為下一次任務(wù)要運(yùn)行的時(shí)間。當(dāng)由interval表達(dá)式算出next_date是null時(shí),任務(wù)自動(dòng)從任務(wù)隊(duì)列中移出,不會(huì)再繼續(xù)執(zhí)行。因此,如果傳遞一個(gè)null值給interval參數(shù),則該任務(wù)僅僅執(zhí)行一次。

    6. no_parse參數(shù)

      指示此工作在提交時(shí)或執(zhí)行時(shí)是否應(yīng)進(jìn)行語(yǔ)法分析

      TRUE指示此PL/SQL代碼在它第一次執(zhí)行時(shí)應(yīng)進(jìn)行語(yǔ)法分析,

      而FALSE指示本PL/SQL代碼應(yīng)立即進(jìn)行語(yǔ)法分析。

      算法任務(wù)重復(fù)運(yùn)行的時(shí)間間隔取決于interval參數(shù)中設(shè)置的日期表達(dá)式。下面就來(lái)詳細(xì)談?wù)勗撊绾卧O(shè)置interval參數(shù)才能準(zhǔn)確滿足我們的任務(wù)需求。一般來(lái)講,對(duì)于一個(gè)任務(wù)的定時(shí)執(zhí)行,有三種定時(shí)要求。

    在一個(gè)特定的時(shí)間間隔后,重復(fù)運(yùn)行該任務(wù)。

    在特定的日期和時(shí)間運(yùn)行任務(wù)。

    任務(wù)成功完成后,下一次執(zhí)行應(yīng)該在一個(gè)特定的時(shí)間間隔之后。

    第一種調(diào)度任務(wù)需求的日期算法比較簡(jiǎn)單,即'SYSDATE+n',這里n是一個(gè)以天為單位的時(shí)間間隔。表6給出了一些這種時(shí)間間隔設(shè)置的例子。

      第二種調(diào)度任務(wù)需求相對(duì)于第一種就需要更復(fù)雜的時(shí)間間隔(interval)表達(dá)式,表是一些要求在特定的時(shí)間運(yùn)行任務(wù)的interval設(shè)置例子。

    CREATE OR REPLACE PROCEDURE raise_salary (emp_id INTEGER, increase REAL) IS
    current_salary REAL;
    salary_missing EXCEPTION;
    BEGIN
    SELECT sal INTO current_salary FROM emp
    WHERE empno = emp_id;
    IF current_salary IS NULL THEN
    RAISE salary_missing;

    ELSE
    UPDATE emp SET sal = sal + increase
    WHERE empno = emp_id;
    END IF;
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    INSERT INTO emp_audit VALUES (emp_id, 'No such number');
    WHEN salary_missing THEN
    INSERT INTO emp_audit VALUES (emp_id, 'Salary is null');
    END raise_salary;

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 久久精品国产亚洲av麻豆图片| 亚洲中文字幕无码永久在线| 国产精品视频永久免费播放| 成人免费观看一区二区| 美女视频黄的全免费视频网站| 免费A级毛片无码久久版| 国产精品国产亚洲精品看不卡| 亚洲一卡2卡三卡4卡有限公司| 久久精品国产亚洲av麻豆蜜芽 | 美女18一级毛片免费看| av午夜福利一片免费看久久| 97在线视频免费播放| 在线观看人成视频免费| 亚洲女初尝黑人巨高清| 亚洲国产AV无码一区二区三区 | 亚洲AV永久无码区成人网站 | 99视频在线免费| 岛国大片免费在线观看| 久久亚洲欧美国产精品| 1000部国产成人免费视频| 亚洲热线99精品视频| 日本一区二区免费看| 免费**毛片在线播放直播| 一级特黄a免费大片| 日本高清免费不卡在线| 亚洲精品中文字幕无码AV| 99re6在线精品免费观看| 午夜一级毛片免费视频| 亚洲一级毛片在线播放| www.亚洲色图| 亚洲精品久久无码| 亚洲一区无码精品色| 亚洲а∨精品天堂在线| 亚洲精品无码久久久久去q| 一级毛片高清免费播放| 中文字幕在线观看亚洲| 中文字幕免费在线看线人| 亚洲heyzo专区无码综合| 亚洲成a人片在线观看无码| 男男AV纯肉无码免费播放无码| 四虎影视久久久免费观看|