sql使用记录 20200410
1.处理跨界支付对账问题,
产生原因,前一患者快捷支付16元缴费失败,产生单边账。后一患者继续使用上一患者单据号进行快捷支付106.9缴费成功。
abc_bank_trade表中关于改单据号的收费记录有两条,其中一条在his系统中未出现。
对账时将out_rcpt_master查到的收据号在abc_bank_trade过滤,并取abc_bank_trade中的收费金额,此时多条只取第一条,
取到了16,和his中记录的16.9有差异,导致账目不齐
解决方法:最开始查看abc_bank_trade表中记录,发现单边账退款后会改变refund_indicator标志为1,认为添加条件refund_indicator = ‘0’
可以解决。修改后查询本结账单据正常,但是其它部分结账单据异常,仔细对比发现忽略了正常缴费之后正常退费情况下refund_indicator = ‘1’的
收费也是在his中记录的,按照上述refund_indicator = ‘0’过滤会少计算这部分,账目还是不齐
最终解决,观察abc_bank_trade表中数据,对于同一单据号单边账后再次成功,最终成功缴费的时间总在最后,将程序中的检索结果按照时间降序排列,取第一行即可
select nvl(BANK_SERIAL_NO,'不存在') serial_no, TRANS_COST cost from outpbill.abc_bank_trade
where his_rcpt_no = :lsRcptNo and io_indicator = '0' and TRANS_TYPE in ('jspay','micropay','cardpay')
order by TRANS_DATE desc) where rownum = 1
2. 最开始使用的DISTINCT 报错 ORA-01791: 不是 SELECTed 表达式
DISTINCT 与 order by 连用时注意order by后的字段要与select中的一致