Oracleを使用してリセットシーケンスタスクのタイミング

ビジネスニーズがある:双対番号規則:RYH +年間001(スタート)、1 001に、毎月毎月のリセットを計算します

データベースで利用可能な配列と次のように機能します。

 

 

 ソリューション:シーケンスをリセットするには1ヶ月から1番、Oracleはタスクを時限使い方は以下のように、SQLの成長に始まります。

SELECT GET_RYH_NO からデュアル; 

SELECT SEQ_RYH_NO_ID.NEXTVAL からデュアル; 

SELECT  *  から USER_JOBS; / * クエリータイマータスク* / 

/ * 新しい01月にリセットシーケンスを二値化が開始され、ストアドプロシージャ1 * / 
CREATE  OR  REPLACE 
プロシージャ RESET_SEQ_RYH_NO_ID AS 
  N-     NUMBER10 )、
  TSQL VARCHAR2100 );
 始める
    IF TO_CHAR(SYSDATE、' DD '=  ' 01 '  、次いで / * 每月1号重置* / 
  EXECUTE IMMEDIATE ' デュアルから選択SEQ_RYH_NO_ID.nextvalを' 
    INTO のn; 
  N:=  -(N -  1 )。
  TSQL:=  ' によって、ALTERシーケンスSEQ_RYH_NO_ID増分'  || N;
  EXECUTE IMMEDIATE TSQLを。
  EXECUTE IMMEDIATE ' デュアルから選択SEQ_RYH_NO_ID.nextval ' 
    INTO nは、
  TSQL:=  ' 1によってALTER配列SEQ_RYH_NO_ID増分' EXECUTETSQL IMMEDIATE;
     エンド IF ;
 エンドRESET_SEQ_RYH_NO_ID; 

/ * スケジュールされたタスク定義* / 
DECLARE 
  ジョブ番号をBEGIN 
  DBMS_JOB.SUBMIT(   
        JOB =>仕事は、   / * 自動的JOB_ID生成* /   
        WHAT =>  ' RESET_SEQ_RYH_NO_IDを; '/ * 実行しますSQL文またはストアド・プロシージャの名前* /   
        NEXT_DATE => SYSDATE、   / * 初期実行時間* /   
        INTERVAL =>  ' TRUNC(SYSDATE + 1)'  / *一日おきに一度だけ実行* / 
      );   
  コミット;
 エンド; 

/ * スケジュールされたタスクを削除* / 
開始
  DBMS_JOB.REMOVE(126 ;)/ * タスクIDの括弧内の着信タイミング* / 
終了

 

おすすめ

転載: www.cnblogs.com/alphajuns/p/11839888.html