huawei--存儲過程中定義標籤,跳轉至標籤,控制邏輯

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;
/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章