sql使用记录20200410

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中的一致

参考:
ORA-01791: 不是 SELECTed 表达式(distinct使用注意点)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值