drop PROCEDURE IF EXISTS tt;
CREATE PROCEDURE tt(
para text,
OUT para1 DECIMAL(18, 6),
OUT para2 DECIMAL(18, 6)
)
BEGIN
    DECLARE Count int;
    DECLARE i int;

    DECLARE v_id int;
    DECLARE v_insurance_amount DECIMAL(18, 6);
    DECLARE v_rate DECIMAL(18, 6);

    SET i = 1;
    SET Count = ExtractValue(para, 'count(/list/com.xk.insalesystem.pojo.premiumCalculation.HouseholdPropertyAddtionalInsurance/id)');
    WHILE i <= Count DO
            SET v_id = ExtractValue(para, '/list/com.xk.insalesystem.pojo.premiumCalculation.HouseholdPropertyAddtionalInsurance[$i]/id');
            SET v_insurance_amount = ExtractValue(para, '/list/com.xk.insalesystem.pojo.premiumCalculation.HouseholdPropertyAddtionalInsurance[$i]/insurance_amount');
            SET v_rate = ExtractValue(para, '/list/com.xk.insalesystem.pojo.premiumCalculation.HouseholdPropertyAddtionalInsurance[$i]/rate');
            IF v_id = 1 THEN
                SET para1 = v_insurance_amount * v_rate;
            END IF;
            IF v_id = 2 THEN
                SET para2 = v_insurance_amount * v_rate;
            END IF;
        SET i = i + 1;
    END WHILE;
end;


call tt('<list>
  <com.xk.insalesystem.pojo.premiumCalculation.HouseholdPropertyAddtionalInsurance>
    <id>1</id>
    <insurance_amount>1000</insurance_amount>
    <rate>0.35</rate>
    <premium_amount>0.0</premium_amount>
  </com.xk.insalesystem.pojo.premiumCalculation.HouseholdPropertyAddtionalInsurance>
  <com.xk.insalesystem.pojo.premiumCalculation.HouseholdPropertyAddtionalInsurance>
    <id>2</id>
    <insurance_amount>300</insurance_amount>
    <rate>0.4</rate>
    <premium_amount>0.0</premium_amount>
  </com.xk.insalesystem.pojo.premiumCalculation.HouseholdPropertyAddtionalInsurance>
</list>', @a, @b);
SELECT @a, @b;

相关文章:

  • 2021-12-06
  • 2022-12-23
  • 2022-12-23
  • 2021-12-25
  • 2021-11-09
  • 2021-07-21
  • 2022-01-22
  • 2021-10-13
猜你喜欢
  • 2022-12-23
  • 2022-01-19
  • 2022-02-15
  • 2021-12-24
  • 2021-08-23
  • 2021-08-31
  • 2021-10-12
相关资源
相似解决方案