夢幻之旅

          DEBUG - 天道酬勤

             :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks
          <2011年9月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          公告

          本博客中未注原創(chuàng)的文章均為轉(zhuǎn)載,對轉(zhuǎn)載內(nèi)容可能做了些修改和增加圖片注釋,如果侵犯了您的版權,或沒有注明原作者,請諒解

          常用鏈接

          留言簿(21)

          隨筆分類(644)

          隨筆檔案(669)

          文章檔案(6)

          最新隨筆

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          示例2:創(chuàng)建一個任務(STORED_PROCEDURE)
          在這個demo中,我使用了帶參數(shù)的procedure,一種情況是使用默認值,另外一種情況是使用新設置的值。下面看具體的示例過程。

          第一步:創(chuàng)建一個日志表和相應的procedure

          SQL> create table sch_demo_log
            2  (  arg_1 number,
            3     arg_2 varchar2(32),
            4     deal_date date
            5  );

          表已創(chuàng)建。

          SQL> create or replace procedure proc_sch(arg_1 in number ,
            2                                       arg_2 in varchar2)
            3  is
            4  begin
            5     insert into sch_demo_log values(arg_1,arg_2,sysdate);
            6     commit;
            7  end;
            8  /

          過程已創(chuàng)建。
          第二步:創(chuàng)建一個調(diào)度程序并設置對應procedure中參數(shù)的default value


          SQL> begin
            2     DBMS_SCHEDULER.CREATE_PROGRAM(
            3                    program_name        => 'TEST_PROG',
            4                    program_action      => 'PROC_SCH',
            5                    program_type        => 'STORED_PROCEDURE',
            6                    number_of_arguments => 2,
            7                    comments            => 'sch test by STORED_PROCEDURE with argument',
            8                    enabled             => false);
            9  end;
          10  /

          PL/SQL 過程已成功完成。

          SQL>
          SQL> begin
            2    DBMS_SCHEDULER.define_program_argument(
            3                   program_name      => 'TEST_PROG',
            4                   argument_position => 1,
            5                   argument_type     => 'number',
            6                   default_value     => 100);
            7   
            8    DBMS_SCHEDULER.define_program_argument(
            9                   program_name      => 'TEST_PROG',
          10                   argument_position => 2,
          11                   argument_type     => 'VARCHAR2',
          12                   default_value     => 'Thomaszhang Test');
          13  END;
          14  /

          PL/SQL 過程已成功完成。

           

          第三步:創(chuàng)建一個調(diào)度表(計劃)

          在本demo中,每2分鐘運行一次

          SQL> begin
            2    DBMS_SCHEDULER.create_schedule(
            3                   repeat_interval => 'FREQ=MINUTELY;INTERVAL=2',
            4                   start_date      => sysdate,
            5                   comments        => 'test',
            6                   schedule_name   => 'TEST_SCH');
            7  end;
            8  /

          PL/SQL 過程已成功完成。
          第四步:創(chuàng)建一個job

          SQL> begin
            2    DBMS_SCHEDULER.create_job(
            3                   job_name      => 'TEST_JOB',     
            4                   program_name  => 'TEST_PROG',
            5                   schedule_name => 'TEST_SCH',
            6                   job_class     => 'DEFAULT_JOB_CLASS',            
            7                   comments      => 'arg test',
            8                   auto_drop     => false,
            9                   enabled       => false);
          10  end;
          11  /

          PL/SQL 過程已成功完成。

          SQL> exec DBMS_SCHEDULER.enable('TEST_PROG');
          PL/SQL 過程已成功完成。

          SQL> exec DBMS_SCHEDULER.enable('TEST_JOB');
          PL/SQL 過程已成功完成。
          第五步:檢查運行情況,查看一下日志表記錄情況
          SQL> select * from sch_demo_log;

          未選定行

           

          --還沒有到調(diào)度時間,稍等一下。。。


          SQL> select * from sch_demo_log;

               ARG_1 ARG_2                    DEAL_DATE
          ---------- ------------------------ -------------------
                 100 Thomaszhang Test         2007-11-12 14:35:59

          可以看到,這個時候,sch_demo_log記錄的前2個字段,使用了我們前面define的缺省值.下面我set一個新的job參數(shù)看看

           

          第六步:設置不同的job參數(shù)


          SQL> begin
            2    DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(
            3                   job_name          => 'TEST_JOB',
            4                   argument_position => 1,
            5                   argument_value    => 200);
            6   
            7    DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(
            8                   job_name          => 'TEST_JOB',
            9                   argument_position => 2,
          10                   argument_value    => 'set new value first');
          11  end;
          12  /

          PL/SQL 過程已成功完成。

          SQL> select * from sch_demo_log;

               ARG_1 ARG_2                    DEAL_DATE
          ---------- ------------------------ -------------------
                 100 Thomaszhang Test         2007-11-12 14:35:59
                 200 set new value first      2007-11-12 14:37:59可以看到,這個時候,記錄的日志變成了新的參數(shù)。這個demo 說明,根據(jù)我們的需要,可以設置不同的運行期參數(shù)。SQL> begin
            2    DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(
            3                   job_name          => 'TEST_JOB',
            4                   argument_position => 1,
            5                   argument_value    => 300);
            6   
            7    DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(
            8                   job_name          => 'TEST_JOB',
            9                   argument_position => 2,
          10                   argument_value    => 'set new value second');
          11  end;
          12  /

          PL/SQL 過程已成功完成。再換一個看看:

          SQL> select * from sch_demo_log;

               ARG_1 ARG_2                   DEAL_DATE
          ---------- ----------------------- -------------------
                 100 Thomaszhang Test        2007-11-12 14:35:59
                 200 set new value first     2007-11-12 14:37:59
                 300 set new value second    2007-11-12 14:39:59
          清除通過set_job_argument_value設置的參數(shù):SQL> begin
            2    DBMS_SCHEDULER.reset_job_argument_value('TEST_JOB',1);
            3    DBMS_SCHEDULER.reset_job_argument_value('TEST_JOB',2);
            4  end;
            5  /

          PL/SQL 過程已成功完成。

          SQL> select * from sch_demo_log;

               ARG_1 ARG_2                    DEAL_DATE
          ---------- ------------------------ -------------------
                 100 Thomaszhang Test         2007-11-12 14:35:59
                 200 set new value first      2007-11-12 14:37:59
                 300 set new value second     2007-11-12 14:39:59
                 100 Thomaszhang Test         2007-11-12 14:41:59可以看到又恢復到了我們前面定義的默認值。這個值,可以通過dba_scheduler_program_args視圖看到。SQL> begin
            2    DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(
            3                   job_name          => 'TEST_JOB',
            4                   argument_position => 1,
            5                   argument_value    => 400);
            6   
            7    DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(
            8                   job_name          => 'TEST_JOB',
            9                   argument_position => 2,
          10                   argument_value    => 'set new value third');
          11  end;
          12  /

          PL/SQL 過程已成功完成。

          SQL> select * from sch_demo_log;

               ARG_1 ARG_2                  DEAL_DATE
          ---------- ---------------------- -------------------
                 100 Thomaszhang Test       2007-11-12 14:35:59
                 200 set new value first    2007-11-12 14:37:59
                 300 set new value second   2007-11-12 14:39:59
                 100 Thomaszhang Test       2007-11-12 14:41:59
                 400 set new value third    2007-11-12 14:43:59

          SQL> begin
            2    DBMS_SCHEDULER.reset_job_argument_value('TEST_JOB',1);
            3    DBMS_SCHEDULER.reset_job_argument_value('TEST_JOB',2);
            4  end;
            5  /

          PL/SQL 過程已成功完成。

          SQL> select * from sch_demo_log;

               ARG_1 ARG_2                   DEAL_DATE
          ---------- ----------------------- -------------------
                 100 Thomaszhang Test        2007-11-12 14:35:59
                 200 set new value first     2007-11-12 14:37:59
                 300 set new value second    2007-11-12 14:39:59
                 100 Thomaszhang Test        2007-11-12 14:41:59
                 400 set new value third     2007-11-12 14:43:59
                 100 Thomaszhang Test        2007-11-12 14:45:59

          已選擇6行。

          posted on 2011-09-14 13:16 HUIKK 閱讀(810) 評論(0)  編輯  收藏 所屬分類: DataBase
          主站蜘蛛池模板: 望都县| 旬阳县| 水城县| 盖州市| 治多县| 平泉县| 内江市| 磐石市| 隆子县| 多伦县| 平和县| 靖宇县| 朝阳县| 武功县| 恭城| 泽普县| 昆明市| 九台市| 永年县| 维西| 田林县| 安龙县| 安乡县| 太仓市| 宝坻区| 邛崃市| 永嘉县| 梧州市| 义马市| 宜章县| 柳林县| 五家渠市| 都安| 杭锦旗| 县级市| 乌拉特后旗| 开远市| 井陉县| 盐边县| 德保县| 四会市|