Oracle SQL update方法 round函数

    做选厂比价时,需要把比价表(vender_comparison_detail )里的报价金额(price )统一换算成美元,并将结果保存在折算金额(convert_usd)字段。换算的汇率根据汇率表(currencyrate)最新更新的汇率值,即取同一个币种(currency),更新日期(asof)最新的汇率(rate)。该汇率表是各币种100的金额换算成美元的汇率,例如币种‘RMB’,汇率为‘14.97300’,则意思是100元的人民币可换14.973的美元,其他币种类似。人民币换算成美元时,再除以1.25,是考虑若从国外进口会产生的保险费、运输费、关税等费用,估计占报价金额的25%,所以报价为美元的话,需乘以1.25,再换算成人民币再和国内厂家的报价进行比较。现在需吧把人民币换算美元,故反过来人民币除以1.25。

     这里用到了round函数,round函数是计算结果进行四舍五入的方法,第二个参数表示开始四舍五入的位数,可取正数也可取负数。正数表示从小数点右边数起,第几位,负数相反,下面取2,表示从小数点后第2位开始四舍五入。我在orcale试的结果如下: round(155.7894,2) = 155.79, round(155.789,0) = 156,round(155.789,-1) = 160。

     看网上说orcale没有update from语句,于是学习用了其他介绍的方法更新折算金额,加最后一个 where vc.com_no in ……是因为看网上说,oracle不会按照我们所想的只更新满足查询条件的那些记录,例如 com_no = '0107' ,不满足条件的记录会全被更新为空值,我试验了下果然!其他比价单的折算金额都置为空了,所以需加上 where vc.com_no in …… 才能保证只更新我想要的记录。

update vender_comparison_detail vc
   set (convert_usd) =
       (select decode(v.currency,
                      'RMB',
                      round(v.price * c.rate / 100 / 1.25, 2),
                      round(v.price * c.rate / 100, 2))
          from vender_comparison_detail v, currencyrate c
         where vc.com_no = v.com_no
           and vc.pn = v.pn
           and vc.vender = v.vender
           and v.com_no = '0107'    // 比价单号
           and trim(c.currency) = v.currency
           and c.asof = (select max(asof)    // ‘asof’ 为更新日期
                           from currencyrate
                          where trim(currency) = v.currency))
 where vc.com_no in
       (select com_no from vender_comparison_detail where com_no = '0107')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值