PLSQL古典的な例

MAKE_ALL_SAMPLE_BY_MONTH_WTH PROCEDURE(pMonth VARCHAR2、PCYCLE VARCHAR2)AS
VBSCODE VARCHAR2(10); -作動領域
VMONTH VARCHAR2(10); -実行日
VSSMONTH VARCHAR2(6); -あなたの日付データに
VSAMPLECONDSEQ INT; - SEQのサンプル
VPROCNAME JC_M_RULE.PROCNAMEの%のTYPE; -プロシージャ名の規則
VSQL VARCHAR2(1000); - SQL変数を実行している
VSEQ NUMBER(10); --SEQ変更
VMRUN BOOLEAN; -オンライン規則によるかどうか
VZXRUN BOOLEAN; -特別なルールかどうかを行う
マーケティングデータ、デフォルトデータレベルから引き出さ- ; VPARPROLE VARCHAR2(2)。
VPROBLEM JC_M_RULE_PROBLEM_JOIN.PROBLEM_TYPE%のタイプ; -規制入力
VRULEID JC_M_RULE.ID%のタイプ; -ルールID
VCYCLE JC_M_RULE.RULE_CYCLE TYPE%; -サイクル実行
VJCFS JC_M_RULE.FRACTION%のタイプ; -基本スコア
GRADEFLAG BOOLEANと、 -得点は、状態の実行を支配する
-クエリの各事業の問題領域の世帯がルール
CURSOR Cですが
S.PROCNAME SELECT、
C.SEQ、
C.BSCODE、
C.SUBJECTID、
S.FRACTION、
S.RULE_CYCLE
JC_M_SAMPLECOND C、JC_M_RULE S、P JC_M_RULE_PROBLEM_JOIN FROM
C.SUBJECTID = S.ID
AND S.VALIDTAG = 'Y' - -可能化
AND P.RULE_ID = S.ID
AND P.PROBLEM_TYPE = VPROBLEM -ルールユーザーの問題
と長さ(S.PROCNAME)> 0
と長さ(C.BSCODE)= 2
AND C.BSCODE <> '52が/ *ユニット52は、データ* /拒否
C.PARAROLE = VPARPROLE AND
AND S.RULE_CALLを= '01' -マーケティングの分析
ORDER BY S.PROCNAME、C.BSCODEを;

BEGIN

VPARPROLE: '01' =; -マーケティングからデータを引き出しますデフォルトのデータレベル。
VPROBLEM:= '1'; -問題の家族のルール
VMRUN:= FALSE; -オンライン行われていないルール
VZXRUNを:= FALSE;


LENGTH pMonthはNULL OR IF(pMonth)<= 0 THEN IS
; DUAL FROM TO_CHAR(SYSDATE、 'YYYYMM')INTO VSSMONTHを選択
ELSE
VSSMONTH:= pMonth;
END IF;

-ルール情報を更新し、各事業領域
APPEND_SAMPLECOND(VPROBLEM)。

-クリア情報が第1のスコアリングルールであった
。T1.DETAILTYPE = JC_M_PF_WTH_RULE_TEMP T1から、削除 VPROBLEMは、

データが無効ルールを削除詳述- / *
DELETE_STOPRULE_DATA_WTH(); / *

-循環のそれぞれの事業領域のルール
オープンCは、
ループ
Cフェッチ
; INTO VPROCNAME、VSAMPLECONDSEQ、VBSCODE、VRULEID、VJCFS、VCYCLE
WHEN NOTFOUND%以下のCを終了すると、
BEGIN
(ルール指定のみ実行頻度)現在のサイクルのうち、空でない--PCYCLE、およびパラメータが同じPCYCLEのVCYCLEはなく、
長さがIF !(PCYCLE)> 0 AND PCYCLE IS NOT NULL PCYCLE = VCYCLE AND THEN
CONTINUE;
END IF;

-現在のルールを実行するかどうか。あなたがリターンを実行しない場合、あなたがしなければ、実行の返却日を空にします。
VMONTH:= GET_RULE_CYCLE(VRULEID、VCYCLE、pMonth);

-なし日付、現在のルールでは、このサイクルのうち、実行しないでください。
LENGTH IF(VMONTH)= 0 THEN OR VMONTH NULL IS
; CONTINUE
; END IF

初期化サンプル情報、修正= FINISHTAG 'N'、= 0 CNT -
IF INIT_SAMPLEDCOND(VSAMPLECONDSEQは)= FALSEはTHEN
CONTINUE;
END IF;

例外
ときにOTHERS
LOG_ERROR(SQLCODE、
SQLERRM変数,,
'PKG_RULECALL.MAKE_ALL_SAMPLE_BY_MONTH_WTH(オペレーティング・ルール)エラー!= SEQのサンプル[' ||
VSAMPLECONDSEQ || 'ルールID = [' || VRULEID || '会社= [' ||
VBSCODE || ' ]「);
CONTINUE;
END;

BEGIN

-スケジュールに問題の現在のルールデータを削除
DELETE_SAMPLED_WTH IF(VSAMPLECONDSEQ)= FALSEがTHEN
CONTINUE;
END IF;

-無効にするには、現在のルール場合は、再度確認してください
= IF RULE_VALIDTAG_STATE(VRULEID)をFALSEには、THEN
CONTINUE;
END IF;

-スプライシング実行コードは、ストアドプロシージャ、そのトピック呼び出す
VSQLを:= ' CALL '|| || VPROCNAME'( '' '|| || VBSCODE' ''、 '' '||
VMONTH ||' ''、 '|| TO_CHAR(VSAMPLECONDSEQ)||'、 ''「||
VPARPROLE || '' '');

/ * -対応トピック実行コードへのスプライシングのストアド・プロシージャ・コール(バインド変数)
VSQL:= 'CALL' || :. 1 || '(' '' ||:2 || ' ''、 '' '||
:|| 3' ''、 '|| TO_CHAR。(:4)||'、 '' '||
:|| 5' '')。
EXECUTE IMMEDIATE VSQL USING VPROCNAME、VBSCODE、VMONTH、VSAMPLECONDSEQ、VPARPROLE; * /
-サンプル生成ルールログ
LOG_SAMPLE_BEGIN(VSEQ、VBSCODE、VSAMPLECONDSEQ、VSQL)を、

EXECUTE IMMEDIATE VSQL。

-サンプルデータを送信するために
、COMMIT

THEN> IF INSTR(UPPER(VPROCNAME)、 'PKG_YX')0
= TRUE; -オンラインで実行ルール:VMRUN
ELSIF INSTR(UPPER(VPROCNAME)、 'PKG_ZXを')> 0 THEN
VZXRUN:= TRUE; -特別なルールが実行
END IFと、

-フィルタホワイトリスト
FILTER_HBMD_WTH(VSAMPLECONDSEQ、 -配列のサンプル
VRULEIDを、 - IDルール
日付- VMONTH、
VBSCODE、 -作動領域
VPROCNAME、 -規則をプロシージャ名
VCYCLE、 -分類規則(動作サイクル)
VJCFS); -基本スコア

-濾過無効なユーザー
DELETE_CANCELLATION_WTH(VSAMPLECONDSEQ);

-条件レコードはサンプルを変更し、サンプルデータはフラグ完了
UPDATE_SAMPLEDCOND(VSAMPLECONDSEQ、
、VBSCODEを
、VRULEID
pMonth、
VPROBLEM、
VPARPROLE);

-データの閾値レベルを挿入
INSERT_LEVEL_DATA_WTH(VRULEID、VBSCODE);

-その後のスコア計算ルールの実行ルールIDを記録する
INSERT INTO JC_M_PF_WTH_RULE_TEMP(RULE_ID、DETAILTYPE)VALUES(VRULEID、VPROBLEM);

-ログはリアルタイムに更新、各記録領域抽出ルール数
LOG_SAMPLE_END(VSEQ、VSAMPLECONDSEQ);

EXCEPTION
他はTHEN
; LOG_SAMPLE_ERROR(VSEQ、SYSDATE、SQLERRM変数)
END;

END LOOP;
CLOSE C;

-ルールが実行された場合は、次のコードを実行します。
THEN OR VZXRUN VMRUN IF
-組み合わせのテーブルに試料台にサンプリング合成ユーザーの問題、ユーザテーブルサンプルレコード、主題は問題に複数の記載します。
BEGIN
(VSEQ、NULL、NULL、 'MERGE_SAMPLE_WTH')LOG_SAMPLE_BEGINと、
MERGE_SAMPLE_WTH(VSEQ);
LOG_SAMPLE_END(VSEQ、NULL);
EXCEPTION
WHEN OTHERS THEN
LOG_SAMPLE_ERROR(VSEQ、SYSDATE、SQLERRM変数)。
END;

-カレンダー問題挿入要約履歴データは、
BEGIN
(VSEQ、NULL、NULL、 'OLD_SAMPLE_WTH')を--LOG_SAMPLE_BEGIN;ログOLD_SAMPLE_WTHに書き込まれ
OLD_SAMPLE_WTH(VSSMONTH、VMRUN、VZXRUN、VSEQ); -履歴レコード日付は現在の日付です
- LOG_SAMPLE_END(VSEQ、NULL);
EXCEPTION
WHEN OTHERS THEN
LOG_SAMPLE_ERROR(VSEQ、SYSDATE、SQLERRM);
END;

-トランザクションデータの実装(更新されたレポートのデータと、今月を行って、すべてのトランザクション、目的:メイキング対応)上の大画面と詳細な統計
PKG_YDSJ.SUM_YDSJ_ALL_BY;

-スコア計算は家庭ルール
GRADEFLAG:= FALSEと、
FOR GRADERULE IN(SELECT JC_M_PF_WTH_RULE_TEMP DISTINCT RULE_ID WHERE DETAILTYPE = VPROBLEM)ループから
IF RULE_GRADE_DEFINITE_WTH(GRADERULE.RULE_ID、VSSMONTH)= THEN TRUE
GRADEFLAG:= TRUE;
END IF;
END LOOP;
JC_M_PF_WTH_RULE_TEMP FROM DELETE; -ルールのスコアリング・ルール情報を削除

-得点を算出したルールが存在する場合、ユーザーは再集計のスコアにする必要があります。
IF THEN GRADEFLAG = TRUE
RULE_GRADE_MERGE_WTH(VSSMONTH);
END IF;

END IF;
EXCEPTION
OTHERSがTHEN
LOG_ERROR(SQLCODE、
SQLERRM、
'PKG_RULECALL.MAKE_ALL_SAMPLE_BY_MONTH_WTH(オペレーティング・ルール、()月に問題のユーザデータを見つける。)エラー!');
ROLLBACK;
END;

おすすめ

転載: www.cnblogs.com/kingwei55555/p/12127880.html