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三度评价体系)相关推荐

  1. oracle存储过程借助utl,使用UTL_MAIL包实现存储过程邮件发送

    邮件通知预警和提示在当前系统中已经是一个比较常见的功能.各类型语言分别针对邮件提供了功能包和API接口方法,本篇介绍如何在PL/SQL代码中使用UTL_MAIL工具包发送邮件,同时还介绍配置中注意的细 ...

  2. 存储过程while_超详细的Oracle存储过程基础入门介绍

    概述 前面已经对存储过程.函数.包做了个介绍,但是毕竟是写成了一篇,所以没那么细,今天单独介绍一下存储过程基础方面,后面再说遍历什么游标啊,数组啊~ 1.语法 CREATE [OR REPLACE] ...

  3. Oracle存储过程中异常Exception的捕捉和处理

    Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...

  4. [oracle] Oracle存储过程里操作BLOB的字节数据的办法,例如写入32位整数

    作者: zyl910 一.缘由 BLOB是指二进制大对象,也就是英文Binary Large Object的缩写. 在很多时候,我们是通过其他编程语言(如Java)访问BLOB的字节数据,进行字节级的 ...

  5. Java(CallableStatement)调用Oracle存储过程返回结果集(ResultSet)

     一:无返回值的存储过程调用 存储过程: CREATE OR REPLACE PROCEDURE PRO_1(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS BEGIN ...

  6. 用java调用oracle存储过程总结

    1.什么是存储过程.存储过程是数据库服务器端的一段程序,它有两种类型.一种类似于SELECT查询,用于检索数据,检索到的数据能够以数据集的形式返回给客户.另一种类似于INSERT或DELETE查询,它 ...

  7. C#调用Oracle存储过程分页

    直接调用Oracle中的存储过程完成对表的分页,对代码封闭程度高,执行高效.以下为C#分页类代码,包括Oracle数据库 端存储过程PLSQL代码. //    程序调用示例: // int tota ...

  8. 用java调用oracle存储过程总结二

    这段时间开始学习写存储过程,主要原因还是因为工作需要吧,本来以为很简单的,但几经挫折,豪气消磨殆尽,但总算搞通了,为了避免后来者少走弯路,特记述与此,同时亦对自己进行鼓励. 一:无返回值的存储过程 存 ...

  9. 用java调用oracle存储过程总结一

    1.什么是存储过程.存储过程是数据库服务器端的一段程序,它有两种类型.一种类似于SELECT查询,用于检索数据,检索到的数据能够以数据集的形式返回给客户.另一种类似于INSERT或DELETE查询,它 ...

最新文章

  1. 铺地毯(矩形的交+前后缀矩形交)
  2. 废旧光盘手工小制作_废旧利用 | 幼儿园手工卷纸筒制作大全,超实用
  3. 根据大小分割大文本_场景文本检测—CTPN算法介绍
  4. python字符编码解码,文件编码解码。
  5. kali的burpsuite笔记
  6. 国防现代化的数据_Linux容器如何解决国防虚拟化问题
  7. 苹果推出iCloud照片转移服务 能轻松转到谷歌相册
  8. python 类装饰器和继承_python装饰器、继承、元类、mixin,四种給类动态添加类属性和方法的方式(一)...
  9. 获取Android手机短信中心号码
  10. 推挽变换器matlab仿真,双驱动推挽DC-DC变换器方案分享之设计原理简析
  11. 熊出没机器人光头强_熊出没:光头强的最强发明,第2件砍树神器,最后1件价值千万!...
  12. ipmitool 工具的使用姿势
  13. 全球及中国企业数据存储解决方案行业发展动态及前景规划分析报告2022-2027
  14. 李佳琦、薇娅们的残酷生存物语
  15. 桃园三结义c语言程序,三国典故:桃园三结义
  16. Java Shiro 设置 anon 无效
  17. tracepro应用实例详解_腾讯云服务器计费模式包年包月、按量计费和竞价实例选择建议...
  18. 自定义java对象转换工具类
  19. 放肆的使用UIBezierPath和CAShapeLayer画各种图形(含仿微信视频眼镜Demo)
  20. 分享编程技术的微信公众号二维码

热门文章

  1. Resumable 文件分块上传
  2. 一篇文章了解爬虫的方方面面
  3. 深度学习入门(三十一)卷积神经网络——GoogLeNet
  4. 月入五万的码农,抢了文科生的饭碗
  5. 【亲测有效】root安装软件和无需root权限两种方法linux点对点网络测速,网速测试,带宽测速,局域网测速
  6. 20221228英语学习
  7. 抹掉数据时显示连接服务器失败,无法连接iCloud,连接icloud验证失败,icloud连接不到:《苹果抹掉数据验证失败》 苹果icloud怎么登陆不上?-南开游戏网...
  8. unity demo免费下载:第三人称镜头移动+瞄准线+发射弧线球打击方块(方块可以识别受击方向)demo
  9. 10, excel vba 修改单元格的颜色
  10. Python3操作MongoDB数据库