Create Or Replace Procedure JXGZ_绩效评分计算
(
考核期间ID_in In 考核期间.ID%Type,
登记人ID_in In 考核数据.操作员ID%Type,
登记日期_in In 考核数据.登记日期%Type,
所属机构_in In 考核数据.ID%Type
) As
--定义过程变量
R_工资详表 绩效工资数据明细%rowtype;
v_类别 绩效工资管理.类别%Type := 0;
v_考核期间id 绩效工资管理.考核期间id%Type := 考核期间ID_in;
v_登记人 绩效工资管理.登记人%Type := 登记人ID_in;
v_登记日期 绩效工资管理.登记日期%Type := 登记日期_in;
--定义游标[动态]
Cursor tablecursor
(
v_考核期间ID Varchar2,
v_所属机构 Varchar
) Is
Select A.工作质量分数, A.工作数量分数, A.行政管理分数, A.绩效总分, A.当前总分
From 绩效工资数据明细 A
Where A.考核期间ID = v_考核期间ID And A.机构ID = v_所属机构
For Update;
Begin
--新的主表期间ID
Select NewId() Into v_id From dual;
Select t.考核期间id Into v_考核期间id From 考核数据 t Where t.考核期间id = 考核期间ID_in And t.所属机构 = 所属机构_in And ROWNUM = 1;
Insert Into 绩效工资管理 (ID, 类别, 机构id, 考核期间id, 登记人, 登记日期) Values (v_id, v_类别, 所属机构_in, v_考核期间id, v_登记人, v_登记日期);
--插入数据
Insert Into 绩效工资数据明细
(ID, 考核数据ID, 绩效工资管理ID, 部门id, 个人id, 系数, 考核期间id, 工作数量分数, 工作质量分数, 行政管理分数, 机构ID)
Select NewId(), 考核数据ID, v_id, 所属部门, 机构人员ID, 系数, 考核期间id, Sum(工作数量考核), Sum(工作质量考核), Sum(行政管理考核), 所属机构
From (Select B.所属部门, B.机构人员ID, B.ID, 考核数据ID, b.系数, b.考核期间id, DECODE(考核类别, '工作数量考核', 分值 * 数量, 0) As 工作数量考核,
DECODE(考核类别, '工作质量考核', 分值 * 数量, 0) As 工作质量考核, DECODE(考核类别, '行政管理考核', 分值 * 数量, 0) As 行政管理考核, B.所属机构
From 考核数据详细 A, 考核数据 B
Where b.id = a.考核数据id And b.考核期间id = 考核期间ID_in And b.所属机构 = 所属机构_in)
Group By 所属部门, 机构人员ID, 考核数据id, 系数, 考核期间id, 所属机构;
--游标计算
Open tablecursor(考核期间ID_in, 所属机构_in);
While tablecursor%Found Loop
If R_工资详表.考核期间ID = 考核期间ID_in And R_工资详表.机构ID = 所属机构_in Then
Update 绩效工资数据明细
Set 当前总分 =500
End)
Where Current Of tablecursor;
End If;
End Loop;
Close tablecursor;
Commit;
Exception
When Others Then
Null;
End JXGZ_绩效评分计算;
-------------------正式版
Create Table Cur_Table
(
CID Number(10) Primary Key,
CType Number(1),
CName Varchar2(300),
CResult Number(20)
)
CREATE OR REPLACE Procedure P_游标UpdateTable
(
Type_in In Cur_Table.CType%Type,
Result_in In Cur_Table.CResult%Type
) As
Cursor T_Cursor(Type_in Cur_Table.CType%Type) Is
Select * From Cur_Table Where ctype = Type_in For Update;
Rs Cur_Table%Rowtype;
Begin
Open T_Cursor(Type_in);
Loop
Fetch T_Cursor Into Rs;
Exit When T_Cursor%Notfound;
Update Cur_Table Set CResult = Result_in,CName='大圣' Where Current Of T_Cursor;
End Loop;
Commit;
Close T_Cursor;
End P_游标UpdateTable;