您的位置:首页 > 其它

huawei--存储过程中定义标签,跳转至标签,控制逻辑

2010-12-01 20:51 411 查看
CREATE OR REPLACE PROCEDURE spVarItemScore
(
v_ServiceType int,
v_ServiceOrder smallint,
v_ScoreResult IN OUT float,
v_Status OUT int
)
AS
v_Dummy number;
null_value EXCEPTION;
SubProc_Error EXCEPTION;
v_SkillGroupField varchar2(30) ;
v_DefaultScoreRatio float ;
v_num smallint:=0;
BEGIN
v_Status :=0;
if Status<>0 THEN
v_ScoreResult := 0 ;
v_Status:= Status;
RAISE SubProc_Error;
end if;
if v_ItemValue IS NULL THEN
goto label_pubcompute;
END IF;
<<label_pubcompute>>
if v_ItemValue = 0 or v_ItemValue = null THEN
v_ScoreResult := v_DefaultScoreRatio ;
if v_Ratio >0 THEN
v_ScoreResult := v_Ratio * v_DefaultScoreRatio / 100.0;
else
v_ScoreResult := abs(v_Ratio) - abs(v_Ratio) * v_DefaultScoreRatio / 100.0;
END IF;
return ;
END IF;
if v_ComputeType =1 THEN
if v_SumWork > 0 THEN
v_ScoreResult := 1.0 * v_ItemValue / v_SumWork;
else
v_ScoreResult := 0;
END IF;
goto label_Ratio_compute;
else
v_ScoreResult := 0 ;
v_Status :=-131;
return ;
end if;

<<label_Ratio_compute>>
if v_Ratio >0 then
v_ScoreResult := v_Ratio * v_ScoreResult;
else
v_ScoreResult := abs(v_Ratio) - abs(v_Ratio) * v_ScoreResult;
END IF;
COMMIT;

EXCEPTION WHEN null_value THEN
v_ScoreResult := 0 ;
v_Status:=2;
return;
WHEN NO_DATA_FOUND THEN
v_ScoreResult := 0 ;
v_Status:=0;
ROLLBACK;
return;
WHEN SubProc_Error THEN
v_ScoreResult := 0 ;
ROLLBACK;
return;
WHEN OTHERS THEN
v_ScoreResult := 0 ;
v_Status:=1 ;
ROLLBACK ;
return;
END spVarItemScore;
/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: