CREATE OR REPLACE
PROCEDURE "PROC_INS_DAY_DOCTOR_LL"(v_date in VARCHAR) is --PROC_INS_DAY_DOCTOR_LL 是存储函数名 v_id DAY_DOCTOR_STATS.DDOS_ID%TYPE;--主键
v_hospital_id DAY_DOCTOR_STATS.HOSPITAL_ID%TYPE;--医院ID
v_doctor_id DAY_DOCTOR_STATS.DOCTOR_ID%TYPE;--医生id
v_total_money DAY_DOCTOR_STATS.TOTAL_MONEY%TYPE;--总金额
v_anti_money DAY_DOCTOR_STATS.ANTI_MONEY%TYPE;--抗菌药金额
v_create_date DAY_DOCTOR_STATS.CREATE_DATE%TYPE;--创建时间 CURSOR CUR_HOSPITAL_DOCT IS--声明游标 医生数据(住院)
SELECT DISTINCT c.DOCTOR_ID
FROM FIN_IPR_INMAININFO a,FIN_IPB_MEDICINELIST b,DOCTOR c
WHERE a.INPATIENT_NO= b.INPATIENT_NO
and b.RECIPE_DOCCODE=c.EMPL_CODE
AND to_char(a.OUT_DATE,'yyyy-mm-dd')=v_date
and rownum<2; BEGIN
OPEN CUR_HOSPITAL_DOCT; --打开游标
--循环游标
LOOP
FETCH CUR_HOSPITAL_DOCT INTO v_doctor_id; --取值
EXIT WHEN CUR_HOSPITAL_DOCT%NOTFOUND; --当没有记录时退出循环 --把住院用药信息数据导入到一个临时表中
Insert into FIN_IPB_MEDICINELIST_NEW (HOSPITAL_CODE,RECIPE_NO,SEQUENCE_NO,INPATIENT_NO,TRANS_TYPE,CARD_NO,NAME,INHOS_DEPTCODE,RECIPE_DOCCODE,DRUG_CODE,DRUG_NAME,SPECS,DOSE_MODEL_CODE,UNIT_PRICE,QTY,FREQUENCY_NAME,FREQUENCY_CODE,USAGE_CODE,USE_NAME,DOSE_ONCE,DOSE_UNIT,BASE_DOSE,DAYS,PACK_QTY,PRICE_UNIT,OWN_MONEY,MEDICARE_MONEY,FEE_DATE,MO_ORDER,BROUGHT_FLAG,MEDICAL_TEAM_CODE,IS_HERBS,MANUFACTURER,ID)
select * from FIN_IPB_MEDICINELIST WHERE INPATIENT_NO in(select INPATIENT_NO from FIN_IPR_INMAININFO where to_char(OUT_DATE,'yyyy-mm-dd')=v_date); --主键
select substr(sys_guid(),1,8)||'-'||substr(sys_guid(),9,4)||'-'||substr(sys_guid(),13,4)||'-'||substr(sys_guid(),17,4)||'-'||substr(sys_guid(),20,12)
into v_id from dual; --HOSPITAL_ID
--医院编码
select '' into v_hospital_id from dual; --医生编码
SELECT EMPL_CODE INTO v_empl_code FROM DOCTOR WHERE DOCTOR_ID=v_doctor_id; --TOTAL_MONEY
--总金额
SELECT nvl(sum(OWN_MONEY),0) into v_total_money
FROM FIN_IPB_MEDICINELIST_NEW
WHERE DRUG_CODE IN (SELECT DRUG_CODE FROM PHA_COM_BASEINFO WHERE manufacturer is not null )
AND RECIPE_DOCCODE =v_empl_code; --ANTI_MONEY
--抗菌药金额
select nvl(sum(OWN_MONEY),0) into v_anti_money
from FIN_IPB_MEDICINELIST_NEW
where RECIPE_DOCCODE =v_empl_code
AND DRUG_CODE IN (SELECT DRUG_CODE FROM PHA_COM_BASEINFO WHERE IS_KJY=''); --CREATE_DATE
--创建时间
select TO_DATE(v_date,'yyyy-mm-dd') into v_create_date from dual; --删除当天的数据
delete from DAY_DOCTOR_STATS
where CREATE_DATE=v_create_date and DOCTOR_ID=v_doctor_id; --清除住院用药表数据
DELETE FROM FIN_IPB_MEDICINELIST_NEW; --生成一条新数据(其实就是向一张表插入数据)
insert into DAY_DOCTOR_STATS
(DDOS_ID,HOSPITAL_ID,DOCTOR_ID,TOTAL_MONEY,ANTI_MONEY,CREATE_DATE)
values(v_id,v_hospital_id,v_doctor_id,v_total_money,v_anti_money,v_create_date);
commit;
END LOOP;
CLOSE CUR_HOSPITAL_DOCT;--关闭这个游标 END;

oracle存储函数实例的更多相关文章

  1. Oracle存储函数,存储过程

    一.Oracle存储函数:存储的PL/SQL语法块,完成特定的功能.1.语法: 函数关键字: function (1)创建函数 CREATE [OR REPLACE] FUNCTION <fun ...

  2. ORACLE 存储函数

    前奏: 必要的概念: ORACLE 提供能够把 PL/SQL 程序存储在数据库中.并能够在不论什么地方来运行它.这样就叫存储过 程或函数. 过程和函数统称为 PL/SQL 子程序.他们是被命名的 PL ...

  3. Oracle存储函数jdbc调用

    package com.jckb.procedure; import java.sql.CallableStatement; import java.sql.Connection; import ja ...

  4. Oracle分组函数实例

    分组函数也叫聚合函数.如果在查询只想要查分组函数,那么跟平时的查询语句并无不同: SQL ,,,,) ; SUM(T.PRIZENUM) AVG(T.PRIZENUM) --------------- ...

  5. Oracle自定义函数实例

    1. 传入一个值, 如果该值为0,则返回空. CREATE OR REPLACE FUNCTION Fun_Test(p IN NUMBER) RETURN VARCHAR2 IS v_Result ...

  6. oracle 存储函数,更新库存

    create procedure PRO_update_Goods_group_stock is v_min_stock , ); v_gg_stock , ); v_goods_no number; ...

  7. Oracle的基本语法,存储函数及触发器

    1.PL/SQL    PL/SQL是Oracle对 ql语言的过程化扩展,指在 SQL 命令语言中增加了过程处理语句,使SQL语言具有过程处理能力.把 SQL 语言的数据操纵能  力与过程语言的数据 ...

  8. 「mysql优化专题」90%程序员没听过的存储过程和存储函数教学(7)

    一.MYSQL储存过程简介(技术文): 储存过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时 ...

  9. 7.MySQL优化---存储过程和存储函数

    转自互联网. 当一个大型系统在建立时,会发现,很多的SQL操作是有重叠的,个别计算是相同的,比如:业务系统中,计算一张工单的计算方式.当遇到这些情况时,我们运用存储过程就是一个非常棒的优化啦.那么,什 ...

随机推荐

  1. python中stack在实际中的简单应用之进制转换

    计算机的世界是二进制的,而人类的世界是十进制的,当数学公式用计算机表达时,经常 要转换.这就用到了进制的转换. 首先,我们先了解一下二进制和十进制的发展历史: 二进制: 现代的二进制首先由大数学家莱布 ...

  2. 线程间通信wait和notify【All】简介

    1.通信就是指相互交换一些数据或者发送一些控制指令,比如一个线程给另一个暂停执行的线程发送一个恢复执行的指令. 可变共享变量是天然的通信媒介,也就是说一个线程如果想和另一个线程通信的话,可以修改某个在 ...

  3. FTP上传心得

    最近出了一个问题就是在本地上传FTP没有一点问题 可是部署到服务器上.上传的时候总是false.解决办法 ftp.enterLocalPassiveMode();boolean storeFile = ...

  4. logstash grok 内置正则

    参考地址:https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns USERNAME [a-zA-Z0-9._-]+ ...

  5. js 获取浏览器大小,屏幕大小等。

    转自:“”http://www.cnblogs.com/top5/archive/2009/05/07/1452135.html“”..感谢,万分. 网页可见区域宽:document.body.cli ...

  6. MVC笔记--特性路由

    物性路由:将路由和控制器放在一起,这样更简单方便,还可以处理复杂的路由场景 传统路由:集中.强制.基于代码风格来定义的. 每个MVC应用程序都需要路由来定义自己的处理请求方式,路由是MVC是应用程序的 ...

  7. SQL 必知必会·笔记<14>更新和删除数据

    1. 更新数据 基本的UPDATE语句,由三部分组成: 要更新的表 列名和它们的新值 确定要更新那些行的过滤条件 更新单列示例: UPDATE Customers SET cust_email = ' ...

  8. google 身份验证器

    谷歌身份验证器原理 就是服务器与客户端算法相同

  9. MVCC浅析

    在并发读写数据库时,读操作可能会不一致的数据(脏读).为了避免这种情况,需要实现数据库的并发访问控制,最简单的方式就是加锁访问.由于,加锁会将读写操作串行化,所以不会出现不一致的状态.但是,读操作会被 ...

  10. 从完整备份恢复单个innodb表

    现在大多数同学在线上采取的备份策略都是xtrabackup全备+binlog备份,那么当某天某张表意外的删除那么如何从xtrabackup全备中恢复呢?从mysql 5.6版本开始,支持可移动表空间( ...