ビジネスニーズがある:双対番号規則: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- NUMBER(10 )、 TSQL VARCHAR2(100 ); 始める 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の括弧内の着信タイミング* / 終了。