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;