hibernate调用oracle的存储过程

1.hibernate dao层调用oracle存储过程

@Repository
public class PcdmPeriodChartDao extends BaseDao<PcdmPeriodChart> {
	// 传入存储过程  和参数
	public void executeVoidProcedureSql(final String queryString, final Object[] params) throws Exception {
		Session session = getSession();
		session.doWork(new Work() {
			public void execute(Connection conn) throws SQLException {
				ResultSet rs = null;
				CallableStatement call = conn.prepareCall("{" + queryString + "}");
				if (null != params) {
					for (int i = 0; i < params.length; i++) {
						call.setObject(i + 1, params[i]);
					}
				}
				rs = call.executeQuery();
				call.close();
				rs.close();
			}
		});
	}

}


2.service 调用时

	//修改为存储过程调用
	logger.info("------------------------------开始调用工程交付存储过程------------------------------");
	//PCDMTIMEPRO  是oracle的存储过程的名字

	pcdmPeriodChartDao.executeVoidProcedureSql("call PCDMTIMEPRO()", null);
	logger.info("------------------------------调用工程交付存储过程结束------------------------------");
	//sendMsgForUser();


3.oracle 创建存储过程 PCDMTIMEPRO

CREATE OR REPLACE PROCEDURE "PCDMTIMEPRO"  is
       var_Count number(10);
       var_sysdate date;
 	 		 var_XCWG number(10);
 	 		 var_DZT number(10);
 	 		 var_JGZL number(10);
 	 		 var_CLPH number(10);
 	 		 var_DDYS number(10);
 	 		 var_DDQZ number(10);
 	 		 var_XMJS number(10);
 	 		 var_CLPK number(10);
 	 		 var_XMYS number(10);
 	 		 var_XMWS number(10);
 	 		 CURSOR C_PCDM IS
			 select distincT a.pm_id from pcdm_singe_project a where id in (select d.sige_id from pcdm_period_chart d where d.is_complete ='0');
			 C_ROW C_PCDM%ROWTYPE; --定义游标变量,该变量的类型为基于游标C_EMP的记录  
			 CURSOR C_OFFICE IS
			 select distincT a.OFFICE_ID from pcdm_singe_project a where id in (select d.sige_id from pcdm_period_chart d where d.is_complete ='0');
			 C_ROW1 C_OFFICE%ROWTYPE; 
			 var_count1 number(10);
			 var_count2 number(10);
			 var_count3 number(10);
			 var_count4 number(10);
			 var_count5 number(10);
			 var_count6 number(10);
begin
	
	select sysdate into var_sysdate from dual;
	select TIME into var_XCWG from PCDM_TIME WHERE TYPE = 'XCWG'; 
	select TIME into var_DZT from PCDM_TIME WHERE TYPE = 'DZT'; 
	select TIME into var_JGZL from PCDM_TIME WHERE TYPE = 'JGZL'; 
	select TIME into var_CLPH from PCDM_TIME WHERE TYPE = 'CLPH'; 
	select TIME into var_DDYS from PCDM_TIME WHERE TYPE = 'DDYS'; 
	select TIME into var_DDQZ from PCDM_TIME WHERE TYPE = 'DDQZ'; 
	select TIME into var_XMJS from PCDM_TIME WHERE TYPE = 'XMJS';
	select TIME into var_CLPK from PCDM_TIME WHERE TYPE = 'CLPK';
	select TIME into var_XMYS from PCDM_TIME WHERE TYPE = 'XMYS';
	select TIME into var_XMWS from PCDM_TIME WHERE TYPE = 'XMWS';
	
	update PCDM_PERIOD_CHART set  DRAW_DAYS=ROUND((sysdate-COMPLETION_TIME),1),REMARKS=ROUND((sysdate-COMPLETION_TIME-var_DZT),1) where NODE='XCWG';
	
	update PCDM_PERIOD_CHART set  DATA_DAYS=ROUND((sysdate-DRAW_TIME),1) ,REMARKS=ROUND((sysdate-DRAW_TIME-var_JGZL),1) where NODE='DZT';
	update PCDM_PERIOD_CHART set  DATEEQUI_DAYS=ROUND((sysdate-DATA_TIME),1),REMARKS=ROUND((sysdate-DATA_TIME-var_CLPH),1)  where (NODE='JGZL' or NODE = 'DDYS' or NODE = 'DDQZ') and DATEEQUI_TIME is null;
	update PCDM_PERIOD_CHART set  ACCEPT_DAYS=ROUND((sysdate-DATA_TIME) ,1),REMARKS=ROUND((sysdate-DATA_TIME-var_DDYS),1) where (NODE='JGZL' or NODE = 'CLPH' or NODE = 'DDQZ') and ACCEPT_TIME is null;
	update PCDM_PERIOD_CHART set  VISA_DAYS=ROUND((sysdate-DATA_TIME),1),REMARKS=ROUND((sysdate-DATA_TIME-var_DDQZ),1)  where (NODE='JGZL' or NODE = 'CLPH' or NODE = 'DDYS') and VISA_TIME is null;
	
	update PCDM_PERIOD_CHART t set  SETTL_DATA_DAYS=ROUND((sysdate-(select greatest(DATEEQUI_TIME,ACCEPT_TIME,VISA_TIME)  from PCDM_PERIOD_CHART a where t.id=a.id)),1) 
	    ,REMARKS=ROUND((sysdate-(select greatest(DATEEQUI_TIME,ACCEPT_TIME,VISA_TIME)  from PCDM_PERIOD_CHART a where t.id=a.id)-var_XMJS),1) where 
			t.NODE = 'CLPH' or t.NODE = 'DDYS' or t.NODE = 'DDQZ' 
			and t.DATEEQUI_TIME is not null  and t.ACCEPT_TIME is not null AND t.DATEEQUI_TIME is not null;
			
	update PCDM_PERIOD_CHART set  DATA_FLAT_DAYS=ROUND((sysdate-SETTL_DATA_TIME),1),REMARKS=ROUND((sysdate-SETTL_DATA_TIME-var_CLPK),1) where NODE='XMJS';
	update PCDM_PERIOD_CHART set  PROJECT_ACCEPT_DAYS=ROUND((sysdate-DATA_FLAT_TIME),1),REMARKS=ROUND((sysdate-DATA_FLAT_TIME-var_XMYS),1)  where NODE='CLPK';
	update PCDM_PERIOD_CHART set  PROJECT_EXTADUI_DAYS=ROUND((sysdate-PROJECT_ACCEPT_TIME),1) ,REMARKS=ROUND((sysdate-PROJECT_ACCEPT_TIME-var_XMWS),1) where NODE='XMYS';
	
--删除当天记录  保证一天同一个人和部门只有一条记录
DELETE FROM PCDM_TIMEOUT_INFO t WHERE to_char(t.TIME,'yyyy-mm-dd') = to_char(sysdate,'yyyy-mm-dd');

--根据项目经理查询个数
	FOR C_ROW IN C_PCDM LOOP
	  	select count(*) into var_count1 from pcdm_period_chart a where a.REMARKS> -2 and a.REMARKS < -1 and a.sige_id in  (select id from pcdm_singe_project b where b.pm_id = C_ROW.pm_id);
	  	select count(*) into var_count2 from pcdm_period_chart a where a.REMARKS> -1 and a.REMARKS < 0 and a.sige_id in  (select id from pcdm_singe_project b where b.pm_id = C_ROW.pm_id);
	  	select count(*) into var_count3 from pcdm_period_chart a where a.REMARKS> 0 and a.REMARKS < 1 and a.sige_id in  (select id from pcdm_singe_project b where b.pm_id = C_ROW.pm_id);
	  	select count(*) into var_count4 from pcdm_period_chart a where a.REMARKS> 1 and a.REMARKS < 2 and a.sige_id in  (select id from pcdm_singe_project b where b.pm_id = C_ROW.pm_id);
	  	select count(*) into var_count5 from pcdm_period_chart a where a.REMARKS> 2 and a.REMARKS <3 and a.sige_id in  (select id from pcdm_singe_project b where b.pm_id = C_ROW.pm_id);
	  	select count(*) into var_count6 from pcdm_period_chart a where a.REMARKS> 3  and a.sige_id in  (select id from pcdm_singe_project b where b.pm_id = C_ROW.pm_id);
	  	
	  	insert into PCDM_TIMEOUT_INFO (ID,TYPE,USER_ID,OFFICE_ID,TWO_LATER_NUMS,ONE_LATER_NUMS,TIME_OUT,ONE_TIMEOUT_NUMS,TWO_TIMEOUT_NUMS,THR_MORE_TIMEOUT_NUMS,TIME) values(
			sys_guid(), 2, C_ROW.pm_id, null, var_count1, var_count2, var_count3, var_count4, var_count5, var_count6,sysdate);
	END LOOP;
	--根据部门查询个数
	FOR C_ROW1 IN C_OFFICE LOOP
	  	select count(*) into var_count1 from pcdm_period_chart a where a.REMARKS> -2 and a.REMARKS < -1 and a.sige_id in  (select id from pcdm_singe_project b where b.OFFICE_ID = C_ROW1.OFFICE_ID);
	  	select count(*) into var_count2 from pcdm_period_chart a where a.REMARKS> -1 and a.REMARKS < 0 and a.sige_id in  (select id from pcdm_singe_project b where b.OFFICE_ID = C_ROW1.OFFICE_ID);
	  	select count(*) into var_count3 from pcdm_period_chart a where a.REMARKS> 0 and a.REMARKS < 1 and a.sige_id in  (select id from pcdm_singe_project b where b.OFFICE_ID = C_ROW1.OFFICE_ID);
	  	select count(*) into var_count4 from pcdm_period_chart a where a.REMARKS> 1 and a.REMARKS < 2 and a.sige_id in  (select id from pcdm_singe_project b where b.OFFICE_ID = C_ROW1.OFFICE_ID);
	  	select count(*) into var_count5 from pcdm_period_chart a where a.REMARKS> 2 and a.REMARKS <3 and a.sige_id in  (select id from pcdm_singe_project b where b.OFFICE_ID = C_ROW1.OFFICE_ID);
	  	select count(*) into var_count6 from pcdm_period_chart a where a.REMARKS> 3  and a.sige_id in  (select id from pcdm_singe_project b where b.OFFICE_ID = C_ROW1.OFFICE_ID);
	  	
	  	insert into PCDM_TIMEOUT_INFO (ID,TYPE,USER_ID,OFFICE_ID,TWO_LATER_NUMS,ONE_LATER_NUMS,TIME_OUT,ONE_TIMEOUT_NUMS,TWO_TIMEOUT_NUMS,THR_MORE_TIMEOUT_NUMS,TIME) values(
			sys_guid(), 1, NULL, C_ROW1.OFFICE_ID, var_count1, var_count2, var_count3, var_count4, var_count5, var_count6,sysdate);
	END LOOP;


end PCDMTIMEPRO;



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值