UOM物料单位转换(同类型才能转换)

本文介绍了一个用于物料单位转换的函数实现。该函数可以根据输入的不同单位进行转换,并通过判断单位的一致性和类型匹配来确保转换的有效性。此外,还介绍了如何从物料单位表中获取基本单位和转换比率。

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

apps.mtl_units_of_measure   -- 物料單位表

image

 

apps.mtl_uom_conversions   -- 物料單位進率轉換表

image

 

CREATE OR REPLACE FUNCTION mtl_uom_conversion_func (p_from_uom IN VARCHAR2, -- 要被轉換的 UOM
                                                                                               p_to_uom IN VARCHAR2,     -- 將要轉換成的 UOM
                                                                                               p_unit IN number                      -- 要被轉換的數量
)
   RETURN NUMBER
AS
   fr_base_uom   VARCHAR2 (10);
   to_base_uom   VARCHAR2 (10);
   conv1         NUMBER;
   conv2         NUMBER;
   result        NUMBER;
BEGIN

   -- 判斷 被轉的UOM 與 將要轉成的UOM 是否一樣,若一樣的話,將原值返回
   IF UPPER (TRIM (p_from_uom)) = UPPER (TRIM (p_to_uom)) THEN     

          RETURN p_unit;
   END IF;

 

   -- 判斷 被轉的UOM 是什麼類型
   SELECT UPPER (uom_code)
   INTO fr_base_uom
   FROM apps.mtl_units_of_measure
   WHERE base_uom_flag = 'Y'
         AND uom_class = (SELECT uom_class
                          FROM apps.mtl_units_of_measure
                          WHERE UPPER (uom_code) = UPPER (TRIM (p_from_uom)));

 

   -- 判斷 將要轉的UOM 是什麼類型
   SELECT UPPER (uom_code)
   INTO to_base_uom
   FROM apps.mtl_units_of_measure
   WHERE base_uom_flag = 'Y'
         AND uom_class = (SELECT uom_class
                          FROM apps.mtl_units_of_measure
                          WHERE UPPER (uom_code) = UPPER (TRIM (p_to_uom)));


  -- 判斷 將要被轉UOM  與 被轉的UOM 類型是否一致
  if (fr_base_uom <> to_base_uom) then
    return -1;  -- -1表示類型不同,而不能進行單位轉換
  end if;          

           

   -- 判斷 被轉的UOM  轉換率
   SELECT conversion_rate
   INTO conv1
   FROM apps.mtl_uom_conversions
   WHERE UPPER (uom_code) = UPPER (TRIM (p_from_uom));

 

   -- 判斷 將要轉成的UOM  轉換率
   SELECT conversion_rate
   INTO conv2
   FROM apps.mtl_uom_conversions
   WHERE UPPER (uom_code) = UPPER (TRIM (p_to_uom));

 

   -- 依據 兩個單位之間的進率進行公式轉換
   result   := (p_unit * conv1) / conv2;

   RETURN result;
EXCEPTION
   WHEN OTHERS
   THEN
      RETURN -1;
END;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值