oracle 存储过程

哎 数据库好菜.....写个存储过程写了好久才写出来(还是别人的帮忙),所以做做笔记。
查询分页:

create or replace procedure
--住院病人费用清单
SP_PATIENT_CHARGE_BILL(v_begDate in varchar2,[color=red]--输入参数[/color]
v_endDate in varchar2,[color=red]--输入参数[/color]
v_inhos in varchar2,[color=red]--输入参数[/color]
v_start in number,[color=red]--输入参数[/color]
v_limit in number,[color=red]--输入参数[/color]
v_result out sghis.his_brsf.HIS_CURSOR) is [color=red]--输出参数(游标)[/color]
begin
open v_result for

select * from (select row_.*, rownum rownum_ from ([color=red]--这句是为了分页[/color]

select invoice_name as invoice_code,
fee_name,
spe,
amount,
unit,
price,
taxmoney,
date1 || '至' || date2 as exec_time,
remark
from (select case sort_id when '01' then '01' when '70' then '01' else sort_id end as invoice_code,
bb.pham_name as fee_name,
bb.packing as spe,
aa.amount,
bb.split_unit as unit,
case aa.amount when 0 then 0 else round(aa.taxmoney / aa.amount, 2) end as price,
aa.taxmoney,
date1,
date2,
aa.fee_code,
bb.remark as remark
from (select fee_code,
nvl(sum(amount), 0) as amount,
avg(price) as price,
nvl(sum(round(amount * price, 2)), 0) as taxmoney,
min(to_char(list_date, 'yyyy-mm-dd')) as date1,
max(to_char(list_date, 'yyyy-mm-dd')) as date2
from sghis.ih_advice_fee r
where pham_sign = '0'
and to_char(pay_date, 'yyyy-mm-dd') >= v_begDate
and to_char(pay_date, 'yyyy-mm-dd') <= v_endDate
and inhos_no = v_inhos
and pay_sign = '1'
group by fee_code, price) aa,
sghis.pa_pham_info bb
where aa.fee_code = bb.pham_code(+)

union all

select case sort_id when '01' then '01'when '70' then '01' else sort_id end as invoice_code,
bb.pham_name as fee_name,
bb.packing as spe,
aa.amount,
bb.split_unit as unit,
case aa.amount when 0 then 0 else round(aa.taxmoney / aa.amount, 2)end as price,
aa.taxmoney,
date1,
date2,
aa.fee_code,
bb.remark as remark
from (select fee_code,
-1 * nvl(sum(amount), 0) as amount,
avg(price) as price,
-1 * nvl(sum(round(amount * price, 2)), 0) as taxmoney,
min(to_char(deal_time, 'yyyy-mm-dd')) as date1,
max(to_char(deal_time, 'yyyy-mm-dd')) as date2
from sghis.ih_advice_fee_self t
where pham_sign = '0'
and to_char(deal_time, 'yyyy-mm-dd') >= v_begDate
and to_char(deal_time, 'yyyy-mm-dd') <= v_endDate
and inhos_no = v_inhos
and cancel_sign = '1'
and (deal_sign = '0' or deal_sign = '2')
group by fee_code, price) aa,
sghis.pa_pham_info bb
where aa.fee_code = bb.pham_code(+)

union all

select bb.invoice_code,
bb.item_name as fee_name,
bb.spe,
aa.amount,
bb.unit,
case aa.amount when 0 then 0 else round(aa.taxmoney / aa.amount, 2) end as price,
aa.taxmoney,
date1,
date2,
aa.fee_code,
bb.remark as remark
from (select fee_code,
nvl(sum(amount), 0) as amount,
avg(price) as price,
nvl(sum(round(amount * price, 2)), 0) as taxmoney,
min(to_char(list_date, 'YYYY-MM-DD')) as date1,
max(to_char(list_date, 'YYYY-MM-DD')) as date2
from sghis.ih_advice_fee
where to_char(pay_date, 'yyyy-mm-dd') >= v_begDate
and to_char(pay_date, 'yyyy-mm-dd') <= v_endDate
and inhos_no = v_inhos
and pham_sign = '1'
and pay_sign = '1'
group by fee_code, price) aa,
sghis.hd_price_dict bb
where aa.fee_code = bb.item_code(+)

union all

select bb.invoice_code,
bb.item_name as fee_name,
bb.spe,
aa.amount,
bb.unit,
case aa.amount when 0 then 0 else round(aa.taxmoney / aa.amount, 2) end as price,
aa.taxmoney,
date1,
date2,
aa.fee_code,
bb.remark as remark
from (select fee_code,
-1 * nvl(sum(amount), 0) as amount,
avg(price) as price,
-1 * nvl(sum(round(amount * price, 2)), 0) as taxmoney,
min(to_char(deal_time, 'yyyy-mm-dd')) as date1,
max(to_char(deal_time, 'yyyy-mm-dd')) as date2
from sghis.ih_advice_fee_self
where to_char(deal_time, 'yyyy-mm-dd') >= v_begDate
and to_char(deal_time, 'yyyy-mm-dd') <= v_endDate
and inhos_no = v_inhos
and pham_sign = '1'
and cancel_sign = '1'
and (deal_sign = '0' or deal_sign = '2')
group by fee_code, price) aa,
sghis.hd_price_dict bb
where aa.fee_code = bb.item_code(+)) a,
sghis.hd_invoice_dict d
where a.invoice_code = d.invoice_code(+)

order by a.invoice_code, a.fee_code

) row_ where rownum<= v_start+v_limit) where rownum_>v_start;[color=red]--这句为了分页[/color]

end;


查询总记录数:
create or replace procedure
--住院病人费用清单总记录数
SP_PATIENT_CHARGE_BILL_COUNT
( v_begDate in varchar2,
v_endDate in varchar2,
v_inhos in varchar2,
v_count out number) is
begin

select count(*) into v_count [color=red]--把查出来的总记录数插入到输出参数中[/color]

from (select case sort_id when '01' then '01' when '70' then '01' else sort_id end as invoice_code,
bb.pham_name as fee_name,
bb.packing as spe,
aa.amount,
bb.split_unit as unit,
case aa.amount when 0 then 0 else round(aa.taxmoney / aa.amount, 2) end as price,
aa.taxmoney,
date1,
date2,
aa.fee_code,
bb.remark as remark
from (select fee_code,
nvl(sum(amount), 0) as amount,
avg(price) as price,
nvl(sum(round(amount * price, 2)), 0) as taxmoney,
min(to_char(list_date, 'yyyy-mm-dd')) as date1,
max(to_char(list_date, 'yyyy-mm-dd')) as date2
from sghis.ih_advice_fee r
where pham_sign = '0'
and to_char(pay_date, 'yyyy-mm-dd') >= v_begDate
and to_char(pay_date, 'yyyy-mm-dd') <= v_endDate
and inhos_no = v_inhos
and pay_sign = '1'
group by fee_code, price) aa,
sghis.pa_pham_info bb
where aa.fee_code = bb.pham_code(+)

union all

select case sort_id when '01' then '01'when '70' then '01' else sort_id end as invoice_code,
bb.pham_name as fee_name,
bb.packing as spe,
aa.amount,
bb.split_unit as unit,
case aa.amount when 0 then 0 else round(aa.taxmoney / aa.amount, 2)end as price,
aa.taxmoney,
date1,
date2,
aa.fee_code,
bb.remark as remark
from (select fee_code,
-1 * nvl(sum(amount), 0) as amount,
avg(price) as price,
-1 * nvl(sum(round(amount * price, 2)), 0) as taxmoney,
min(to_char(deal_time, 'yyyy-mm-dd')) as date1,
max(to_char(deal_time, 'yyyy-mm-dd')) as date2
from sghis.ih_advice_fee_self t
where pham_sign = '0'
and to_char(deal_time, 'yyyy-mm-dd') >= v_begDate
and to_char(deal_time, 'yyyy-mm-dd') <= v_endDate
and inhos_no = v_inhos
and cancel_sign = '1'
and (deal_sign = '0' or deal_sign = '2')
group by fee_code, price) aa,
sghis.pa_pham_info bb
where aa.fee_code = bb.pham_code(+)

union all

select bb.invoice_code,
bb.item_name as fee_name,
bb.spe,
aa.amount,
bb.unit,
case aa.amount when 0 then 0 else round(aa.taxmoney / aa.amount, 2) end as price,
aa.taxmoney,
date1,
date2,
aa.fee_code,
bb.remark as remark
from (select fee_code,
nvl(sum(amount), 0) as amount,
avg(price) as price,
nvl(sum(round(amount * price, 2)), 0) as taxmoney,
min(to_char(list_date, 'YYYY-MM-DD')) as date1,
max(to_char(list_date, 'YYYY-MM-DD')) as date2
from sghis.ih_advice_fee
where to_char(pay_date, 'yyyy-mm-dd') >= v_begDate
and to_char(pay_date, 'yyyy-mm-dd') <= v_endDate
and inhos_no = v_inhos
and pham_sign = '1'
and pay_sign = '1'
group by fee_code, price) aa,
sghis.hd_price_dict bb
where aa.fee_code = bb.item_code(+)

union all

select bb.invoice_code,
bb.item_name as fee_name,
bb.spe,
aa.amount,
bb.unit,
case aa.amount when 0 then 0 else round(aa.taxmoney / aa.amount, 2) end as price,
aa.taxmoney,
date1,
date2,
aa.fee_code,
bb.remark as remark
from (select fee_code,
-1 * nvl(sum(amount), 0) as amount,
avg(price) as price,
-1 * nvl(sum(round(amount * price, 2)), 0) as taxmoney,
min(to_char(deal_time, 'yyyy-mm-dd')) as date1,
max(to_char(deal_time, 'yyyy-mm-dd')) as date2
from sghis.ih_advice_fee_self
where to_char(deal_time, 'yyyy-mm-dd') >= v_begDate
and to_char(deal_time, 'yyyy-mm-dd') <= v_endDate
and inhos_no = v_inhos
and pham_sign = '1'
and cancel_sign = '1'
and (deal_sign = '0' or deal_sign = '2')
group by fee_code, price) aa,
sghis.hd_price_dict bb
where aa.fee_code = bb.item_code(+)) a,
sghis.hd_invoice_dict d
where a.invoice_code = d.invoice_code(+)

order by a.invoice_code, a.fee_code;
end;
内容概要:本文介绍了一个基于多传感器融合的定位系统设计方案,采用GPS、里程计和电子罗盘作为定位传感器,利用扩展卡尔曼滤波(EKF)算法对多源传感器数据进行融合处理,最终输出目标的滤波后位置信息,并提供了完整的Matlab代码实现。该方法有效提升了定位精度与稳定性,尤其适用于存在单一传感器误差或信号丢失的复杂环境,如自动驾驶、移动采用GPS、里程计和电子罗盘作为定位传感器,EKF作为多传感器的融合算法,最终输出目标的滤波位置(Matlab代码实现)机器人导航等领域。文中详细阐述了各传感器的数据建模方式、状态转移与观测方程构建,以及EKF算法的具体实现步骤,具有较强的工程实践价值。; 适合人群:具备一定Matlab编程基础,熟悉传感器原理和滤波算法的高校研究生、科研人员及从事自动驾驶、机器人导航等相关领域的工程技术人员。; 使用场景及目标:①学习和掌握多传感器融合的基本理论与实现方法;②应用于移动机器人、无人车、无人机等系统的高精度定位与导航开发;③作为EKF算法在实际工程中应用的教学案例或项目参考; 阅读建议:建议读者结合Matlab代码逐行理解算法实现过程,重点关注状态预测与观测更新模块的设计逻辑,可尝试引入真实传感器数据或仿真噪声环境以验证算法鲁棒性,并进一步拓展至UKF、PF等更高级滤波算法的研究与对比。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值