oracle2108什么意思,Oracle存储过程(包:PACK_KPI_KERNEL For YS三度评价体系)
1 CREATE OR REPLACE PACKAGE PACK_KPI_KERNEL IS
2 --定义多级数组 字符串
3 TYPE TSTRARRY IS TABLE OF VARCHAR2(4000) INDEX BYBINARY_INTEGER;4
5 TYPE TSTRARRYARRY IS TABLE OF TSTRARRY INDEX BYBINARY_INTEGER;6
7 TYPE TSTRARRYARRYARRY IS TABLE OF TSTRARRYARRY INDEX BYBINARY_INTEGER;8
9 --Author : D
10 --Created : 2011
11 --Purpose : KPI模块 绩效考核核心算法包
12
13 --核心 调用接口 as_KEY是关键值 as_flag 是调用标记
14 PROCEDUREKERNEL_MASTER_CONTROL;15
16 --自动获取绩效考核月份参数 默认为 本月上月的月份
17 FUNCTION GET_KPI_DATE RETURN VARCHAR2;18
19 --核心 调用接口 as_KEY是关键值 as_flag 是调用标记
20 PROCEDURE KT_MAIN_MASTER_CONTROL(as_KEY IN VARCHAR2, as_flag IN VARCHAR2);21
22 --计算 量化指标 单项得分 体系ID BODATA
23 FUNCTION GET_ONETARGET_SCORE(as_TARSYS_id IN VARCHAR2, as_bodata NUMBER)24 RETURN NUMBER;25
26 --计算 量化指标 单项有自变量 得分 体系ID BODATA
27 FUNCTION GET_ONETARGET_SCORE_VAR(as_TARSYS_id IN VARCHAR2,28 as_bodata NUMBER) RETURN NUMBER;29
30 --计算量化月奖 每日
31 PROCEDUREGET_BORESULT_LH_AWORD_TODAY;32
33 --建立System_P_ID二维数组
34 FUNCTION Get_KPI_System_P_ID(as_target_id IN VARCHAR2) RETURNTSTRARRY;35
36 --建立SystemID二维数组
37 FUNCTION Get_KPI_SystemID(as_target_id IN VARCHAR2) RETURNTSTRARRYARRY;38
39 --计算量化月奖
40 FUNCTION GetComAword(as_KPI_SCORE IN number, as_CATALOG_ID IN VARCHAR2)41 RETURN NUMBER;42
43 --计算总月奖
44 FUNCTION Get_all_Aword(as_LH_SCORE IN number, as_GL_SCORE IN NUMBER)45 RETURN NUMBER;46
47 --获取指标的bodata2
48 FUNCTION Get_bodata2_kpi_flu_record(as_target_id IN VARCHAR2,49 as_month IN VARCHAR2) RETURN NUMBER;50
51 --部门得分修正
52 FUNCTION Get_K_DEP_DATA(as_dep_id IN VARCHAR2, as_month IN VARCHAR2)53 RETURN NUMBER;54
55 --指标单项得分修正
56 FUNCTION get_lh_score_fix(LH_score IN NUMBER,57 dep_id IN NUMBER,58 as_month IN VARCHAR2) RETURN NUMBER;59
60 --取得资金计划准确率
61 FUNCTION get_zjjhzql(as_dep_id IN VARCHAR2, as_month IN VARCHAR2)62 RETURN NUMBER;63
64 --定时取指标元素 主程序 小元素合成算法
65 --=-=-==-=-=-=-=-------------------------------
66 PROCEDURE BOELEMENT_MASTER_CONTROL(as_date IN VARCHAR2);67
68 --取值
69 --=-=-==-=-=-=-=-------------------------------
70 FUNCTION GET_BOELEMENT(as_ele_id IN VARCHAR2, as_date IN VARCHAR2)71 RETURN NUMBER;72
73 --取值
74 --=-=-==-=-=-=-=-------------------------------
75 FUNCTION kpi_splitelementex(P_STRING IN VARCHAR2, as_date IN VARCHAR2)76 return NUMBER;77 --取值
78 --=-=-==-=-=-=-=-------------------------------
79 FUNCTION kpi_splitelementgetrs(as_V_POS IN VARCHAR2, as_date IN VARCHAR2)80 return VARCHAR2;81
82 --根据指标公式,得出指标的实际值和计划值
83 --=-=-==-=-=-=-=-------------------------------
84 PROCEDURE KERNEL_TARGET_DATA_MAIN(AS_MONTH IN VARCHAR2);85
86 procedure KPI_VIEW_TARGET; --集团指标取数
87
88 /*procedure Insert_JHZ_ToJHFluTable(as_date IN VARCHAR2);89 procedure InsertOne_JHZ_ToJHFluTable(as_TARGET_ID in varchar2,90 as_VALUE_PLAN in varchar2,91 as_VALUE_DATA in varchar2,92 as_REC_REASON in varchar2,93 as_REC_MONTH in varchar2);94
95 procedure kpi_BackToELeResultTable(as_date in varchar2);96 */
97
98 --计算量化月奖
99 FUNCTION Get_OneTarget_Score_NEW(as_TARSYS_id IN VARCHAR2,100 as_bodata NUMBER) RETURN NUMBER;101 PROCEDURE KERNEL_TARGET_ALL_XS(AS_YEAR IN VARCHAR2);102 procedure KPI_LR_SJ_PM(as_month varchar2);103 procedure KPI_LR_YSZQL_PM(as_month varchar2);104 ENDPACK_KPI_KERNEL;105 /
106 CREATE OR REPLACE PACKAGE BODY PACK_KPI_KERNEL IS
107 type My_Cursor is ref cursor;108
109 ARRY1 TSTRARRY;110 ARRY2 TSTRARRYARRY;111 ARRY3 TSTRARRYARRYARRY;112
113 --====================================================================
114 --主控制,控制元素合成和指标计算,缺BO部分
115 PROCEDURE KERNEL_MASTER_CONTROL AS
116 ls_YF VARCHAR2(10);117 ln_RESULT NUMBER;118
119 BEGIN
120
121 DBMS_OUTPUT.ENABLE(10000000);122 --DBMS_OUTPUT.ENABLE( buffer_size =>Null );
123
124 BEGIN
125 /*insert into kpi_test2 values(to_char(sysdate,'yyyy-mm-dd hh:mi:ss'));126 commit;*/
127
128 ls_YF :=GET_KPI_DATE();129
130 --取计划值
131 PACK_KPI_JHZ.KPI_GET_JHZ_BYDAY('');132
133 DBMS_OUTPUT.put_line('检查点1-1');134 --小元素取值,小元素合成大元素,kpi_manager_boelement ---> kpi_manager_boelement_result
135 BOELEMENT_MASTER_CONTROL(ls_YF);136 DBMS_OUTPUT.put_line('检查点1-2');137 --根据指标公式,计算指标计划值和实际值
138
139 KERNEL_TARGET_DATA_MAIN(ls_YF);140 DBMS_OUTPUT.put_line('检查点1-3');141 --指标计划值,实际值取值,计算指标得分,kpi_manager_boresult ---> kpi_manager_boresult_report
142 KT_MAIN_MASTER_CONTROL(ls_YF, '0');143 DBMS_OUTPUT.put_line('检查点1-4');144 --第二次计算
145 BOELEMENT_MASTER_CONTROL(ls_YF);146 DBMS_OUTPUT.put_line('检查点2-1');147 KERNEL_TARGET_DATA_MAIN(ls_YF);148
149 DBMS_OUTPUT.put_line('检查点2-2');150 KT_MAIN_MASTER_CONTROL(ls_YF, '0');151
152 DBMS_OUTPUT.put_line('检查点2-3');153 --运行日志
154 pack_kpi_base.SET_SYSTEM_LOG('核心任务成功!', '被计算月份' ||ls_YF);155
156 /*if to_number(to_char(SYSDATE, 'dd'))=15 then157 Insert_JHZ_ToJHFluTable(ls_YF);158 end if;*/
159
160 DBMS_OUTPUT.disable();161 EXCEPTION162 WHEN OTHERS THEN
163 --运行日志
164 pack_kpi_base.SET_SYSTEM_LOG('核心任务失败!',165 '被计算月份' || ls_YF ||Sqlerrm(Sqlcode));166 END;167
168 ENDKERNEL_MASTER_CONTROL;169
170 --====================================================================
171
172 --====================================================================
173 --自动获取绩效考核月份参数 默认为 本月上月的月份
174 FUNCTION GET_KPI_DATE RETURN VARCHAR2 AS
175
176 ls_kpi_date VARCHAR2(10);177 day number;178
179 BEGIN
180 day := to_number(to_char(SYSDATE, 'dd'));181
182 if day < 20 then
183 ls_kpi_date :=to_char(pack_kpi_base.F_GET_SYM(to_char(SYSDATE,184 'yyyymm')),185 'yyyy-mm');186
187 --ls_kpi_date := '2012-12';
188 else
189 ls_kpi_date := to_char(SYSDATE, 'yyyy-mm');190 --ls_kpi_date := '2012-01';
191 end if;192
193 RETURNls_kpi_date;194
195 ENDGET_KPI_DATE;196
197 --====================================================================
198
199 --=================================================================================
200 --====================================================================
201
202 --核心 调用接口 as_KEY是关键值 as_flag 是调用标记 0 是自动指标计算 1 是用户自定义计算
203 PROCEDURE KT_MAIN_MASTER_CONTROL(as_KEY IN VARCHAR2, as_flag IN VARCHAR2) IS
204
205 ls_key VARCHAR2(4000);206 ls_flag VARCHAR2(10);207
208 --游标取值
209 Cursor Cur_BO Is
210 SELECT t1.id, --主键
211 t1.t_id,212 t1.target_id,213 t1.target_code,214 t1.target_name,215 t1.tarsys_id,216 t1.standardvalue, --标准值
217 t1.RATIO, --预测值
218 --2011-10-08 修改四舍五入
219 round(t1.BODATA, 4) BODATA, --指标分值 当月累计数
220 t1.bodata2,221 t1.bodate222 Fromkpi_manager_boresult_temp t1223 --where t1.target_id=38568
224 ;225
226 --227 ln_ID NUMBER;228 ls_T_ID VARCHAR2(4000);229 ls_TARGET_ID VARCHAR2(4000);230 ls_TARGET_CODE VARCHAR2(4000);231 ls_TARGET_NAME VARCHAR2(4000);232 ls_tarsys_id VARCHAR2(4000);233 ls_STANDARDVALUE VARCHAR2(4000);234 ls_RATIO VARCHAR2(4000);235 ls_BODATA NUMBER; --实际值
236 ls_BODATA2 NUMBER;237 ls_BODATE VARCHAR2(4000);238
239 ls_realvalue number; --实际值=ls_BODATA
240 --241 ln_i NUMBER;242 ln_industry90001 NUMBER;243 ln_industry90002 NUMBER;244 ln_ALL_BEST NUMBER;245 ln_HISTORY_BEST NUMBER;246
247 --分数计算部分变量
248 ln_industry NUMBER;249 resScore NUMBER;250 resScoreYSZQL NUMBER;251 --ln_score NUMBER;
252 Ln_TARSYS_TYPE NUMBER;253 ln_TARSYS_SCORE_TYPE NUMBER; --体系得分算法体系,重要用于判断分支
254
255 ln_K_DEP_DATA NUMBER; --部门指标修正系数
256 ln_CXD_SCORE NUMBER; --创新度得分
257 ln_WDD_SCORE NUMBER; --稳定度的分
258 ln_NLD_SCORE NUMBER; --努力度得分
259 ln_YSZQL_SCROE NUMBER; --预算准确率得分
260
261 BEGIN
262 DBMS_OUTPUT.ENABLE(10000000);263
264 --参数处理
265 IF as_KEY IS NULL THEN
266 ls_key :=GET_KPI_DATE();267 ELSE
268 ls_key :=as_KEY;269 END IF;270
271 IF as_flag IS NULL THEN
272 ls_flag := '0';273 ELSE
274 ls_flag :=as_flag;275 END IF;276
277 --test
278 DBMS_OUTPUT.PUT_LINE('0、 装填原始数据 、参数 主键 =' || ls_key ||
279 '计算类型 0 自动计算 1 用户计算= ls_flag =' ||ls_flag);280
281 --==================================================
282 --第一部分 完成待计算数据处理 根据flag
283 --==================================================
284
285 --测试时候注释掉保留中间结果
286 DELETE FROMkpi_manager_boresult_temp;287 COMMIT;288
289 --ls_flag = 0 每日计算
290 IF ls_flag = '0' THEN
291
292 INSERT INTOkpi_manager_boresult_temp293
294 (ID,295 T_ID,296 TARGET_ID,297 TARGET_CODE,298 TARGET_NAME,299 tarsys_id,300 STANDARDVALUE,301 RATIO,302 BODATA,303 BODATA2,304 BODATE,305 JS_DATE)306 SELECTrownum,307 t.BORESULTID,308 t.TARGET_ID,309 NULL,310 t.TARGET_NAME,311 tt.tarsys_id,312 t.STANDARDVALUE,313 t.RATIO,314 t.BODATA,315 t.bodata2,316 to_char(t.BOGETDATE, 'yyyy-mm'),317 SYSDATE318 FROMkpi_kernel_boresult_v t, kpi_kpimodel_tst tt319 WHERE t.TARGET_ID =tt.target_id320 --and t.target_id='38568'
321 ;322 COMMIT;323
324 END IF;325
326 --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
327 --ls_flag = 1 用户自定义计算
328 IF ls_flag = '1' THEN
329
330 INSERT INTOkpi_manager_boresult_temp331
332 (ID,333 T_ID,334 TARGET_ID,335 TARGET_CODE,336 TARGET_NAME,337 tarsys_id,338 STANDARDVALUE,339 RATIO,340 BODATA,341 BODATA2,342 BODATE,343 JS_DATE)344 SELECTrownum,345 t.rec_id,346 t.target_id, --指标ID
347 '',348 tt.target_name, --指标名字
349 tt.tarsys_id,350 --pack_kpi_base.F_GET_standardvalue(t.target_id) standardvalue, --标准值
351
352 pack_kpi_kernel.Get_bodata2_kpi_flu_record(t.target_id,353 t.rec_date) standardvalue,354 pack_kpi_base.F_GET_RATIO(t.target_id) PRE_RATIO, --预测值
355 t.BODATA, --指标分值 用户自行修改值
356 --pack_kpi_kernel.Get_bodata2_kpi_flu_record(t.target_id,to_char(to_date(t.rec_date,'yyyy-mm-dd'),'yyyy-mm')) BODATA2,
357 pack_kpi_kernel.Get_bodata2_kpi_flu_record(t.target_id,358 t.rec_date) BODATA2,359
360 t.rec_date, --时间
361 SYSDATE362 FROMkpi_flu_record t, kpi_kpimodel_tst tt363 WHERE t.target_id =tt.target_id364 AND t.rec_id =ls_key;365
366 COMMIT;367
368 END IF;369
370 --==================================================
371 --第二部分 完成指标体系分值计算
372 --==================================================
373
374 --游标从统一接口取数
375 OpenCur_BO;376 FetchCur_BO377 INTOln_ID,378 ls_T_ID,379 ls_TARGET_ID,380 ls_TARGET_CODE,381 ls_TARGET_NAME,382 ls_tarsys_id,383 ls_STANDARDVALUE,384 ls_RATIO,385 ls_BODATA,386 ls_BODATA2,387 ls_BODATE;388 ln_i := 1;389 --主循环 每次一个指标。
390 While Cur_BO%Found LOOP391 --test
392
393 ln_i := ln_i + 1;394
395 --循环每行
396 --根据指标类型编码 判断 是那个类型的指标 ,分别调用不同方法计算。并保存
397 --各项变量重新初始化
398 ln_industry := 99999; --创新度中间结果
399 ln_CXD_SCORE := 99999; --创新度
400 ln_WDD_SCORE := 99999; --稳定度的分
401 ln_NLD_SCORE := 99999; --努力度得分
402 ln_YSZQL_SCROE := 99999; --预算准确率得分
403 ln_K_DEP_DATA := 1; --部门得分修正系数
404 ln_TARSYS_SCORE_TYPE := -1; --默认为无效
405 ls_realvalue := ls_BODATA; --保存实际值
406
407 --通过判断实际值和计划值与指标是否是比值行还是普通型,确定是否进行计算
408 IF ((ls_BODATA IS NOT NULL) AND
409 pack_kpi_base.F_GET_TARSYS_TYPE(ls_tarsys_id) = '0') OR
410 (pack_kpi_base.F_GET_TARSYS_TYPE(ls_tarsys_id) = '1' AND
411 (ls_STANDARDVALUE IS NOT NULL) or
412 pack_kpi_base.F_GET_TARSYS_TYPE(ls_tarsys_id) = '2') THEN
413 --第一类:普通型
414 IF pack_kpi_base.F_GET_TARSYS_TYPE(ls_tarsys_id) = '0' THEN
415
416 ls_BODATA := ls_BODATA - ls_STANDARDVALUE; --跟计划值没关系
417
418 END IF;419 --第二类:比值型
420 --bodata 综合处理 当 指标体系是比值型的时候,对bodata除以计划值得到率
421 IF pack_kpi_base.F_GET_TARSYS_TYPE(ls_tarsys_id) = '1' THEN
422
423 IF ls_STANDARDVALUE = 0 THEN
424 --预测值等于0 或为空 预测值得分为100 否则执行 用分数除以预测值的比值
425 IF ls_BODATA = 0 THEN
426 ls_BODATA := '100';427 END IF;428 ELSE
429 ls_BODATA := round(ls_BODATA / ls_STANDARDVALUE, 4) * 100;430 END IF;431
432 --DBMS_OUTPUT.PUT_LINE( '1.1、bodata 综合处理 、ln_ID = '|| ln_ID || 'ls_TARGET_ID='||ls_TARGET_ID||' ls_TARGET_NAME='||ls_TARGET_NAME||' ls_BODATA='|| ls_BODATA );
433
434 END IF;435
436 --取得 考核体系 类型代码 重要用于判断分支
437 --0,稳定度(普通);1,稳定度(正向);2,稳定度(反向);3,努力度;4,创新度;5,预算准确率;6,修正系数;7,不计算 8创新度不计算
438
439 ln_TARSYS_SCORE_TYPE :=pack_kpi_base.F_GET_SCORETYPE_from_tarsys_id(ls_tarsys_id);440
441 DBMS_OUTPUT.PUT_LINE('1、 初始化完成待计算前 、ln_ID =' || ln_ID ||
442 'ls_TARGET_ID=' || ls_TARGET_ID ||
443 'ls_TARGET_NAME=' || ls_TARGET_NAME ||
444 'ls_BODATA=' || ls_BODATA ||
445 'ln_TARSYS_SCORE_TYPE=' ||
446 ln_TARSYS_SCORE_TYPE);447
448 --========算法开始,=================================
449 --=====创新度=========================================================
450
451 --!!!!!
452 IF ln_TARSYS_SCORE_TYPE = 4 THEN
453
454 --文件中规定的算法,暂时屏蔽
455 /*BEGIN --获取指标的历史最好水平和行业最好水平456 SELECT t.ALL_BEST,t.HISTORY_BEST457 INTO ln_ALL_BEST,ln_HISTORY_BEST458 from kpi_kpimodel_industry t459 where t.target_id = ls_TARGET_ID;460 exception461 when NO_DATA_FOUND then462 ln_ALL_BEST := 0;463 ln_HISTORY_BEST := 0;464 END;465 ----466 IF ln_ALL_BEST+ln_HISTORY_BEST >0 THEN467
468
469
470 --正向471 IF ls_tarsys_id = '90001' THEN472
473 IF (ls_BODATA - ln_ALL_BEST)*1 -3>0 THEN474 ln_industry90001 := 3;475 ELSE476 ln_industry90001 := (ls_BODATA - ln_ALL_BEST)*1;477 END IF;478
479 IF (ls_BODATA - ln_HISTORY_BEST)*2 - 5 > 0 THEN480 ln_industry90002 := 3;481 ELSE482 ln_industry90002 := (ls_BODATA - ln_HISTORY_BEST)*5;483 END IF;484
485 IF ln_industry90001 > ln_industry90002 THEN486 ln_industry := ln_industry90001;487 ELSE488 ln_industry := ln_industry90002;489 END IF;490
491 END IF;492
493 --反向494 IF ls_tarsys_id = '90002' THEN495 IF (ln_ALL_BEST - ls_BODATA)*1 -3>0 THEN496 ln_industry90001 := 3;497 ELSE498 ln_industry90001 := (ln_ALL_BEST - ls_BODATA)*1;499 END IF;500
501 IF (ln_HISTORY_BEST - ls_BODATA)*2 - 5 > 0 THEN502 ln_industry90002 := 3;503 ELSE504 ln_industry90002 := (ln_HISTORY_BEST - ls_BODATA)*5;505 END IF;506
507 IF ln_industry90001 > ln_industry90002 THEN508 ln_industry := ln_industry90001;509 ELSE510 ln_industry := ln_industry90002;511 END IF;512 END IF;513 ----514 END IF;515
516 ln_CXD_SCORE :=ln_industry;*/
517
518 --执行
519 --=========(创新度得分=当权重不为0时:实际值-行业最好>=0?20:0;权重为0:按照普通方法计算)=====================
520 if pack_kpi_base.F_GET_WEIGHT_SCALE(ls_TARGET_ID) <> 0 then
521
522 ln_ALL_BEST := pack_kpi_base.F_GET_ALL_BEST(ls_TARGET_ID); --获取行业最好
523 ls_BODATA := ls_realvalue - ln_ALL_BEST; --实际值-行业最好
524 end if;525
526 ln_CXD_SCORE :=PACK_KPI_KERNEL.Get_OneTarget_Score(ls_tarsys_id,527 ls_BODATA);528
529 --更新创新度结果 位置需变更!!!!!!!!!
530 UPDATEkpi_manager_boresult_temp t531 SET t.cxd_score =ln_CXD_SCORE532 WHERE t.id =ln_ID;533 COMMIT;534
535 --test
536 DBMS_OUTPUT.PUT_LINE('2.1 创新度计算 、 ls_TARGET_NAME=' ||
537 ls_TARGET_NAME || 'ls_tarsys_id=' ||
538 ls_tarsys_id || 'ln_CXD_SCORE=' ||
539 ln_CXD_SCORE);540
541 END IF;542
543 --=======预算准确率===========================================================================
544 --!!!!!
545 IF ln_TARSYS_SCORE_TYPE = 5 THEN
546
547 --执行
548 ln_YSZQL_SCROE :=PACK_KPI_KERNEL.Get_OneTarget_Score(ls_tarsys_id,549 ls_BODATA);550
551 --更新预算准确率
552 UPDATEkpi_manager_boresult_temp t553 SET t.yszql_scroe =ln_YSZQL_SCROE554 WHERE t.id =ln_ID;555 COMMIT;556 --test
557 DBMS_OUTPUT.PUT_LINE('2.1 预算准确率 、 ls_TARGET_NAME=' ||
558 ls_TARGET_NAME || 'ls_tarsys_id=' ||
559 ls_tarsys_id || 'ln_YSZQL_SCROE=' ||
560 ln_YSZQL_SCROE);561
562 END IF;563
564 --==================================================================
565
566 --努力度得分===========================================================
567 --!!!!!
568 IF ln_TARSYS_SCORE_TYPE = 3 OR ln_TARSYS_SCORE_TYPE = 31 OR
569 ln_TARSYS_SCORE_TYPE = 32 THEN
570
571 IF ln_TARSYS_SCORE_TYPE = 3 THEN
572 --普通:(实际值-历史最好>=0?10:0)
573 --执行
574 ln_HISTORY_BEST := pack_kpi_base.F_GET_HISTORY_BEST(as_target_id =>ls_TARGET_ID);575 ls_BODATA := ls_realvalue -ln_HISTORY_BEST;576 ln_NLD_SCORE :=PACK_KPI_KERNEL.Get_OneTarget_Score_NEW(ls_tarsys_id,577 ls_BODATA);578
579 --更新努力度得分 普通
580 UPDATEkpi_manager_boresult_temp t581 SET t.nld_score =ln_NLD_SCORE582 WHERE t.id =ln_ID;583 COMMIT;584
585 --test
586 DBMS_OUTPUT.PUT_LINE('2.3 努力度 普通 得分 、 ls_TARGET_NAME=' ||
587 ls_TARGET_NAME || 'ls_tarsys_id=' ||
588 ls_tarsys_id || 'ln_NLD_SCORE=' ||
589 ln_NLD_SCORE);590 END IF;591
592 IF ln_TARSYS_SCORE_TYPE = 31 AND ls_BODATA2 > 0 THEN
593 --正向(实际值-历史最好>=0?10:0)
594 --执行
595 ln_HISTORY_BEST := pack_kpi_base.F_GET_HISTORY_BEST(as_target_id =>ls_TARGET_ID);596 ls_BODATA := ls_realvalue -ln_HISTORY_BEST;597
598 ln_NLD_SCORE :=PACK_KPI_KERNEL.Get_OneTarget_Score_NEW(ls_tarsys_id,599 ls_BODATA);600
601 --更新努力度得分 正向
602 UPDATEkpi_manager_boresult_temp t603 SET t.nld_score =ln_NLD_SCORE604 WHERE t.id =ln_ID;605 COMMIT;606
607 --test
608 DBMS_OUTPUT.PUT_LINE('2.3 努力度 正向 得分 、 ls_TARGET_NAME=' ||
609 ls_TARGET_NAME || 'ls_tarsys_id=' ||
610 ls_tarsys_id || 'ln_NLD_SCORE=' ||
611 ln_NLD_SCORE);612 END IF;613
614 IF ln_TARSYS_SCORE_TYPE = 32 AND ls_BODATA2 < 0 THEN
615 --反向(努力度得分=历史最好-实际值>=0?10:0)
616 --执行
617 ln_HISTORY_BEST := pack_kpi_base.F_GET_HISTORY_BEST(as_target_id =>ls_TARGET_ID);618 ls_BODATA := ln_HISTORY_BEST -ls_realvalue;619
620 ln_NLD_SCORE :=PACK_KPI_KERNEL.Get_OneTarget_Score_NEW(ls_tarsys_id,621 ls_BODATA);622
623 --更新努力度得分 反向
624 UPDATEkpi_manager_boresult_temp t625 SET t.nld_score =ln_NLD_SCORE626 WHERE t.id =ln_ID;627 COMMIT;628
629 --test
630 DBMS_OUTPUT.PUT_LINE('2.3 努力度 反向 得分 、 ls_TARGET_NAME=' ||
631 ls_TARGET_NAME || 'ls_tarsys_id=' ||
632 ls_tarsys_id || 'ln_NLD_SCORE=' ||
633 ln_NLD_SCORE);634 END IF;635
636 END IF;637
638 --稳定度得分===========================================================
639
640 --先确定tarsys_id 是稳定度部分指标
641 --!!!!!
642 IF ln_TARSYS_SCORE_TYPE = 0 OR ln_TARSYS_SCORE_TYPE = 1 OR
643 ln_TARSYS_SCORE_TYPE = 2 THEN
644 --待修改
645
646 --普通稳定度
647 --!!!!!
648 IF ln_TARSYS_SCORE_TYPE = 0 THEN
649 --执行
650 ln_WDD_SCORE := 100 +nvl(PACK_KPI_KERNEL.Get_OneTarget_Score_NEW(ls_tarsys_id,651 ls_BODATA),652 0);653
654 --更新稳定度得分
655 UPDATEkpi_manager_boresult_temp t656 SET t.wdd_score =ln_WDD_SCORE657 WHERE t.id =ln_ID;658 COMMIT;659 --test
660 DBMS_OUTPUT.PUT_LINE('2.4 稳定度得分,普通 、 ls_TARGET_NAME=' ||
661 ls_TARGET_NAME || 'ls_tarsys_id=' ||
662 ls_tarsys_id || 'ln_WDD_SCORE=' ||
663 ln_WDD_SCORE);664
665 END IF;666
667 --财务稳定度 正向
668 --!!!!!
669 IF ln_TARSYS_SCORE_TYPE = 1 AND ls_BODATA2 > 0 THEN
670
671 --执行
672 ln_WDD_SCORE := 100 +nvl(PACK_KPI_KERNEL.Get_OneTarget_Score_NEW(ls_tarsys_id,673 ls_BODATA),674 0);675
676 --更新稳定度得分
677 UPDATEkpi_manager_boresult_temp t678 SET t.wdd_score =ln_WDD_SCORE679 WHERE t.id =ln_ID;680 COMMIT;681 --test
682 DBMS_OUTPUT.PUT_LINE('2.4 稳定度得分 财务稳定度 正向 、 ls_TARGET_NAME=' ||
683 ls_TARGET_NAME || 'ls_tarsys_id=' ||
684 ls_tarsys_id || 'ln_WDD_SCORE=' ||
685 ln_WDD_SCORE);686
687 END IF;688
689 --财务稳定度 反向
690 --!!!!!
691 IF ln_TARSYS_SCORE_TYPE = 2 AND ls_BODATA2 < 0 THEN
692 --执行
693 ln_WDD_SCORE := 100 +nvl(PACK_KPI_KERNEL.Get_OneTarget_Score_NEW(ls_tarsys_id,694 ls_BODATA),695 0);696
697 --更新稳定度得分
698 UPDATEkpi_manager_boresult_temp t699 SET t.wdd_score =ln_WDD_SCORE700 WHERE t.id =ln_ID;701 COMMIT;702
703 --test
704 DBMS_OUTPUT.PUT_LINE('2.4 稳定度得分--财务稳定度 反向 、 ls_TARGET_NAME=' ||
705 ls_TARGET_NAME || 'ls_tarsys_id=' ||
706 ls_tarsys_id || 'ln_WDD_SCORE=' ||
707 ln_WDD_SCORE);708
709 END IF;710
711 END IF; --712
713 --不计算的 稳定度得分===========================================================
714 --!!!!!
715 IF ln_TARSYS_SCORE_TYPE = 7 THEN
716
717 --更新稳定度得分
718 UPDATEkpi_manager_boresult_temp t719 SET t.wdd_score =ls_BODATA720 WHERE t.id =ln_ID;721 COMMIT;722 DBMS_OUTPUT.PUT_LINE('2.7 不计算的稳定度得分 、 ls_TARGET_NAME=' ||
723 ls_TARGET_NAME || 'ls_tarsys_id=' ||
724 ls_tarsys_id || 'ln_WDD_SCORE=' ||
725 ln_WDD_SCORE);726
727 END IF; --728
729 --不计算的 创新度得分===========================================================
730 --!!!!!
731 IF ln_TARSYS_SCORE_TYPE = 8 THEN
732
733 --更新创新度得分
734 UPDATEkpi_manager_boresult_temp t735 SET t.CXD_SCORE =ls_BODATA736 WHERE t.id =ln_ID;737 COMMIT;738 DBMS_OUTPUT.PUT_LINE('2.8 不计算的创新度得分 、 ls_TARGET_NAME=' ||
739 ls_TARGET_NAME || 'ls_tarsys_id=' ||
740 ls_tarsys_id || 'CXD_SCORE=' ||ls_BODATA);741
742 END IF; --743
744 --修正系数得分计算===========================================================
745 --!!!!!
746 IF ln_TARSYS_SCORE_TYPE = 6 THEN
747 ln_K_DEP_DATA :=PACK_KPI_KERNEL.Get_OneTarget_Score(ls_tarsys_id,748 ls_BODATA/100);749
750 --修正系数得分
751 UPDATEkpi_manager_boresult_temp t752 SET t.K_DEP_DATA =ln_K_DEP_DATA753 WHERE t.id =ln_ID;754 COMMIT;755 DBMS_OUTPUT.PUT_LINE('2.6 修正系数得分、 ls_TARGET_NAME=' ||
756 ls_TARGET_NAME || 'ls_tarsys_id=' ||
757 ls_tarsys_id || 'ln_K_DEP_DATA=' ||
758 ln_K_DEP_DATA);759
760 END IF; --
761 ------------修正系数不计算 范广龙 20130905
762 IF ln_TARSYS_SCORE_TYPE = 61 THEN
763 ln_K_DEP_DATA :=ls_BODATA;764
765 --修正系数得分
766 UPDATEkpi_manager_boresult_temp t767 SET t.K_DEP_DATA =ln_K_DEP_DATA768 WHERE t.id =ln_ID;769 COMMIT;770 DBMS_OUTPUT.PUT_LINE('2.7 修正系数不计算体系得分、 ls_TARGET_NAME=' ||
771 ls_TARGET_NAME || 'ls_tarsys_id=' ||
772 ls_tarsys_id || 'ln_K_DEP_DATA=' ||
773 ln_K_DEP_DATA);774
775 END IF;776 ----------------------------------------------- --
777 ----
778
779 END IF;780 --==============================
781 --循环结束FETCH一次=============
782 --==============================
783 FetchCur_BO784 INTOln_ID,785 ls_T_ID,786 ls_TARGET_ID,787 ls_TARGET_CODE,788 ls_TARGET_NAME,789 ls_tarsys_id,790 ls_STANDARDVALUE,791 ls_RATIO,792 ls_BODATA,793 ls_BODATA2,794 ls_BODATE;795
796 EndLoop;797
798 --test
799 DBMS_OUTPUT.PUT_LINE('2.9、 计算结束——共计算指标个数 、 ln_i=' ||ln_i);800
801 CloseCur_bo;802
803 --==================================================
804 --第三部分 完成指标数据提交至指定位置
805 --==================================================
806
807 --更新根据flag分类。
808
809 --ls_flag = 0 批量计算
810 IF ls_flag = '0' THEN
811
812 --kpi_manager_boresult_temp ----》kpi_manager_boresult_report
813
814 begin
815 merge intokpi_manager_boresult_report t1816 using (selectt.t_id,817 t.target_id,818 t.target_code,819 t.target_name,820 t.bodata,821 t.bodata2,822 t.bodate,823 SUM(t.wdd_score) wdd_score,824 SUM(t.nld_score) nld_score,825 SUM(t.cxd_score) cxd_score,826 SUM(t.yszql_scroe) yszql_scroe,827 SUM(t.K_DEP_DATA) K_DEP_DATA828
829 fromKPI_MANAGER_BORESULT_TEMP t830 GROUP BYt.t_id,831 t.target_id,832 t.target_code,833 t.target_name,834 t.bodata,835 t.bodata2,836 t.bodate) t2837 on (t1.target_id || t1.report_month = t2.target_id ||t2.bodate)838
839 when matched then
840 update
841 set t1.update_date =SYSDATE,842 t1.useflag = '0',843 t1.bodata =t2.bodata,844 t1.bodata2 =t2.bodata2,845 t1.wdd_score =t2.wdd_score,846 t1.nld_score =t2.nld_score,847 t1.cxd_score =t2.cxd_score,848 t1.yszql_scroe =t2.yszql_scroe,849 t1.K_DEP_DATA = t2.K_DEP_DATA /*,850 t1.commit_flag = '0'*/
851
852 WHERE t1.target_id =t2.target_id853 AND t1.report_month =t2.bodate854 and t1.commit_flag = 0
855
856
857 when not matched then
858 insert
859 (TARGET_ID,860 TARGET_NAME,861 TARGET_CODE,862 UPDATE_DATE,863 REPORT_MONTH,864 USEFLAG,865 WDD_SCORE,866 NLD_SCORE,867 CXD_SCORE,868 YSZQL_SCROE,869 K_DEP_DATA,870 COMMIT_FLAG,871 BODATA,872 BODATA2873
874 )875 Values
876 (t2.target_id,877 t2.target_name,878 t2.target_code,879 SYSDATE,880 t2.bodate,881 '0',882 t2.WDD_SCORE,883 t2.NLD_SCORE,884 t2.CXD_SCORE,885 t2.YSZQL_SCROE,886 t2.K_DEP_DATA,887 '0',888 t2.bodata,889 t2.bodata2);890 commit;891 exception892 when OTHERS then
893 rollback;894 end;895 END IF; --==========================================
896
897 --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
898 --ls_flag = 1 用户自定义计算
899 IF ls_flag = '1' THEN
900
901 begin
902 merge intokpi_flu_record t1903 using (selectt.t_id,904 t.target_id,905 t.target_code,906 t.target_name,907 t.bodata,908 t.bodate,909 SUM(t.wdd_score) wdd_score,910 SUM(t.nld_score) nld_score,911 SUM(t.cxd_score) cxd_score,912 SUM(t.yszql_scroe) yszql_scroe913
914 fromKPI_MANAGER_BORESULT_TEMP t915 GROUP BYt.t_id,916 t.target_id,917 t.target_code,918 t.target_name,919 t.bodata,920 t.bodate) t2921 on (t1.rec_id =t2.t_id)922
923 when matched then
924 update
925 SET t1.wdd_score =t2.wdd_score,926 t1.nld_score =t2.nld_score,927 t1.cxd_score =t2.cxd_score,928 t1.yszql_scroe =t2.yszql_scroe929 WHERE t1.rec_id =t2.t_id;930 commit;931 exception932 when OTHERS then
933 rollback;934 end;935 --更新K值
936 begin
937 merge intokpi_manager_boresult_report t1938 using (selectt.t_id,939 t.target_id,940 t.target_code,941 t.target_name,942 t.bodata,943 t.bodata2,944 t.bodate,945 SUM(t.wdd_score) wdd_score,946 SUM(t.nld_score) nld_score,947 SUM(t.cxd_score) cxd_score,948 SUM(t.yszql_scroe) yszql_scroe,949 SUM(t.K_DEP_DATA) K_DEP_DATA950
951 fromKPI_MANAGER_BORESULT_TEMP t952 GROUP BYt.t_id,953 t.target_id,954 t.target_code,955 t.target_name,956 t.bodata,957 t.bodata2,958 t.bodate) t2959 on (t1.target_id || t1.report_month = t2.target_id ||t2.bodate)960
961 when matched then
962 update
963 set t1.update_date =SYSDATE,964 t1.useflag = '0',965 --t1.bodata = t2.bodata,
966 t1.bodata2 =t2.bodata2,967
968 t1.K_DEP_DATA =t2.K_DEP_DATA969 /*,970 t1.commit_flag = '0'*/
971
972 WHERE t1.target_id =t2.target_id973 AND t1.report_month =t2.bodate;974
975 commit;976 exception977 when OTHERS then
978 rollback;979 end;980
981 END IF;982
983 ENDKT_MAIN_MASTER_CONTROL;984
985 ---==================================================
986
987 --====================================================================
988
989 FUNCTION GET_ONETARGET_SCORE(as_TARSYS_id IN VARCHAR2, as_bodata NUMBER)990 RETURN NUMBER AS
991 --ComClass CATALOG_ID
992 --分数上限、下限和步长
993
994 --返回值
995 ln_RESULT NUMBER;996
997 BEGIN
998
999 DECLARE
1000
1001 BEGIN
1002 --初始化
1003
1004 IF as_bodata IS NULL THEN
1005 --1006
1007 RETURN 0;1008
1009 ELSE
1010 BEGIN
1011
1012 SELECT DECODE(SIGN(t.tarsys_step),1013 1,1014 ( /*trunc(*/
1015 (as_bodata - t.tarsys_bottom) / t.tarsys_step) *
1016 t.tarsys_score /*)*/,1017 -1,1018 ( /*trunc(*/
1019 (t.tarsys_upper - as_bodata) / (-t.tarsys_step)) *
1020 t.tarsys_score /*)*/,1021 0,1022 t.tarsys_score, --步长为0,直接返回默认分值
1023 0)1024 INTOln_RESULT1025 fromkpi_kpimodel_targetsystem t1026
1027 WHERE t.p_tarsys_id =as_TARSYS_id1028 AND t.tarsys_upper >as_bodata1029 AND t.tarsys_bottom <=as_bodata;1030 EXCEPTION1031 WHEN OTHERS THEN
1032 ln_RESULT := 0;1033
1034 END;1035 END IF;1036 END;1037
1038 RETURN round(ln_RESULT, 2);1039 ENDGET_ONETARGET_SCORE;1040
1041 --====================================================================
1042
1043 --====================================================================
1044
1045 --====================================================================
1046
1047 FUNCTION GET_ONETARGET_SCORE_VAR(as_TARSYS_id IN VARCHAR2,1048 as_bodata NUMBER) RETURN NUMBER AS
1049 --ComClass CATALOG_ID
1050 --分数上限、下限和步长
1051
1052 --返回值
1053 ln_RESULT NUMBER;1054
1055 BEGIN
1056
1057 DECLARE
1058
1059 BEGIN
1060 --初始化
1061
1062 IF as_bodata IS NULL THEN
1063 --1064
1065 RETURN 0;1066
1067 ELSE
1068 BEGIN
1069
1070 SELECT as_bodata * t.tarsys_score --传入值乘参数,用体系得分保存。
1071 INTOln_RESULT1072
1073 fromkpi_kpimodel_targetsystem t1074
1075 WHERE t.p_tarsys_id =as_TARSYS_id1076 AND t.tarsys_upper >as_bodata1077 AND t.tarsys_bottom <=as_bodata;1078 EXCEPTION1079 WHEN OTHERS THEN
1080 ln_RESULT := 0;1081
1082 END;1083 END IF;1084 END;1085
1086 RETURN round(ln_RESULT, 2);1087 ENDGET_ONETARGET_SCORE_VAR;1088
1089 --====================================================================
1090
1091 --====================================================================
1092
1093 --计算量化月奖 ,每日 ,暂时停用中
1094 PROCEDURE GET_BORESULT_LH_AWORD_today IS
1095
1096 BEGIN
1097
1098 begin
1099 --从kpi_kernel_lh_aword_v ----》KPI_RESULT_DEP_AWORD
1100 --仅仅取当日的BODATA结果,根据部门汇总月奖保存
1101 merge intoKPI_RESULT_DEP_AWORD t11102 using (SELECT *
1103
1104 FROMkpi_kernel_lh_aword_v t1105 WHERE t.resultdate = to_char(SYSDATE, 'yyyymmdd')) t21106 on (t1.depid =t2.department_id)1107
1108 when matched then
1109 update
1110 set t1.resdata = t2.Aword, t1.resdate =t2.resultdate1111 WHERE t1.resdate = to_char(SYSDATE, 'yyyymmdd')1112 when not matched then
1113 insert
1114 (ResultID, DepID, ResDATA, ResDate)1115 Values
1116 (seq_KPI_Result_AWORD.NEXTVAL,1117 t2.department_id,1118 t2.Aword,1119 SYSDATE);1120 commit;1121
1122 exception1123 when OTHERS then
1124 rollback;1125 end;1126
1127 ENDGET_BORESULT_LH_AWORD_today;1128
1129 FUNCTION Get_KPI_System_P_ID(as_target_id IN VARCHAR2) RETURN TSTRARRY AS
1130
1131 tst_arry TSTRARRY;1132
1133 --tst游标
1134 Cursor Cur_TST Is
1135 selectt.TARSYS_ID1136 fromkpi_kpimodel_tst t1137 where t.target_id =as_target_id;1138
1139 ls_tst VARCHAR2(100);1140 ls_tst2 VARCHAR2(100);1141 ln_i INTEGER;1142 ln_count INTEGER;1143
1144 BEGIN
1145 OpenCur_TST;1146 FetchCur_TST1147 INTOls_tst;1148 ln_i := 1;1149 --主循环 每次一个指标。
1150 While Cur_TST%Found LOOP1151
1152 tst_arry(ln_i) :=ls_tst;1153 ln_i := ln_i + 1;1154 --循环结束FETCH一次
1155
1156 FetchCur_TST1157 INTOls_tst;1158 EndLoop;1159 CloseCur_TST;1160
1161 --处理数组0位置,用来记录数据数量
1162 tst_arry(0) :=ln_i;1163
1164 RETURNtst_arry;1165
1166 ENDGet_KPI_System_P_ID;1167 --====================================================================
1168
1169 FUNCTION Get_KPI_SystemID(as_target_id IN VARCHAR2) RETURN TSTRARRYARRY AS
1170
1171 tst_arry TSTRARRY;1172 tst_arryarry TSTRARRYARRY;1173
1174 --tst游标
1175 Cursor Cur_TST Is
1176 selectt.TARSYS_ID1177 fromkpi_kpimodel_tst t1178 where t.target_id =as_target_id;1179
1180 ls_tst VARCHAR2(100);1181 ls_tst2 VARCHAR2(100);1182 ln_i INTEGER;1183 ln_count INTEGER;1184
1185 --system1 有子节点
1186 Cursor Cur_system1 Is
1187 selectt.tarsys_id1188 fromKPI_KPIMODEL_TARGETSYSTEM t1189 where t.tarsys_id <>ls_tst21190 start with t.tarsys_id =ls_tst21191 connect by prior t.tarsys_id =t.p_tarsys_id;1192
1193 --system2 没子节点
1194 Cursor Cur_system2 Is
1195 selectt.tarsys_id1196 fromKPI_KPIMODEL_TARGETSYSTEM t1197 where t.tarsys_id =ls_tst21198 start with t.tarsys_id =ls_tst21199 connect by prior t.tarsys_id =t.p_tarsys_id;1200
1201 BEGIN
1202 OpenCur_TST;1203 FetchCur_TST1204 INTOls_tst;1205 ln_i := 1;1206 --主循环 每次一个指标。
1207 While Cur_TST%Found LOOP1208
1209 tst_arry(ln_i) :=ls_tst;1210 ln_i := ln_i + 1;1211 --循环结束FETCH一次
1212
1213 FetchCur_TST1214 INTOls_tst;1215 EndLoop;1216 CloseCur_TST;1217
1218 --处理数组0位置,用来记录数据数量
1219 tst_arry(0) :=ln_i;1220 tst_arryarry(0)(0) :=ln_i;1221 IF ln_i = 1 THEN
1222 tst_arryarry(0)(0) := '0';1223 END IF;1224
1225 --根据tst取所有的子节点
1226 FOR i IN 1 .. tst_arry(0) - 1LOOP1227 DBMS_OUTPUT.PUT_LINE('二、 tst第一步,循环次数:' || i || ',target_id:' ||
1228 as_target_id || '考核大体系' ||tst_arry(i));1229 ENDLOOP;1230
1231 IF tst_arryarry(0) (0) <> 0 THEN
1232 FOR i IN 1 .. tst_arry(0) - 1LOOP1233 ls_tst2 :=tst_arry(i);1234
1235 --判断是否有子节点
1236 BEGIN
1237 select COUNT(1)1238 INTOln_count1239 fromKPI_KPIMODEL_TARGETSYSTEM t1240 where t.tarsys_id <>ls_tst21241 start with t.tarsys_id =ls_tst21242 connect by prior t.tarsys_id =t.p_tarsys_id;1243 exception1244 when NO_DATA_FOUND then
1245 ln_count := 0;1246 END;1247
1248 IF ln_count > 0 THEN
1249 OpenCur_system1;1250 FetchCur_system11251 INTOls_tst;1252 ln_i := 1;1253 --主循环 每次一个指标。
1254 While Cur_system1%Found LOOP1255
1256 tst_arryarry(i)(ln_i) :=ls_tst;1257 ln_i := ln_i + 1;1258 FetchCur_system11259 INTOls_tst;1260 EndLoop;1261 CloseCur_system1;1262 tst_arryarry(i)(0) :=ln_i;1263
1264 ELSE
1265 OpenCur_system2;1266 FetchCur_system21267 INTOls_tst;1268 ln_i := 1;1269 --主循环 每次一个指标。
1270 While Cur_system2%Found LOOP1271
1272 tst_arryarry(i)(ln_i) :=ls_tst;1273 ln_i := ln_i + 1;1274 FetchCur_system21275 INTOls_tst;1276 EndLoop;1277 CloseCur_system2;1278 tst_arryarry(i)(0) :=ln_i;1279
1280 END IF;1281
1282 ENDLOOP;1283 END IF;1284
1285 RETURNtst_arryarry;1286
1287 ENDGet_KPI_SystemID;1288
1289 --====================================================================
1290
1291 FUNCTION GetComAword(as_KPI_SCORE IN number, as_CATALOG_ID IN VARCHAR2)1292 RETURN NUMBER AS
1293 --ComClass CATALOG_ID
1294 --分数上限、下限和步长
1295 dblScoreUP number;1296 dblScoreBottom number;1297 dblScoreStep number;1298 dblScoreTT number;1299
1300 LS_BOTTOM number; --记录起征点
1301 --返回值
1302 ln_RESULT NUMBER;1303
1304 BEGIN
1305
1306 DECLARE
1307 --TYPE s_TYPE IS RECORD
1308 --( str VARCHAR2(4000) );
1309
1310 BEGIN
1311 LS_BOTTOM := 0;1312 ln_RESULT := 0;1313
1314 --获取“起征点”
1315 BEGIN
1316
1317 SELECTt.catalog_t_bottom1318 INTOLS_BOTTOM1319 fromKPI_KPIMODEL_CATALOGTARGET t1320
1321 WHERE t.catalog_id =as_CATALOG_ID1322 AND t.catalog_t_award = 0;1323 EXCEPTION1324 WHEN OTHERS THEN
1325 LS_BOTTOM := -99999;1326
1327 END;1328 --无法获取起征点,则结果返回-99999
1329 IF LS_BOTTOM = -99999 THEN
1330 ln_RESULT := -99999; --返回值为-1特殊值,说明表中参数设置有错误。
1331
1332 ELSE
1333 --算法
1334
1335 IF as_KPI_SCORE >= LS_BOTTOM THEN
1336
1337 --新算法,适合累进计算部分
1338 BEGIN
1339 SELECT SUM(DECODE(DECODE(SIGN(as_KPI_SCORE -T.CATALOG_T_UPPER),1340 0,1341 1,1342 1,1343 1,1344 -1,1345 -1), --判断区间 0,1均返回1代表本段算全分 -1返回-1代表本段算比例分
1346 1,1347 ((T.CATALOG_T_UPPER - T.CATALOG_T_BOTTOM) /
1348 T.CATALOG_T_STEP) * T.CATALOG_T_AWARD, --不在这个区间
1349 -1,1350 DECODE(SIGN(CATALOG_T_STEP),1351 1,1352 ((as_KPI_SCORE - T.CATALOG_T_BOTTOM) /
1353 T.CATALOG_T_STEP *T.CATALOG_T_AWARD)),1354 -1,1355 ((T.CATALOG_T_UPPER - as_KPI_SCORE) /
1356 (-T.CATALOG_T_STEP) *T.CATALOG_T_AWARD),1357 0)) C_AWARD1358 INTOln_RESULT1359 FROMKPI_KPIMODEL_CATALOGTARGET T1360
1361 WHERE T.CATALOG_ID =as_CATALOG_ID1362 AND T.CATALOG_T_BOTTOM >=LS_BOTTOM1363 AND T.CATALOG_T_BOTTOM <=as_KPI_SCORE1364 ORDER BYT.CATALOG_T_UPPER;1365 EXCEPTION1366 WHEN OTHERS THEN
1367 ln_RESULT := -99998;1368 END;1369
1370 END IF;1371
1372 IF as_KPI_SCORE < LS_BOTTOM THEN
1373
1374 --老算法,适合多段计算部分
1375 BEGIN
1376 SELECT
1377
1378 DECODE(SIGN(CATALOG_T_STEP),1379 1,1380 (DECODE(CATALOG_T_STEP, --若step为9999,则直接-1,奖金为零
1381 9999,1382 -1,1383 --step 小于零
1384 (as_KPI_SCORE - T.CATALOG_T_BOTTOM) /
1385 T.CATALOG_T_STEP *T.CATALOG_T_AWARD)),1386 -1,1387 ((T.CATALOG_T_UPPER - as_KPI_SCORE) /
1388 (-T.CATALOG_T_STEP) *T.CATALOG_T_AWARD),1389 0) LN_RESULT1390 INTOln_RESULT1391 FROMKPI_KPIMODEL_CATALOGTARGET T1392
1393 WHERE T.CATALOG_ID =as_CATALOG_ID1394 AND T.CATALOG_T_UPPER <=LS_BOTTOM1395 AND T.CATALOG_T_UPPER >as_KPI_SCORE1396 AND T.CATALOG_T_BOTTOM <=as_KPI_SCORE;1397
1398 EXCEPTION1399 WHEN OTHERS THEN
1400 ln_RESULT := -99997;1401 END;1402
1403 END IF;1404
1405 END IF;1406
1407 --test
1408 --DBMS_OUTPUT.PUT_LINE('GetScoreAllYSZQL :as_bo.TARGET_ID=' ||as_bo.TARGET_ID ||'Ln_temp_resDBL预算='||Ln_temp_resDBL );
1409 --加基本月奖1,返回实际月奖
1410 ln_RESULT := nvl(ln_RESULT, 0) + 1;1411 END;1412 RETURNln_RESULT;1413 ENDGetComAword;1414
1415 --====================================================================
1416
1417 --====================================================================
1418 --计算总月奖
1419 FUNCTION Get_all_Aword(as_LH_SCORE IN number, as_GL_SCORE IN NUMBER)1420 RETURN NUMBER AS
1421
1422 ln_RESULT NUMBER;1423
1424 BEGIN
1425
1426 ln_RESULT := 0;1427 ln_RESULT := round(as_LH_SCORE * (1 - as_GL_SCORE), 3);1428
1429 RETURNln_RESULT;1430 ENDGet_all_Aword;1431
1432 --====================================================================
1433
1434 --====================================================================
1435 --获取指标的bodata2
1436 FUNCTION Get_bodata2_kpi_flu_record(as_target_id IN VARCHAR2,1437 as_month IN VARCHAR2) RETURN NUMBER AS
1438 --权重修正
1439 --K值修正
1440 --得分上下限修正。
1441
1442 --返回值
1443 ln_RESULT NUMBER;1444
1445 BEGIN
1446 begin
1447 selectt.bodata21448 into ln_RESULT --取P_id
1449 fromkpi_manager_boresult_report t1450 where t.target_id =as_target_id1451 AND t.report_month =as_month;1452 exception1453 when NO_DATA_FOUND then
1454 ln_RESULT := 0;1455 end;1456
1457 RETURNln_RESULT;1458 ENDGet_bodata2_kpi_flu_record;1459
1460 --====================================================================
1461
1462 --====================================================================
1463 --指标得分最终得分修正
1464 FUNCTION Get_K_DEP_DATA(as_dep_id IN VARCHAR2, as_month IN VARCHAR2)1465 RETURN NUMBER AS
1466 --权重修正
1467 --K值修正
1468 --得分上下限修正。
1469
1470 --返回值
1471 ln_RESULT NUMBER;1472 ls_target_id VARCHAR2(50);1473
1474 BEGIN
1475 BEGIN
1476 selecttv.target_id1477 into ls_target_id --取P_id
1478 -----范广龙修改 2013 09 07
1479
1480 from (select t.target_id fromkpi_kpimodel_kpitarget t1481 where t.department_id =as_dep_id1482 AND t.target_name LIKE '月奖基准系数%' order by t.target_id desc) tv1483 where
1484 rownum=1;1485 /*范例1486 select * from (select t.*1487 --取P_id1488 from kpi_kpimodel_kpitarget t1489 where t.department_id = 1221490 AND t.target_name LIKE '月奖基准系数%' order by t.target_id desc) ty where rownum=1;1491
1492 */
1493
1494
1495 exception1496 when OTHERS then
1497 ln_RESULT := 1;1498 end;1499
1500 BEGIN
1501 selectt.k_dep_data1502 into ln_RESULT --取P_id
1503 fromkpi_manager_boresult_report t1504 where t.target_id =ls_target_id1505 AND t.report_month =as_month;1506 exception1507 when OTHERS then
1508 ln_RESULT := 1;1509 end;1510
1511 RETURN nvl(ln_RESULT, 1);1512 ENDGet_K_DEP_DATA;1513
1514 --====================================================================
1515
1516 --====================================================================
1517 --指标得分最终得分修正
1518 FUNCTION get_lh_score_fix(LH_score IN NUMBER,1519 dep_id IN NUMBER,1520 as_month IN VARCHAR2) RETURN NUMBER AS
1521
1522 --返回值
1523 ln_RESULT NUMBER;1524 ln_upper_score NUMBER;1525 ln_LH_score NUMBER;1526 BEGIN
1527 ln_LH_score :=LH_score;1528 --计算
1529 --(量化指标基础的分 - 本单位资金计划准确率得分)*修正系数 在上下限规整
1530
1531 --1 - 本单位资金计划准确率得分
1532 ln_LH_score := ln_LH_score +get_zjjhzql(dep_id, as_month);1533
1534 --2 K值修正
1535 ln_LH_score := ln_LH_score *1;--Get_K_DEP_DATA(dep_id, as_month);
1536
1537 --3 得分上下限修正。
1538
1539 BEGIN
1540 SELECTt.upper_score1541 INTOln_upper_score1542 FROMkpi_kpimodel_department t1543 WHERE t.department_id =dep_id;1544 EXCEPTION1545 WHEN OTHERS THEN
1546 ln_RESULT :=ln_LH_score;1547 END;1548
1549 --超过上限的 修改成得分上限
1550 IF ln_upper_score < ln_LH_score THEN
1551 ln_RESULT :=ln_upper_score;1552 ELSE
1553 ln_RESULT :=ln_LH_score;1554 END IF;1555
1556 RETURNln_RESULT;1557 ENDget_lh_score_fix;1558
1559 --====================================================================
1560 --取得资金计划准确率
1561 FUNCTION get_zjjhzql(as_dep_id IN VARCHAR2, as_month IN VARCHAR2)1562 RETURN NUMBER AS
1563 --权重修正
1564 --K值修正
1565 --得分上下限修正。
1566
1567 --返回值
1568 ln_RESULT NUMBER;1569 ls_target_id VARCHAR2(50);1570
1571 BEGIN
1572 BEGIN
1573 SELECTt.YSZQL_SCROE1574 INTOln_RESULT1575 fromkpi_kernel_dep_month_mx_base_v t1576 WHERE t.TARGET_NAME LIKE '%资金计划准确率%'
1577 AND t.REC_MONTHDATE =as_month1578 AND t.DEPARTMENT_ID =as_dep_id;1579 exception1580 when OTHERS then
1581 ln_RESULT := 0;1582 end;1583
1584 RETURN nvl(ln_RESULT, 0);1585 ENDget_zjjhzql;1586
1587 --====================================================================
1588
1589 --====================================================================
1590 --定时取指标元素 主程序 小元素合成算法
1591 --=-=-==-=-=-=-=-------------------------------
1592 PROCEDURE BOELEMENT_MASTER_CONTROL(as_date IN VARCHAR2) AS
1593 --定义一
1594
1595 ls_date VARCHAR2(20);1596
1597 --定义二
1598
1599 small_ele_idx NUMBER;1600 ln_S NUMBER;1601 ln_S1 NUMBER;1602 ln_A1 NUMBER;1603 ln_A2 NUMBER;1604 ln_A3 NUMBER;1605 ln_A4 NUMBER;1606 ln_A5 NUMBER;1607 ln_A6 NUMBER;1608
1609 --保存游标取出的值
1610 ele_row kpi_kernel_boelement_bigele_v%rowtype;1611
1612 type small_ele is record --包含转账方向、金额等信息
1613 (1614 rownum number,1615 ele_id VARCHAR2(100),1616 er_value NUMBER
1617
1618 );1619
1620 type small_ele_t IS TABLE of small_ele index bybinary_integer;1621 l_small_ele small_ele; --记录
1622 l_small_ele_t small_ele_t; --定义表
1623
1624 --大元素游标
1625 Cursor Cur_ele_big Is
1626 --禁用生产的数据,当不需要禁用时,解锁
1627 SELECT *
1628 Fromkpi_kernel_boelement_bigele_v1629 where 1 = 2
1630 ORDER BYBIG_ELE_ID;1631
1632 --小元素游标
1633 Cursor Cur_ele_small Is
1634 SELECTrownum, tt.ele_id, tt.er_value1635 FROMkpi_manager_boelement t, kpi_manager_boelement_result tt1636 WHERE t.ele_id =tt.ele_id1637 AND t.ele_id LIKE ele_row.big_ele_id || '-%'
1638 AND tt.er_month =ls_date1639 ORDER BYtt.ele_id;1640
1641 --定义三
1642
1643 BEGIN
1644
1645 --DBMS_OUTPUT.ENABLE(10000000);
1646
1647 --参数处理
1648 IF as_date IS NULL THEN
1649
1650 ls_date :=GET_KPI_DATE();1651 ELSE
1652 ls_date :=as_date;1653 END IF;1654
1655 --==================================================
1656 --第一部分 获取所有普通元素和小元素的值
1657 --==================================================
1658
1659 --主体 取元素值,每月一条,有则更新
1660 BEGIN
1661 DBMS_OUTPUT.put_line('检查点1-1');1662 deleteKPI_MANAGER_ELE_RESULT_TEMP;1663 commit;1664 DBMS_OUTPUT.put_line('检查点1-2');1665 insert /*+append*/ intoKPI_MANAGER_ELE_RESULT_TEMP1666 SELECTt.ELE_ID,1667 t.ELE_TYPE,1668 t.ELEMENT_NAME,1669 t.DEP_NAME,1670 t.FACTRY_NAME,1671 t.ELEMNT_SORUCE,1672 t.DEFAULTVALUE,1673 PACK_KPI_KERNEL.GET_BOELEMENT(t.ele_id, ls_date) ER_VALUE,1674 ls_date er_month1675 fromkpi_manager_boelement t1676 WHERE t.ele_type_update IN ('0', '1')1677 and t.ele_type <> '指标值';1678 commit;1679
1680 DBMS_OUTPUT.put_line('检查点1-3');1681 MERGE INTOkpi_manager_boelement_result t11682 USING KPI_MANAGER_ELE_RESULT_TEMP t21683 ON (t1.ele_id || t1.ER_MONTH = t2.ELE_ID ||t2.er_month)1684 --按月写入条目,每月每元素一条数据
1685 WHEN MATCHED THEN --匹配就更新
1686 UPDATE
1687 SET t1.ER_VALUE = t2.ER_VALUE, t1.ER_DATE =SYSDATE1688 WHERE t1.ele_id =t2.ELE_ID1689 AND t1.er_month =t2.er_month1690
1691
1692 WHEN NOT MATCHED THEN --不匹配就写入新数据
1693 INSERT
1694 (ELE_ID, ER_MONTH, ER_VALUE, ER_DATE)1695 VALUES
1696 (t2.ELE_ID,1697 t2.er_month,1698 t2.ER_VALUE,1699 SYSDATE1700
1701 );1702
1703 commit;1704 DBMS_OUTPUT.put_line('检查点1-4');1705 ---新增日志表记录
1706
1707 /*insert into KPI_MANAGER_BOELEMENT_LOG1708 (er_id,ele_id, er_month, er_value, er_date)1709 SELECT1710 SEQ_KPI_KPI_ELE_LOG.Nextval,1711 t.ELE_ID,1712 ls_date er_month,1713 GET_BOELEMENT(t.ele_id, ls_date) ER_VALUE,1714 sysdate1715 from kpi_manager_boelement t1716 WHERE t.ele_type_update IN ('0', '1')1717 and t.ele_type <> '指标值';1718
1719
1720
1721 commit;*/
1722 --Exception
1723 --when others then
1724
1725 --pack_kpi_base.SET_SYSTEM_LOG( '指标元素提取出错', '指标元素提取出错');
1726
1727 end;1728
1729 --将审批通过的计划值更新到元素结果表【kpi_manager_boelement_result】中
1730 DBMS_OUTPUT.put_line('检查点1-5');1731 PACK_KPI_JHZ.kpi_BackToELeResultTable(ls_date);1732 DBMS_OUTPUT.put_line('检查点1-6');1733 --利润实际排名
1734 KPI_LR_SJ_PM(ls_date);1735 --利润预算准确率排名
1736 KPI_LR_YSZQL_PM(as_month =>ls_date);1737 DBMS_OUTPUT.put_line('检查点1-7');1738 --==================================================
1739 --第二部分 根据获取的小元素 合成大元素 写入临时表
1740 --==================================================
1741
1742 --1、获取大元素列表逐条计算大元素值
1743 OpenCur_ele_big;1744 loop1745 --主循环
1746
1747 --循环内参数初始化####
1748 --small_ele_idx :=0;
1749 ln_s1 := -9997; --中间结果
1750 ln_s := -9998; --最终结果
1751 ln_A1 := 0;1752 ln_A2 := 0;1753 ln_A3 := 0;1754 ln_A4 := 0;1755 ln_A5 := 0;1756 ln_A6 := 0;1757
1758 --取游标
1759 fetchCur_ele_big1760 intoele_row;1761 exit when Cur_ele_big%NOTFOUND;1762
1763 ---
1764 /*DBMS_OUTPUT.PUT_LINE('2.1、 大元素值取得、 big_ele_id = ' ||1765 ele_row.big_ele_id || ' element_name=' ||1766 ele_row.element_name || ' ele_type_update=' ||1767 ele_row.ele_type_update || ' ele_weight1=' ||1768 ele_row.ele_weight1 || ' tarsys_id=' ||1769 ele_row.tarsys_id || ' target_id=' ||1770 ele_row.target_id || ' formula_bm=' ||1771 ele_row.formula_bm);*/
1772 small_ele_idx := 0;1773
1774 --(1)得到此大元素的小元素序列,并循环把小元素的值存入变量中。
1775 OpenCur_ele_small;1776 loop1777 --主循环
1778 fetchCur_ele_small1779 intol_small_ele_t(small_ele_idx);1780 exit when Cur_ele_small%NOTFOUND;1781
1782 ---
1783 /*DBMS_OUTPUT.PUT_LINE(' 2.2小元素值循环调用 、num = ' || l_small_ele_t(small_ele_idx)1784 .rownum || ' ele_id=' || l_small_ele_t(small_ele_idx)1785 .ele_id || ' er_value=' || l_small_ele_t(small_ele_idx)1786 .er_value);*/
1787
1788 small_ele_idx := small_ele_idx + 1;1789
1790 endLOOP;1791 closeCur_ele_small;1792
1793 /*代码例子备用1794 for idx in 1 .. 5 loop -- 初始化数据1795 l_small_ele_t(idx).rownum :=idx;1796 l_small_ele_t(idx).ele_id := 'xxxxx' ||idx;1797 l_small_ele_t(idx).er_value := 'F' ;1798 END loop;*/
1799
1800 --(2)根据大元素的公式标记 进入相对应的算法 计算得分S1
1801
1802 /*
1803 NHYSZQL 指标元素体系-能耗预算准确率 S1=(A2-A1)/A1*1001804 FJWCL 指标元素体系-分解完成率 S1=(A2-A1)/A1*1001805 WNCXL 指标元素体系-物耗能耗创新率 S1=A1/A2*1001806 WNWCL 指标元素体系-能耗物耗完成率 S1=A1/A2*1001807 CLJH 指标元素体系-产量计划 S1=A2/A11808 CLCX1 指标元素体系-产量创新1809 CLCX3 指标元素体系-产量创新1810 CLCX4 指标元素体系-产量创新1811 CLCX5 指标元素体系-产量创新1812 CLCX6 指标元素体系-产量创新1813 CLCX7 指标元素体系-产量创新1814 ZLDF 质量1815 SSL 损失率*/
1816
1817 --/* SSL
1818 IF ele_row.formula_bm = 'SSL' THEN
1819
1820 BEGIN
1821 ln_a1 := l_small_ele_t(0).er_value; --计划值
1822 ln_a2 := l_small_ele_t(1).er_value; --实际值
1823
1824 IF ln_a2 IS NULL OR ln_a1 IS NULL OR ln_a1 = 0 THEN
1825 ln_s1 := 0;1826 ELSE
1827 ln_s1 := ln_a2 / ln_a1 * 100;1828 END IF;1829 EXCEPTION1830 WHEN OTHERS THEN
1831 ln_s1 := 0;1832 END;1833
1834 --S = f(s1) 根据S1 计算S的过程,每个算法均可能不同
1835 IF ln_s1 = 0 THEN
1836 ln_S := 0;1837 ELSE
1838
1839 IF ln_s1 <= 90 THEN
1840 ln_S := 110;1841 END IF;1842 IF ln_s1 > 90 AND ln_s1 <= 110 THEN
1843 ln_S :=ln_s1;1844 END IF;1845 IF ln_s1 > 110 THEN
1846 ln_S := 0;1847 END IF;1848
1849 END IF;1850
1851 END IF;1852
1853 --/* NHYSZQL S1=(A2-A1)/A1*100
1854 IF ele_row.formula_bm = 'NHYSZQL' THEN
1855
1856 BEGIN
1857 ln_a1 := l_small_ele_t(0).er_value;1858 ln_a2 := l_small_ele_t(1).er_value;1859
1860 IF ln_a2 IS NULL OR ln_a1 IS NULL OR ln_a1 = 0 THEN
1861 ln_s1 := 0;1862 ELSE
1863 ln_s1 := (ln_a2 - ln_a1) / ln_a1 * 100;1864 END IF;1865 EXCEPTION1866 WHEN OTHERS THEN
1867 ln_s1 := 0;1868 END;1869
1870 --S = f(s1)根据S1 计算S的过程,每个算法均可能不同
1871
1872 ln_S :=PACK_KPI_KERNEL.Get_OneTarget_Score(ele_row.tarsys_id,1873 ln_s1);1874
1875 END IF;1876
1877 --/* FJWCL S1=(A2-A1)/A1*100
1878 IF ele_row.formula_bm = 'FJWCL' THEN
1879
1880 BEGIN
1881 ln_a1 := l_small_ele_t(0).er_value;1882 ln_a2 := l_small_ele_t(1).er_value;1883
1884 IF ln_a2 IS NULL OR ln_a1 IS NULL OR ln_a1 = 0 THEN
1885 ln_s1 := 0;1886 ELSE
1887 ln_s1 := (ln_a2 - ln_a1) / ln_a1 * 100;1888 ln_s1 := ln_s1 * (ln_a1 / abs(ln_a1));1889 END IF;1890 EXCEPTION1891 WHEN OTHERS THEN
1892 ln_s1 := 0;1893 END;1894
1895 --S = f(s1)根据S1 计算S的过程,每个算法均可能不同
1896
1897 ln_S :=PACK_KPI_KERNEL.Get_OneTarget_Score(ele_row.tarsys_id,1898 ln_s1);1899
1900 END IF;1901
1902 --WNCXL S1=A1/A2*100
1903 IF ele_row.formula_bm = 'WNCXL' THEN
1904
1905 BEGIN
1906 ln_a1 := l_small_ele_t(0).er_value;1907 ln_a2 := l_small_ele_t(1).er_value;1908
1909 IF ln_a2 IS NULL OR ln_a1 IS NULL OR ln_a1 = 0 THEN
1910 ln_s1 := 0;1911 ELSE
1912 ln_s1 := (ln_a1 / ln_a2) * 100;1913 END IF;1914 EXCEPTION1915 WHEN OTHERS THEN
1916 ln_s1 := 0;1917 END;1918
1919 --S = f(s1) 根据S1 计算S的过程,每个算法均可能不同
1920 IF ln_s1 = 0 THEN
1921 ln_S := 0;1922 ELSE
1923
1924 IF ln_s1 < 100 THEN
1925 ln_S := 0;1926 END IF;1927 IF ln_s1 >= 100 AND ln_s1 <= 105 THEN
1928 ln_S :=ln_s1;1929 END IF;1930 IF ln_s1 > 105 THEN
1931 ln_S := 105;1932 END IF;1933
1934 END IF;1935
1936 END IF;1937
1938 --WNCXL S1=A1/A2*100
1939 IF ele_row.formula_bm = 'WNCXL2' THEN
1940
1941 BEGIN
1942 ln_a1 := l_small_ele_t(0).er_value;1943 ln_a2 := l_small_ele_t(1).er_value;1944
1945 IF ln_a2 IS NULL OR ln_a1 IS NULL OR ln_a2 = 0 THEN
1946 ln_s1 := 0;1947 ELSE
1948 ln_s1 := (ln_a2 / ln_a1) * 100;1949 END IF;1950 EXCEPTION1951 WHEN OTHERS THEN
1952 ln_s1 := 0;1953 END;1954
1955 --S = f(s1) 根据S1 计算S的过程,每个算法均可能不同
1956 IF ln_s1 = 0 THEN
1957 ln_S := 0;1958 ELSE
1959
1960 IF ln_s1 < 100 THEN
1961 ln_S := 0;1962 END IF;1963 IF ln_s1 >= 100 AND ln_s1 <= 105 THEN
1964 ln_S :=ln_s1;1965 END IF;1966 IF ln_s1 > 105 THEN
1967 ln_S := 105;1968 END IF;1969
1970 END IF;1971
1972 END IF;1973
1974 --WNWCL S1=A1/A2*100
1975 IF ele_row.formula_bm = 'WNWCL' THEN
1976
1977 BEGIN
1978 ln_a1 := l_small_ele_t(0).er_value;1979 ln_a2 := l_small_ele_t(1).er_value;1980
1981 IF ln_a2 IS NULL OR ln_a1 IS NULL OR ln_a2 = 0 THEN
1982 ln_s1 := 0;1983 ELSE
1984 ln_s1 := pack_kpi_base.F_GET_CFYS(ln_a1, ln_a2) * 100;1985 END IF;1986
1987 EXCEPTION1988 WHEN OTHERS THEN
1989 ln_s1 := 0;1990 END;1991
1992 --S = f(s1) 根据S1 计算S的过程,每个算法均可能不同
1993 IF ln_s1 = 0 THEN
1994 ln_S := 0;1995 ELSE
1996
1997 IF ln_s1 < 90 THEN
1998 ln_S := 0;1999 END IF;2000 IF ln_s1 >= 90 AND ln_s1 <= 105 THEN
2001 ln_S :=ln_s1;2002 END IF;2003 IF ln_s1 > 105 THEN
2004 ln_S := 105;2005 END IF;2006
2007 END IF;2008
2009 END IF;2010
2011 --CLJH 指标元素体系-产量计划S1=A2/A1
2012 IF ele_row.formula_bm = 'CLJH' THEN
2013
2014 BEGIN
2015 ln_a1 := l_small_ele_t(0).er_value;2016 ln_a2 := l_small_ele_t(1).er_value;2017
2018 IF ln_a2 IS NULL OR ln_a1 IS NULL OR ln_a1 = 0 THEN
2019 ln_s1 := 0;2020 ELSE
2021 ln_s1 :=pack_kpi_base.F_GET_CFYS(ln_a2, ln_a1);2022 END IF;2023
2024 EXCEPTION2025 WHEN OTHERS THEN
2026 ln_s1 := 0;2027 END;2028
2029 --S = f(s1) 根据S1 计算S的过程,每个算法均可能不同
2030 IF ln_s1 = 0 THEN
2031 ln_S := 0;2032 ELSE
2033
2034 IF ln_s1 > 1.04 THEN
2035 ln_S := 1.04;2036 ELSE
2037 ln_S :=ln_s1;2038 END IF;2039
2040 END IF;2041
2042 END IF;2043
2044 /*较复杂待编写2045 CLCX1 指标元素体系-产量创新2046 CLCX2 指标元素体系-产量创新2047 CLCX3 指标元素体系-产量创新2048 CLCX4 指标元素体系-产量创新2049 CLCX5 指标元素体系-产量创新2050 CLCX6 指标元素体系-产量创新2051 CLCX7 指标元素体系-产量创新2052 */
2053
2054 --CLCX1 指标元素体系-产量计划S1=A2/A1
2055 IF ele_row.formula_bm = 'CLCX1' THEN
2056
2057 BEGIN
2058 ln_a1 := l_small_ele_t(0).er_value;2059 ln_a2 := l_small_ele_t(1).er_value;2060 ln_a3 := l_small_ele_t(2).er_value;2061 ln_a4 := l_small_ele_t(3).er_value;2062 ln_a5 := l_small_ele_t(4).er_value;2063
2064 DBMS_OUTPUT.PUT_LINE('CLCX1计算过程及结果 、ln_a1 =' ||
2065 ln_a1 || 'ln_a2 =' || ln_a2 || 'ln_a3 =' ||
2066 ln_a3 || 'ln_a4 =' ||ln_a4);2067
2068 --若实际值为0,则结果为0
2069 if nvl(ln_a1, 0) = 0 then
2070 ---
2071 ln_s := 0;2072
2073 ELSE
2074 ---
2075 ln_a1 :=pack_kpi_base.F_GET_CFYS(ln_a1, ln_a5);2076
2077 --a2,a3,a4,均不为空
2078 IF nvl(ln_a2, 0) <> 0 and nvl(ln_a3, 0) <> 0 and
2079 nvl(ln_a4, 0) <> 0 THEN
2080
2081 IF ln_a1 > ln_a4 THEN
2082 ln_s := (ln_a1 - ln_a4) / ln_a4 * 300 +
2083 (ln_a4 - ln_a3) / ln_a3 * 200 +
2084 (ln_a3 - ln_a2) / ln_a2 * 100;2085 ELSIF ln_a1 > ln_a3 THEN
2086 ln_s := (ln_a1 - ln_a3) / ln_a3 * 200 +
2087 (ln_a3 - ln_a2) / ln_a2 * 100;2088 ELSIF ln_a1 > ln_a2 THEN
2089 ln_s := (ln_a1 - ln_a2) / ln_a2 * 100;2090 ELSIF ln_a1 < ln_a2 THEN
2091 ln_s := 0;2092
2093 END IF;2094
2095 IF ln_s > 30 THEN
2096 ln_s := 30;2097 END IF;2098
2099 END IF;2100
2101 --a2,a3,均不为空 a4 = 空
2102 IF nvl(ln_a2, 0) <> 0 and nvl(ln_a3, 0) <> 0 and
2103 nvl(ln_a4, 0) = 0 THEN
2104
2105 IF ln_a1 > ln_a3 THEN
2106 ln_s := (ln_a1 - ln_a3) / ln_a3 * 200 +
2107 (ln_a3 - ln_a2) / ln_a2 * 100;2108 ELSIF ln_a1 > ln_a2 THEN
2109 ln_s := (ln_a1 - ln_a2) / ln_a2 * 100;2110 ELSIF ln_a1 < ln_a2 THEN
2111 ln_s := 0;2112 END IF;2113
2114 IF ln_s > 20 THEN
2115 ln_s := 20;2116 END IF;2117 END IF;2118
2119 --a2,不为空 a3,a4 = 空
2120 IF nvl(ln_a2, 0) <> 0 and nvl(ln_a3, 0) = 0 and
2121 nvl(ln_a4, 0) = 0 THEN
2122
2123 IF ln_a1 > ln_a2 THEN
2124 ln_s := (ln_a1 - ln_a2) / ln_a2 * 100;2125 ELSE
2126 IF ln_a1 < ln_a2 THEN
2127 ln_s := 0;2128
2129 END IF;2130
2131 IF ln_s > 10 THEN
2132 ln_s := 10;2133 END IF;2134 END IF;2135
2136 END IF;2137
2138 END IF;2139 EXCEPTION2140 WHEN OTHERS THEN
2141 ln_s := 0;2142 END;2143
2144 END IF;2145
2146 --CLCX2 指标元素体系-产量计划S1=A2/A1
2147 IF ele_row.formula_bm = 'CLCX2' THEN
2148
2149 BEGIN
2150 ln_a1 := l_small_ele_t(0).er_value;2151 ln_a2 := l_small_ele_t(1).er_value;2152 ln_a3 := l_small_ele_t(2).er_value;2153 ln_a4 := l_small_ele_t(3).er_value;2154
2155 --若实际值为0,则结果为0
2156 if nvl(ln_a1, 0) = 0 then
2157 ---
2158 ln_s := 0;2159
2160 ELSE
2161 ---
2162
2163 ln_a1 := pack_kpi_base.F_GET_CFYS(ln_a1, ln_a4); --求日产量
2164
2165 --a2,a3,均不为空
2166 IF nvl(ln_a2, 0) <> 0 and nvl(ln_a3, 0) <> 0 THEN
2167
2168 IF ln_a1 > ln_a3 THEN
2169 ln_s := (ln_a1 - ln_a3) / ln_a3 * 200 +
2170 (ln_a3 - ln_a2) / ln_a2 * 100;2171 ELSIF ln_a1 > ln_a2 THEN
2172 ln_s := (ln_a1 - ln_a2) / ln_a2 * 100;2173 ELSIF ln_a1 < ln_a2 THEN
2174 ln_s := 0;2175 END IF;2176
2177 IF ln_s > 20 THEN
2178 ln_s := 20;2179 END IF;2180 END IF;2181
2182 --a2,不为空 a3, = 空
2183 IF nvl(ln_a2, 0) <> 0 and nvl(ln_a3, 0) = 0 THEN
2184
2185 IF ln_a1 > ln_a2 THEN
2186 ln_s := (ln_a1 - ln_a2) / ln_a2 * 100;2187 ELSE
2188 IF ln_a1 < ln_a2 THEN
2189 ln_s := 0;2190
2191 END IF;2192
2193 IF ln_s > 10 THEN
2194 ln_s := 10;2195 END IF;2196 END IF;2197
2198 END IF;2199
2200 END IF;2201 EXCEPTION2202 WHEN OTHERS THEN
2203 ln_s := 0;2204 END;2205
2206 END IF;2207
2208 --CLCX3 S1=(A1+A2+A3+A4+A5+A6)*0.15
2209 IF ele_row.formula_bm = 'CLCX3' THEN
2210
2211 BEGIN
2212 ln_a1 := l_small_ele_t(0).er_value;2213 ln_a2 := l_small_ele_t(1).er_value;2214 ln_a3 := l_small_ele_t(2).er_value;2215 ln_a4 := l_small_ele_t(3).er_value;2216 ln_a5 := l_small_ele_t(4).er_value;2217 ln_a6 := l_small_ele_t(5).er_value;2218
2219 ln_s := (ln_a1 + ln_a2 + ln_a3 + ln_a4 + ln_a5 + ln_a6) * 0.15;2220
2221 EXCEPTION2222 WHEN OTHERS THEN
2223 ln_s := 0;2224 END;2225
2226 END IF;2227
2228 --CLCX4 S1=(A1+A2+A3+A4+A5)*0.2
2229 IF ele_row.formula_bm = 'CLCX4' THEN
2230
2231 BEGIN
2232 ln_a1 := l_small_ele_t(0).er_value;2233 ln_a2 := l_small_ele_t(1).er_value;2234 ln_a3 := l_small_ele_t(2).er_value;2235 ln_a4 := l_small_ele_t(3).er_value;2236 ln_a5 := l_small_ele_t(4).er_value;2237
2238 ln_s := (ln_a1 + ln_a2 + ln_a3 + ln_a4 + ln_a5) * 0.2;2239
2240 EXCEPTION2241 WHEN OTHERS THEN
2242 ln_s := 0;2243 END;2244
2245 END IF;2246
2247 --CLCX5 S1=(A1+A2)/A3
2248 IF ele_row.formula_bm = 'CLCX5' THEN
2249
2250 BEGIN
2251 ln_a1 := l_small_ele_t(0).er_value;2252 ln_a2 := l_small_ele_t(1).er_value;2253 ln_a3 := l_small_ele_t(2).er_value;2254
2255 ln_s := pack_kpi_base.F_GET_CFYS(ln_a1 +ln_a2, ln_a3);2256
2257 EXCEPTION2258 WHEN OTHERS THEN
2259 ln_s := 0;2260 END;2261
2262 END IF;2263
2264 --CLCX6 S1=(A1+A2)/A3/24
2265 IF ele_row.formula_bm = 'CLCX6' THEN
2266
2267 BEGIN
2268 ln_a1 := l_small_ele_t(0).er_value;2269 ln_a2 := l_small_ele_t(1).er_value;2270 ln_a3 := l_small_ele_t(2).er_value;2271
2272 ln_s := pack_kpi_base.F_GET_CFYS(ln_a1 + ln_a2, ln_a3) / 24;2273
2274 EXCEPTION2275 WHEN OTHERS THEN
2276 ln_s := 0;2277 END;2278
2279 END IF;2280
2281 --CLCX7 S1=A1/A2
2282 IF ele_row.formula_bm = 'CLCX7' THEN
2283
2284 BEGIN
2285 ln_a1 := l_small_ele_t(0).er_value;2286 ln_a2 := l_small_ele_t(1).er_value;2287
2288 ln_s1 :=pack_kpi_base.F_GET_CFYS(ln_a1, ln_a2);2289 IF ln_s1 > 1 THEN
2290 ln_s := 3;2291 ELSE
2292 ln_s := 0;2293 END IF;2294
2295 EXCEPTION2296 WHEN OTHERS THEN
2297 ln_s := 0;2298 END;2299
2300 END IF;2301
2302 --zfdl S = a1 - a2
2303 IF ele_row.formula_bm = 'ZLDF' THEN
2304
2305 BEGIN
2306 ln_a1 := l_small_ele_t(0).er_value;2307 ln_a2 := l_small_ele_t(1).er_value;2308
2309 IF ln_a1 = 0 THEN
2310 --除数为零结果为零
2311 ln_s := 0;2312 ELSE
2313 ln_s := (pack_kpi_base.F_GET_CFYS(ln_a1, ln_a2) - 1) * 1000 * 5;2314 END IF;2315
2316 --上下限修正
2317 IF ln_s > 50 THEN
2318 ln_s := 50;2319 END IF;2320
2321 IF ln_s < -50 THEN
2322 ln_s := -50;2323 END IF;2324
2325 EXCEPTION2326 WHEN OTHERS THEN
2327 ln_s := 0;2328 END;2329 END IF;2330
2331 --test
2332 /*DBMS_OUTPUT.PUT_LINE(' 2.3权重修正前的s ' || 'ln_s1 = ' ||2333 ln_s1 || ' ln_s =' || ln_s);*/
2334
2335 --(4)根据大元素的权重类型 进行权重修正。 --测试时NVl为1,正式时为0
2336 ln_S := ln_S * nvl(ele_row.ele_weight1, 100) / 100 *
2337 nvl(ele_row.ele_weight2, 100) / 100;2338 ln_S := round(ln_S, 2);2339 --test
2340 /*DBMS_OUTPUT.PUT_LINE(' 2.4计算过程及结果 、ele_id = ' ||2341 ele_row.big_ele_id || 'ln_s1 = ' || ln_s1 ||2342 ' ln_s =' || ln_s);*/
2343
2344 --(5) 结果更新
2345
2346 merge intokpi_manager_boelement_result t12347 using (selectele_row.big_ele_id ele_id,2348 ln_S er_value,2349 ls_date update_date2350
2351 fromdual2352
2353 ) t22354 on (t1.ele_id || t1.er_month = t2.ele_id ||t2.update_date)2355 WHEN MATCHED THEN
2356 UPDATE
2357 SET t1.er_value = t2.er_value, t1.er_date =SYSDATE2358 WHERE t1.ele_id =t2.ele_id2359 and t1.er_month =t2.update_date2360
2361
2362 WHEN NOT MATCHED THEN
2363 INSERT
2364 (2365
2366 ELE_ID,2367 ER_MONTH,2368 ER_VALUE,2369 --ER_VALUE2,
2370 ER_DATE)2371 VALUES
2372 (t2.ele_id, t2.update_date, t2.er_value, SYSDATE);2373
2374 COMMIT;2375
2376 end loop; --主循环结束
2377
2378 close Cur_ele_big; --游标关闭
2379
2380 --==================================================
2381 --第三部分 将临时表中计算得到的大元素的值 整体更新入元素结果表
2382 --==================================================
2383
2384 ENDBOELEMENT_MASTER_CONTROL;2385
2386 --====================================================================
2387 --====================================================================
2388 --取值
2389 FUNCTION GET_BOELEMENT(as_ele_id IN VARCHAR2, as_date IN VARCHAR2)2390 RETURN NUMBER AS
2391
2392 ln_RESULT NUMBER;2393 ln_defaultvalue NUMBER;2394 ls_SQL LONG;2395
2396 ls_SJ_SQL LONG;2397 ls_JH_SQL LONG;2398
2399 ls_pa varchar2(4000);2400 ls_temp varchar2(4000);2401 ls_NF varchar2(10);2402 ls_source varchar2(10);2403
2404 ls_ele_name varchar2(4000);2405
2406 --手动取数:计划值取上月的数据,其它数据取默认值
2407 ls_ele_type varchar2(50);2408 BEGIN
2409 ls_NF :=pack_kpi_base.F_GET_NF(as_date);2410 --1、根据元素ID取的SQL,若没有,则取默认值。转4
2411 BEGIN
2412 SELECTt.elemnt_soruce, t.source2413 INTOls_SJ_SQL, ls_source2414 FROMkpi_manager_boelement t2415 WHERE t.ele_id =as_ele_id2416 AND rownum = 1;2417 EXCEPTION2418 WHEN no_data_found THEN
2419 ls_SJ_SQL := '0'; --elemnt_soruce 字段没有值或者值为0,就说明无法自动取数
2420 END;2421
2422 BEGIN
2423 SELECTt.defaultvalue, t.element_name, t.ele_type2424 INTOln_defaultvalue, ls_ele_name, ls_ele_type2425 FROMkpi_manager_boelement t2426 WHERE t.ele_id =as_ele_id2427 AND rownum = 1;2428 EXCEPTION2429 WHEN no_data_found THEN
2430 ln_defaultvalue := 0;2431 END;2432
2433 --第一种情况:手动取数:计划值取上月数据,其它数据取默认值
2434 if ls_source = 1 then
2435 --计划值取上月数据
2436 if ls_ele_type = '指标值' then
2437
2438 --ln_RESULT:=0;
2439
2440 select round(nvl(t.VALUE_DATA, 0), 2) er_value2441 intoln_RESULT2442 fromKPI_FLU_FLOW_RESULT_NEW_V t2443 where t.TARGET_ID =as_ele_id2444 and t.REC_MONTH =
2445 to_char(add_months(to_date(as_date || '-01', 'yyyy-MM-dd'),2446 -1),2447 'yyyy-MM')2448 and t.s_code = 8 --已发布
2449 ;2450
2451 --其它的取默认值
2452 else
2453 ln_RESULT :=ln_defaultvalue;2454 end if;2455 --#######临时注释########################################################################
2456 --dbms_output.put_line('ELE_ID: ' || as_ele_id || ls_ele_name ||
2457 --' 手动取数 默认值');
2458
2459 else
2460 --第二种情况:自动取数,但无SQL
2461 --重要判断 --临时屏蔽,取数口径,自动还是手动,0自动,1手动
2462 IF ls_SJ_SQL = '0' OR ls_SJ_SQL IS NULL THEN
2463 --OR ls_source = 1 THEN
2464
2465 ln_RESULT :=ln_defaultvalue;2466 --#######临时注释########################################################################
2467 --dbms_output.put_line('ELE_ID: ' || as_ele_id || ls_ele_name ||
2468 --' 无SQl 默认值');
2469 --第三种情况:自动取数,有sql
2470 ELSE
2471 --SQL顺利取到,开始取数部分
2472 --2、处理SQL 替换各类信息
2473 BEGIN
2474 --'[#date#]' 'yyyy-mm'格式日期
2475 ls_SJ_SQL := replace(ls_SJ_SQL, '[#date#]', as_date);2476
2477 --'[#gcdm#]' 工厂代码
2478 ls_SJ_SQL := replace(ls_SJ_SQL,2479 '[#gcdm#]',2480 pack_kpi_base.F_GET_GCDM_FROM_ELEID(as_ele_id));2481
2482 --'[#erp_lr_yf#]' ERP月份 HSLMM
2483 ls_SJ_SQL := replace(ls_SJ_SQL,2484 '[#erp_lr_yf#]',2485 'HSL' ||pack_kpi_base.F_GET_MM(as_date));2486
2487 --'[#NF#]' 'yyyy'格式年份
2488 ls_SJ_SQL := replace(ls_SJ_SQL, '[#NF#]', ls_NF);2489
2490 --修正系数(累计利润)
2491 --'[#curMonth#]' --当前月份
2492 ls_SJ_SQL := replace(ls_SJ_SQL,2493 '[#curMonth#]',2494 pack_kpi_base.F_GET_MM(as_date));2495 --'[#ele_id#]' --元素ID
2496 ls_SJ_SQL := replace(ls_SJ_SQL, '[#ele_id#]', as_ele_id);2497
2498 --3、执行SQL 取值
2499
2500 executeimmediate ls_SJ_SQL2501 intoln_RESULT;2502 /*dbms_output.put_line('ELE_ID: ' || as_ele_id || ls_ele_name ||2503 ' SQl ##OK## 取的的值 ' || ln_RESULT ||2504 ' 成功的SQL:' || ls_SJ_SQL);2505 */
2506 IF ln_RESULT IS NULL THEN
2507 ln_RESULT := NULL;2508 END IF;2509
2510 --4、最终结果处理并返回。
2511
2512 EXCEPTION2513 WHEN OTHERS THEN
2514 --pack_kpi_base.SET_SYSTEM_LOG('元素取值错误','配置的SQl执行报错,结果返回默认值'||ls_SJ_SQL);
2515 --#######临时注释########################################################################
2516 --dbms_output.put_line('ELE_ID: ' || as_ele_id || ls_ele_name ||
2517 --' SQl执行报错或没有取得 默认值 SQL:' || ls_SJ_SQL);
2518 ln_RESULT :=ln_defaultvalue;2519 END;2520
2521 END IF;2522 end if;2523 RETURN round(nvl(ln_RESULT, 0), 3);2524 ENDGET_BOELEMENT;2525
2526 --代码保留
2527 --begin
2528 /*loop2529 exit when instr(v_GS,'[#')=0;2530 v_pa:=substr(v_GS,instr(v_GS,'[#')+2,instr(v_GS,'#]')-instr(v_GS,'[#')-2);2531 select CSTQFF into v_temp from tech_device_base_para_day_t where upper(CSDM)=upper(v_pa) and rownum=1;2532
2533 v_GS:=replace(v_GS,'[#'||v_pa||'#]',v_temp);2534 end loop;*/
2535
2536 --取实际值过程
2537
2538 /*--SQL例子2539 (2540 select sum(mesfctrafmval)2541 from mb_zbsj_v2542 where mes_fctr_id ='26'2543 and mtrl_id='1540015'2544 and tzzdm='Z5YS0307'2545 and begtime=last_day(add_months('{#KSSJ#}', -1))2546 and endtime=last_day('{#KSSJ#}')-12547 and id='431'2548 )*/
2549
2550 /*v_GS:=replace(v_GS,'{#KSSJ#}',p_rq);*/
2551
2552 --ls_SQL:='select '||ls_SJ_SQL||' from dual';
2553
2554 --execute immediate ls_SQL into ln_RESULT;
2555
2556 --dbms_output.put_line(v_SQL,4000);
2557 --EXCEPTION
2558 --WHEN TOO_MANY_ROWS or ZERO_DIVIDE then
2559 --Result:=999.99;
2560 --WHEN OTHERS THEN
2561 --Result:=0;
2562 --end;
2563
2564 --====================================================================
2565
2566 function KPI_SplitElementEx(P_STRING IN VARCHAR2, as_date IN VARCHAR2)2567 return NUMBER is
2568 --分解结构[#x#]*常量+[#y#].......公式,并置换为所需要的数值,完成绩效指标公式的运算。函数使用字符串分解办法进行
2569 --Fantasy_Van 2011.6.30
2570 --V_POS为需要的变量[#x#],而后下一个函数对该变量进行处理,取得所需要的数值并返回,置换出原有的内容,V_POS_MID为取得的数值
2571 --E: [#111#]+[#222#]经过置换后成为: 23.12+[#222#]
2572 Result NUMBER;2573 ls_date VARCHAR2(20);2574 V_POS VARCHAR2(2000);2575 V_POS_MID VARCHAR2(2000);2576 iPosHead INT := 1;2577 iPosEnd INT := 0;2578 V_ResultEnd LONG;2579 ln_num NUMBER;2580 i INT := 0;2581 L_STRING VARCHAR2(2000);2582 BEGIN
2583 --参数处理
2584 IF as_date IS NULL THEN
2585 ls_date :=GET_KPI_DATE();2586 ELSE
2587 ls_date :=as_date;2588 END IF;2589
2590 L_STRING :=P_STRING;2591 IF Length(L_STRING) > 0 THEN
2592 LOOP2593 SELECT INSTR(L_STRING, '[#') Into iPosHead FROMdual;2594 SELECT INSTR(L_STRING, '#]') - INSTR(L_STRING, '[#') + 2
2595 IntoiPosEnd2596 FROMdual;2597 if iPosHead < 1 THEN
2598 EXIT;2599 END IF;2600 SELECT substr(L_STRING, iPosHead, iPosEnd) Into V_POS FROMdual;2601 V_POS_MID :=KPI_SplitElementGetRS(V_POS, ls_date);2602 L_STRING := REPLACE(L_STRING, V_POS, V_POS_MID);2603 ENDLOOP;2604 END IF;2605 V_ResultEnd :=L_STRING;2606 IF Length(L_STRING) = 0 THEN
2607 V_ResultEnd := '00000000';2608 END IF;2609
2610 BEGIN
2611
2612 V_ResultEnd := 'SELECT' || V_ResultEnd || 'FROM dual';2613 Dbms_Output.Put_Line(V_ResultEnd);2614 BEGIN
2615 executeimmediate V_ResultEnd2616 intoln_num;2617 EXCEPTION2618 WHEN OTHERS THEN
2619 ln_num := -9999;2620 END;2621 RETURNln_num;2622
2623 END;2624 endKPI_SplitElementEx;2625
2626 function KPI_SplitElementGetRS(as_V_POS IN VARCHAR2, as_date IN VARCHAR2)2627 return VARCHAR2 is
2628 --取得所需要的元素的数值 Fantasy_Van 2011-6.30
2629 Result VARCHAR2(2000);2630 ELEM_ID_RESSULT VARCHAR2(2000);2631 L_V_POS VARCHAR2(2000);2632 V_POS_MID VARCHAR2(2000);2633 iHead INT := 0;2634 iEnd INT := 0;2635 v_exist int := 0;2636 BEGIN
2637 BEGIN
2638 L_V_POS :=as_V_POS;2639 SELECT INSTR(L_V_POS, '[#') Into iHead FROMdual;2640 SELECT INSTR(L_V_POS, '#]') Into iEnd FROMdual;2641 V_POS_MID := SUBSTR(L_V_POS, iHead + 2, iEnd - iHead - 2);2642
2643 --元素取值
2644 select count(1)2645 intov_exist2646 FROMkpi_manager_boelement_result t2647 WHERE t.er_month =as_date2648 AND t.ele_id =V_POS_MID;2649
2650 --当kpi_manager_boelement_result表中没有此元素时,取元素表中的默认值
2651 --出现场景:新增指标和元素
2652 if v_exist <> 0 then
2653 SELECTt.er_value2654 INTOELEM_ID_RESSULT2655 FROMkpi_manager_boelement_result t2656 WHERE t.er_month =as_date2657 AND t.ele_id =V_POS_MID;2658 else
2659 select nvl(e.defaultvalue, 0)2660 intoELEM_ID_RESSULT2661 fromkpi_manager_boelement e2662 where e.ele_id =V_POS_MID;2663 end if;2664
2665 EXCEPTION2666 WHEN OTHERS THEN
2667 dbms_output.put_line(Sqlerrm(SQLCODE));2668 END;2669
2670 Result := nvl(ELEM_ID_RESSULT, 0);2671 returnResult;2672 EXCEPTION2673 WHEN OTHERS THEN
2674 return 0;2675
2676 endKPI_SplitElementGetRS;2677
2678 --====================================================================
2679 --定时取指标实际值计划值
2680 --=-=-==-=-=-=-=-------------------------------
2681 PROCEDURE KERNEL_TARGET_DATA_MAIN(AS_MONTH IN VARCHAR2) AS
2682 --定义一
2683
2684 LS_MONTH VARCHAR2(20);2685 BEGIN
2686 DBMS_OUTPUT.ENABLE(10000000);2687 --参数处理
2688 IF LS_MONTH IS NULL THEN
2689 LS_MONTH :=GET_KPI_DATE();2690 ELSE
2691 LS_MONTH :=AS_MONTH;2692 END IF;2693
2694 /*1 原BO新增加 量化指标 的处理。2695 仿照訾海原程序中写入各种表数据2696 2 公式计算模块2697 调用GET_SPLITE_ELEMENT_EX 分解公式字符串,并返回元素的值2698 实现每月kpi_kernel_target_data 表中量化指标的数据的生成2699 */
2700
2701 BEGIN
2702 --更新标记
2703 UPDATE kpi_manager_boresult t SET t.useflag = '1';2704
2705 --写入新数据
2706 INSERT INTOkpi_manager_boresult2707 (BORESULTID,2708 TARGET_CODE,2709 TARGET_NAME,2710 BODATA,2711 BODATA2,2712 BOGETDATE,2713 USEFLAG,2714 update_date)2715 SELECTseq_kpi_manager_boresult.nextval,2716 t.target_id,2717 TARGET_NAME,2718 decode(FORMULA,2719 NULL,2720 0,2721 KPI_SplitElementEx(FORMULA, LS_MONTH)) VALUE_DATA, --实际值
2722 decode(FORMULA2,2723 NULL,2724 0,2725 KPI_SplitElementEx(FORMULA2, LS_MONTH)) VALUE_PLAN, --计划值
2726 pack_kpi_base.F_GET_BYM(LS_MONTH) REC_MONTH,2727 '0',2728 SYSDATE2729 FROMkpi_kpimodel_kpitarget T2730 WHERE T.TARGET_TYPE = 0
2731 AND T.TARGET_USEFLAG = 0
2732 AND t.target_name <> '专项指标';2733
2734 --更新标准值
2735 UPDATEkpi_kpimodel_kpitarget t2736 SET t.standardvalue =decode(t.FORMULA2,2737 NULL,2738 0,2739 KPI_SplitElementEx(t.FORMULA2, LS_MONTH))2740 WHERE T.TARGET_TYPE = 0
2741 AND T.TARGET_USEFLAG = 0
2742 AND t.target_name <> '专项指标';2743
2744 COMMIT;2745
2746 EXCEPTION2747 WHEN OTHERS THEN
2748 ROLLBACK;2749 dbms_output.put_line('定时取指标实际值计划值' ||SQLERRM(SQLCODE));2750 END;2751
2752 ENDKERNEL_TARGET_DATA_MAIN;2753 --=================================================================================
2754 --====================================================================
2755 procedure KPI_VIEW_TARGET --集团指标取数(月完成)
2756 as
2757 var_TID NUMBER;2758 val_T_SQL varchar2(500);2759 val_source number;2760 val_result varchar2(50);2761 var_date varchar2(10);2762
2763 --表级循环,需要用游标
2764 target_row KPI_VIEW_TARGET_SQL_T%rowtype;2765
2766 cursor rows is
2767 select * fromKPI_VIEW_TARGET_SQL_T;2768
2769 begin
2770 var_date := GET_KPI_DATE(); --获取日期
2771 --循环执行sql
2772 for target_row inrows loop2773 val_T_SQL :=target_row.t_sql;2774 val_source :=target_row.source;2775 var_TID :=target_row.tid;2776 if (val_source = 0 and val_T_SQL <> null) then
2777 val_result :=PACK_KPI_BASE.EXECSQL_ALL(val_T_SQL, var_date);2778 --第一步:将获取到的数据插入到KPI_VIEW_TARGET_DATA_T表中
2779 ---删除当月原有数据
2780 deleteKPI_VIEW_TARGET_DATA_T t2781 where t.tid =var_TID2782 and t.tdate =var_date;2783 commit;2784 ---新增获取到的当月月完成的数据
2785 insert intoKPI_VIEW_TARGET_DATA_T2786 (TTID, TID, TYWC, TDATE)2787 values
2788 ((select nvl(max(a.TTID), 0) + 1 fromKPI_VIEW_TARGET_DATA_T a),2789 var_TID,2790 val_result,2791 var_date);2792 commit;2793 --第二步:更新KPI_VIEW_TARGET_SQL_T表中的取数时间,为当前时间
2794
2795 updateKPI_VIEW_TARGET_SQL_T b2796 set b.tgetdate = to_char(sysdate, 'yyyy-mm-dd hh:mm:ss am');2797 commit;2798
2799 end if;2800
2801 endloop;2802 endKPI_VIEW_TARGET;2803
2804 /**2805 =============================================================2806 过程名:(Insert_JHZ_ToJHFluTable)2807 作用 :将元素计划值,从元素结果表2808 (kpi_manager_boelement_result)2809 中,提取出来放到计划值审批流程表2810 (KPI_FLU_FLOW_RESULT_NEW)中2811
2812 参数:as_date--从元素结果表中取数的日期,格式为‘yyyy-MM’;2813 =============================================================2814 *2815
2816 procedure Insert_JHZ_ToJHFluTable(as_date IN VARCHAR2) as2817
2818 ls_date varchar2(20);2819 ele_row kpi_JHZ_V%rowtype; --计划值行2820
2821 cursor rows_JHZ is --计划值游标2822 select * from kpi_JHZ_V t where t.er_month = ls_date;2823
2824 begin2825 DBMS_OUTPUT.ENABLE(10000000);2826
2827 IF as_date IS NULL THEN2828 ls_date := GET_KPI_DATE();2829 ELSE2830 ls_date := as_date;2831 END IF;2832
2833 --循环元素结果表【kpi_manager_boelement_result】2834 for ele_row in rows_JHZ loop2835 --插入到计划值审批流程表中2836 InsertOne_JHZ_ToJHFluTable(ele_row.ele_id,2837 0,2838 ele_row.er_value,2839 ele_row.element_name,2840 ele_row.er_month);2841
2842 end loop;2843 dbms_output.put_line('执行成功!');2844 exception2845 when others then2846 rollback;2847 dbms_output.put_line(sqlerrm);2848
2849 end Insert_JHZ_ToJHFluTable;2850
2851 --单个计划值插入2852 procedure InsertOne_JHZ_ToJHFluTable(as_TARGET_ID in varchar2,2853 as_VALUE_PLAN in varchar2,2854 as_VALUE_DATA in varchar2,2855 as_REC_REASON in varchar2,2856 as_REC_MONTH in varchar2) as2857
2858 v_P_INSTID number; --保存流程实例号的最大值2859 v_Has number; --当本月本元素已有数据,不再执行插入操作,0-没有数据;1-有数据2860 v_result_Id number; --保持KPI_FLU_FLOW_RESULT_NEW和KPI_FLU_FLOW_RESULT_NEW_OLD的ID保持一致。便于查询2861 begin2862 --当本月本元素已有数据,不再执行插入操作2863 v_Has := 0; -- 0-没有数据2864 select count(*)2865 into v_Has2866 from KPI_FLU_FLOW_RESULT_NEW t2867 where t.target_id = as_TARGET_ID2868 and t.rec_month = as_REC_MONTH;2869
2870 if v_Has = 0 then2871 --第一:从流程控制表【KPI_FLU_PROCESS_NEW】中获取最大的流程实例号2872 select (nvl(max(P_INSTID), 0) + 1)2873 into v_P_INSTID2874 from KPI_FLU_PROCESS_NEW;2875
2876 --第二:向流程控制表【KPI_FLU_PROCESS_NEW】中添加数据2877 insert into KPI_FLU_PROCESS_NEW2878 (P_ID, P_INSTID, P_WCODE, P_CURRENT)2879 values2880 (2881 --(select nvl(max(P_ID),0)+1 from KPI_FLU_PROCESS_NEW)2882 SEQ_KPI_FLU_PROCESS.NEXTVAL,2883 v_P_INSTID,2884 1 --工作项编码,1:表示专业提交2885 ,2886 1 --当前状态为1,表示可用2887 );2888
2889 --第三:向流程数据表【KPI_FLU_FLOW_RESULT_NEW】中添加数据2890
2891 select SEQ_KPI_FLU_FLOW_RESULT.NEXTVAL into v_result_Id from dual;2892
2893 insert into KPI_FLU_FLOW_RESULT_NEW2894 (ID,2895 FLOW_ID,2896 TARGET_ID,2897 VALUE_PLAN,2898 VALUE_DATA,2899 REC_REASON,2900 UPDATE_DATE,2901 FLOW_DESC,2902 REC_MONTH)2903 values2904 (2905 --(select nvl(max(ID),0)+1 from KPI_FLU_FLOW_RESULT_NEW)2906 v_result_Id,2907 v_P_INSTID,2908 as_TARGET_ID,2909 as_VALUE_PLAN,2910 as_VALUE_DATA,2911 as_REC_REASON,2912 sysdate,2913 1 --FLOW_DESC:状态描述2914 ,2915 as_REC_MONTH);2916
2917 --第四:向流程数据原始表【KPI_FLU_FLOW_RESULT_NEW_OLD】中添加数据2918
2919 insert into KPI_FLU_FLOW_RESULT_NEW_OLD2920 (ID,2921 FLOW_ID,2922 TARGET_ID,2923 VALUE_PLAN,2924 VALUE_DATA,2925 REC_REASON,2926 UPDATE_DATE,2927 FLOW_DESC,2928 REC_MONTH)2929 values2930 (v_result_Id,2931 v_P_INSTID,2932 as_TARGET_ID,2933 as_VALUE_PLAN,2934 as_VALUE_DATA,2935 as_REC_REASON,2936 sysdate,2937 1 --FLOW_DESC:状态描述2938 ,2939 as_REC_MONTH);2940
2941 commit;2942 end if;2943
2944 dbms_output.put_line('执行成功!');2945 exception2946 when others then2947 rollback;2948 dbms_output.put_line(sqlerrm);2949
2950 end InsertOne_JHZ_ToJHFluTable;2951
2952 *2953 ================================================2954 过程:kpi_BackToELeResultTable2955
2956 作用:将审批通过的元素计划值,覆盖到元素结果表2957 【kpi_manager_boelement_result】中2958
2959 参数:as_date--覆盖元素结果表中数据的考核日期,2960 格式为‘yyyy-MM’;2961 ================================================2962 *2963 procedure kpi_BackToELeResultTable(as_date in varchar2) as2964 ls_date varchar2(20);2965 begin2966
2967 DBMS_OUTPUT.ENABLE(10000000);2968
2969 IF as_date IS NULL THEN2970 ls_date := GET_KPI_DATE();2971 ELSE2972 ls_date := as_date;2973 END IF;2974
2975 merge into kpi_manager_boelement_result t12976 using2977 (2978 select2979 t2.TARGET_ID,2980 t2.VALUE_DATA,2981 t2.REC_MONTH2982 from KPI_FLU_FLOW_RESULT_NEW_V t22983 where t2.s_code=82984 ) t32985 on(t1.ele_id||t1.er_month=t3.TARGET_ID||ls_date)2986
2987 when matched then2988 update2989 set t1.er_value=t3.value_data2990 where t1.ele_id=t3.target_id2991 and t1.er_month=t3.rec_month;2992
2993 commit;2994 dbms_output.put_line('执行成功!');2995 exception2996 when others then2997 rollback;2998 dbms_output.put_line(sqlerrm);2999
3000 end kpi_BackToELeResultTable;*/
3001
3002 /*
3003 --2012-2-63004 --计算指标得分创新度和努力度由原来的一个段匹配,更改为多段累加3005 --政工需求3006 --起征点:有区间这种情况,例如:0-5之间不加分也不减分3007 */
3008 FUNCTION Get_OneTarget_Score_NEW(as_TARSYS_id IN VARCHAR2,3009 as_bodata NUMBER) RETURN NUMBER AS
3010
3011 LS_BOTTOM NUMBER; --记录起征点下限
3012 LS_UPPER NUMBER; --记录起征点上限
3013
3014 bottom number; --当下限为-9999时,返回的是定值,不用累加
3015 upper number; --当上限为999999时,返回的是定值,不用累加
3016 --返回值
3017 LN_RESULT NUMBER;3018
3019 BEGIN
3020 BEGIN
3021 LS_BOTTOM := 0;3022 LS_UPPER := 0;3023 LN_RESULT := 0;3024
3025 --第一步:判断是否在极限区间(-9999-xx;xx-999999)
3026 begin
3027 selectt.tarsys_bottom, t.tarsys_upper3028 into bottom, upper
3029 fromkpi_kpimodel_targetsystem t3030 WHERE t.p_tarsys_id =as_TARSYS_id3031 and t.tarsys_bottom <=as_bodata3032 and t.tarsys_upper >as_bodata;3033
3034 EXCEPTION3035 WHEN OTHERS THEN
3036 bottom := -9999;3037 upper := -9999;3038 END;3039
3040 IF bottom = -9999 OR upper = 999999 THEN
3041 begin
3042 selectt.tarsys_score3043 intoLN_RESULT3044 fromkpi_kpimodel_targetsystem t3045 WHERE t.p_tarsys_id =as_TARSYS_id3046 and t.tarsys_bottom <=as_bodata3047 and t.tarsys_upper >as_bodata;3048
3049 EXCEPTION3050 WHEN OTHERS THEN
3051 LN_RESULT := -9999;3052 end;3053 ELSE
3054 --获取“起征点”
3055 BEGIN
3056 selectt.tarsys_bottom, t.tarsys_upper3057 intoLS_BOTTOM, LS_UPPER3058 fromkpi_kpimodel_targetsystem t3059 WHERE t.p_tarsys_id =as_TARSYS_id3060 and t.tarsys_score = 0;3061 EXCEPTION3062 WHEN OTHERS THEN
3063 LS_BOTTOM := -9999;3064 LS_UPPER := -9999;3065 END;3066
3067 --无法获取起征点,则结果返回-9999
3068 IF LS_BOTTOM = -9999 and LS_UPPER = -9999 THEN
3069 LN_RESULT := -9999; --返回值为-1特殊值,说明表中参数设置有错误。
3070
3071 ELSE
3072 --算法
3073 IF as_bodata >= LS_UPPER THEN
3074 --新算法,适合累进计算部分
3075 BEGIN
3076 select sum(DECODE(DECODE(SIGN(as_bodata -T.TARSYS_UPPER),3077 0,3078 1,3079 1,3080 1,3081 -1,3082 -1),3083 1, --大于上限
3084 (DECODE(DECODE(sign(t.tarsys_step),3085 0,3086 0,3087 1,3088 1,3089 -1,3090 1),3091 0, --步长为0,就直接返回得分
3092 t.tarsys_score,3093 1,3094 (T.TARSYS_UPPER - T.TARSYS_BOTTOM) /
3095 T.TARSYS_STEP *T.TARSYS_SCORE)),3096 -1, --小于上限
3097 (decode(DECODE(sign(t.tarsys_step),3098 0,3099 0,3100 1,3101 1,3102 -1,3103 1),3104 0, --步长为0,就直接返回得分
3105 t.tarsys_score,3106 1,3107 (as_bodata - T.TARSYS_BOTTOM) /
3108 T.TARSYS_STEP *T.TARSYS_SCORE))3109
3110 )) asC_SCORD3111 intoLN_RESULT3112 FROMkpi_kpimodel_targetsystem T3113
3114 WHERE T.p_tarsys_id =as_TARSYS_id3115 and t.tarsys_bottom >=LS_UPPER3116 and t.tarsys_bottom <=as_bodata3117 ORDER BYT.TARSYS_UPPER;3118
3119 EXCEPTION3120 WHEN OTHERS THEN
3121 LN_RESULT := -9998;3122 END;3123
3124 END IF;3125
3126 IF as_bodata < LS_BOTTOM THEN
3127 --累减
3128 BEGIN
3129 select sum(DECODE(DECODE(SIGN(as_bodata -T.TARSYS_BOTTOM),3130 0,3131 1,3132 1,3133 1,3134 -1,3135 -1),3136 1, --大于下限
3137 (DECODE(DECODE(sign(t.tarsys_step),3138 0,3139 0,3140 1,3141 1,3142 -1,3143 1),3144 0, --步长为0,就直接返回得分
3145 t.tarsys_score,3146 1,3147 (T.TARSYS_UPPER - as_bodata) /
3148 (-T.TARSYS_STEP) *T.TARSYS_SCORE)),3149 -1, --小于下限
3150 (DECODE(DECODE(sign(t.tarsys_step),3151 0,3152 0,3153 1,3154 1,3155 -1,3156 1),3157 0, --步长为0,就直接返回得分
3158 t.tarsys_score,3159 1,3160 (T.TARSYS_UPPER - T.TARSYS_BOTTOM) /
3161 (-T.TARSYS_STEP) * T.TARSYS_SCORE)))) asC_SCORD3162
3163 intoLN_RESULT3164 FROMkpi_kpimodel_targetsystem T3165
3166 WHERE T.p_tarsys_id =as_TARSYS_id3167 and t.tarsys_upper <=LS_BOTTOM3168 and t.tarsys_upper >as_bodata3169 ORDER BYT.TARSYS_UPPER;3170
3171 EXCEPTION3172 WHEN OTHERS THEN
3173 LN_RESULT := -9997;3174 END;3175
3176 END IF;3177
3178 END IF;3179 end if;3180 END;3181 RETURNLN_RESULT;3182 ENDGet_OneTarget_Score_NEW;3183 PROCEDURE KERNEL_TARGET_ALL_XS(AS_YEAR IN VARCHAR2) AS
3184 --一年调用一次 写入每月的系数
3185 intI NUMBER;3186 strMid varchar2(20);3187 BEGIN
3188 FOR intI in 1 .. 12LOOP3189 if intI < 10 then
3190 select AS_YEAR || '-0' || to_char(intI) into strMid fromdual;3191 else
3192 select AS_YEAR || '-' || to_char(intI) into strMid fromdual;3193 end if;3194 INSERT INTOKPI_PPXH_ALL_UNIT_T T3195 (T.TID, t.TYEARMONTH, t.TVALUES)3196 VALUES
3197 (KPI_NDXH_TID.NEXTVAL, strMid, 1);3198 COMMIT;3199 endLOOP;3200
3201 ENDKERNEL_TARGET_ALL_XS;3202
3203 /*利润排名*/
3204 procedure KPI_LR_SJ_PM(as_month varchar2) as
3205 ls_ele_name varchar2(200); --利润元素排名的元素名称
3206 ls_up_ele_name varchar2(200); --需要更新数值的元素
3207 begin
3208 ls_ele_name := '实际利润实际值'; --参与排名的元素
3209 ls_up_ele_name := '实际利润排名'; --需要更新数值的元素
3210
3211 --更新排名默认值
3212 updateKPI_MANAGER_BOELEMENT a3213 set a.defaultvalue =
3214 (selectt.pm3215 from (selectt1.department_id,3216 t1.department_name,3217 t1.target_name,3218 t2.bodata sj_value,3219 rank() over(order by report_month, abs(round((case
3220 when sign(nvl(t2.bodata,3221 0)) > 0 then
3222 t2.bodata3223 end), 3)) desc) pm3224 fromKPI_KPITARGET_PREDICT_V t1,3225 kpi_manager_boresult_report t23226 WHERE t1.target_id =t2.target_id3227 and nvl(weight_scale, 0) = 0
3228 and t1.p_department_id=42
3229 and t1.target_name in
3230 ('利润', '利润(实际)', '实际利润')3231 and nvl(t2.bodata, 0) > 0
3232 and t2.report_month =as_month) t3233 where a.dep_id =t.department_id)3234 where a.element_name =ls_up_ele_name;3235 commit;3236
3237 --更新元素结果表
3238 updatekpi_manager_boelement_result r3239 set r.er_value =
3240 (selecta.defaultvalue3241 fromKPI_MANAGER_BOELEMENT a3242 where a.element_name =ls_up_ele_name3243 and a.ele_id =r.ele_id)3244 where r.er_month =as_month3245 and r.ele_id in (selectb.ele_id3246 fromKPI_MANAGER_BOELEMENT b3247 where b.element_name =ls_up_ele_name);3248
3249 commit;3250
3251 endKPI_LR_SJ_PM;3252
3253 /*利润预算准确率排名*/
3254 procedure KPI_LR_YSZQL_PM(as_month varchar2) as
3255
3256 ls_up_ele_name varchar2(200); --需要更新数值的元素
3257 begin
3258
3259 ls_up_ele_name := '利润预算准确率排名'; --需要更新数值的元素
3260
3261 --更新排名默认值
3262 updateKPI_MANAGER_BOELEMENT a3263 set a.defaultvalue =
3264 (selectt.pm3265 from (selectt1.department_id,3266 t1.department_name,3267 t2.bodata2 plan_value,3268 t2.bodata sj_value,3269 t1.weight_scale,3270 abs(round(pack_kpi_base.F_GET_CFYS(t2.bodata -
3271 t2.bodata2,3272 t2.bodata2) * 100,3273 3)) yszql,3274 rank() over(order by report_month, abs(round((case
3275 whennvl(t2.bodata2,3276 0) <> 0 then
3277 pack_kpi_base.F_GET_CFYS(t2.bodata -
3278 t2.bodata2,3279 t2.bodata2) * 100
3280 end), 3)) asc) pm3281 fromKPI_KPITARGET_PREDICT_V t1,3282 kpi_manager_boresult_report t23283 WHERE t1.target_id =t2.target_id3284 and nvl(weight_scale, 0) <> 0
3285 and t1.p_department_id=42
3286 and t1.target_name like '利润%'
3287 and report_month =as_month) t3288 where a.dep_id =t.department_id)3289 where a.element_name =ls_up_ele_name;3290 commit;3291
3292 --更新元素结果表
3293 updatekpi_manager_boelement_result r3294 set r.er_value =
3295 (selecta.defaultvalue3296 fromKPI_MANAGER_BOELEMENT a3297 where a.element_name =ls_up_ele_name3298 and a.ele_id =r.ele_id)3299 where r.er_month =as_month3300 and r.ele_id in (selectb.ele_id3301 fromKPI_MANAGER_BOELEMENT b3302 where b.element_name =ls_up_ele_name);3303
3304 commit;3305
3306 endKPI_LR_YSZQL_PM;3307 ENDPACK_KPI_KERNEL;3308 /
oracle2108什么意思,Oracle存储过程(包:PACK_KPI_KERNEL For YS三度评价体系)相关推荐
- oracle存储过程借助utl,使用UTL_MAIL包实现存储过程邮件发送
邮件通知预警和提示在当前系统中已经是一个比较常见的功能.各类型语言分别针对邮件提供了功能包和API接口方法,本篇介绍如何在PL/SQL代码中使用UTL_MAIL工具包发送邮件,同时还介绍配置中注意的细 ...
- 存储过程while_超详细的Oracle存储过程基础入门介绍
概述 前面已经对存储过程.函数.包做了个介绍,但是毕竟是写成了一篇,所以没那么细,今天单独介绍一下存储过程基础方面,后面再说遍历什么游标啊,数组啊~ 1.语法 CREATE [OR REPLACE] ...
- Oracle存储过程中异常Exception的捕捉和处理
Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...
- [oracle] Oracle存储过程里操作BLOB的字节数据的办法,例如写入32位整数
作者: zyl910 一.缘由 BLOB是指二进制大对象,也就是英文Binary Large Object的缩写. 在很多时候,我们是通过其他编程语言(如Java)访问BLOB的字节数据,进行字节级的 ...
- Java(CallableStatement)调用Oracle存储过程返回结果集(ResultSet)
一:无返回值的存储过程调用 存储过程: CREATE OR REPLACE PROCEDURE PRO_1(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS BEGIN ...
- 用java调用oracle存储过程总结
1.什么是存储过程.存储过程是数据库服务器端的一段程序,它有两种类型.一种类似于SELECT查询,用于检索数据,检索到的数据能够以数据集的形式返回给客户.另一种类似于INSERT或DELETE查询,它 ...
- C#调用Oracle存储过程分页
直接调用Oracle中的存储过程完成对表的分页,对代码封闭程度高,执行高效.以下为C#分页类代码,包括Oracle数据库 端存储过程PLSQL代码. // 程序调用示例: // int tota ...
- 用java调用oracle存储过程总结二
这段时间开始学习写存储过程,主要原因还是因为工作需要吧,本来以为很简单的,但几经挫折,豪气消磨殆尽,但总算搞通了,为了避免后来者少走弯路,特记述与此,同时亦对自己进行鼓励. 一:无返回值的存储过程 存 ...
- 用java调用oracle存储过程总结一
1.什么是存储过程.存储过程是数据库服务器端的一段程序,它有两种类型.一种类似于SELECT查询,用于检索数据,检索到的数据能够以数据集的形式返回给客户.另一种类似于INSERT或DELETE查询,它 ...
最新文章
- 铺地毯(矩形的交+前后缀矩形交)
- 废旧光盘手工小制作_废旧利用 | 幼儿园手工卷纸筒制作大全,超实用
- 根据大小分割大文本_场景文本检测—CTPN算法介绍
- python字符编码解码,文件编码解码。
- kali的burpsuite笔记
- 国防现代化的数据_Linux容器如何解决国防虚拟化问题
- 苹果推出iCloud照片转移服务 能轻松转到谷歌相册
- python 类装饰器和继承_python装饰器、继承、元类、mixin,四种給类动态添加类属性和方法的方式(一)...
- 获取Android手机短信中心号码
- 推挽变换器matlab仿真,双驱动推挽DC-DC变换器方案分享之设计原理简析
- 熊出没机器人光头强_熊出没:光头强的最强发明,第2件砍树神器,最后1件价值千万!...
- ipmitool 工具的使用姿势
- 全球及中国企业数据存储解决方案行业发展动态及前景规划分析报告2022-2027
- 李佳琦、薇娅们的残酷生存物语
- 桃园三结义c语言程序,三国典故:桃园三结义
- Java Shiro 设置 anon 无效
- tracepro应用实例详解_腾讯云服务器计费模式包年包月、按量计费和竞价实例选择建议...
- 自定义java对象转换工具类
- 放肆的使用UIBezierPath和CAShapeLayer画各种图形(含仿微信视频眼镜Demo)
- 分享编程技术的微信公众号二维码
热门文章
- Resumable 文件分块上传
- 一篇文章了解爬虫的方方面面
- 深度学习入门(三十一)卷积神经网络——GoogLeNet
- 月入五万的码农,抢了文科生的饭碗
- 【亲测有效】root安装软件和无需root权限两种方法linux点对点网络测速,网速测试,带宽测速,局域网测速
- 20221228英语学习
- 抹掉数据时显示连接服务器失败,无法连接iCloud,连接icloud验证失败,icloud连接不到:《苹果抹掉数据验证失败》 苹果icloud怎么登陆不上?-南开游戏网...
- unity demo免费下载:第三人称镜头移动+瞄准线+发射弧线球打击方块(方块可以识别受击方向)demo
- 10, excel vba 修改单元格的颜色
- Python3操作MongoDB数据库