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

本文介绍了一个PLSQL存储过程的实现案例,该过程用于计算特定的服务类型和服务订单的得分结果,并通过不同的条件判断来调整得分。涉及变量声明、异常处理及流程控制等关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值