create procedure njutec_wdtjpc01
(
@rExeStartDate varchar(8), --统计开始时间 eg:20140101
@rExeEndDate varchar(8), --统计结束时间 eg:20140701
@rType int --统计对象 3:网点排查 2:网管员排查 1:市行排查 0:省行排查
)
AS
DECLARE
@sts varchar(20), --条件参数
@pcsts varchar(20), --插入结果表 数据值
@jzsj varchar(20), --截止时间 月份
@maxId int
declare @error int
declare @temp0 varchar(50) --临时变量,用来保存游标值
declare @temp1 varchar(50) --临时变量,用来保存游标值
declare @temp2 int --临时变量,用来保存游标值
declare @temp3 int --临时变量,用来保存游标值
declare @temp4 int --临时变量,用来保存游标值
declare @temp5 int --临时变量,用来保存游标值
declare @temp6 int --临时变量,用来保存游标值
declare @temp7 int --临时变量,用来保存游标值
BEGIN
set @jzsj = substring(@rExeEndDate,1,6)
if @rType = 3 --网点排查
begin
set @sts= '1' --参数
set @pcsts='3'
end
else if @rType = 2 --网管部排查
begin
set @sts= '0'
set @pcsts='2'
end
else if @rType = 1 --市行排查
begin
set @sts='99'
set @pcsts='1'
end
else if @rType = 0 --省行排查
begin
set @sts= '00'
set @pcsts='0'
end
set @error=0
--清理重复数据
delete from STD_PC_WDPCTJ01 WHERE tjtype = @pcsts and jzsj = @jzsj
BEGIN TRAN --声明事务
--定义游标
declare first_cursor CURSOR FOR select a.ORGID,a.NAME,isnull(b.totalPsn,0) totalPsn,
isnull(c.leaders,0) leaders,isnull(b.totalPsn-c.leaders,0) as others,
isnull(d.totalimp,0) totalimp,isnull(pcTotalPsns,0) pcTotalPsns,
isnull(f.pcTotalTimes,0) pcTotalTimes
from
(select ORGID,NAME from PLT_ORG_DEPT where DEPTTYPE='1' and ORGID like 'A%' and NETSTYP = '1' and STATE='0' and ISDEPT='0') a
left join (select ORGID,count(*) as totalPsn from EMP_ORG_REL where STS = '0' and PREF = '1' group by ORGID) b --totalPsn网点总人数
on a.ORGID=b.ORGID
left join
(select count(*) as leaders,e.ORGID from
(select c.STFID ,d.ORGID from (select STFID from STD_SJ_POS where POSITION in('01','02','03','04') and ISEFFECT = '0') c left join (SELECT EMPCOD,ORGID from EMP_ORG_REL where STS = '0' and PREF = '1' ) d on c.STFID = d.EMPCOD) e
group by e.ORGID ) c --leaders 领导班子
on a.ORGID = c.ORGID
left join
(select count(*) as totalimp, j. ORGID from(
select h.STFID,i.ORGID from (
(select g.STFID from STD_SJ_IMP g where g.ISIMP = '1' and ( g.IMPBGNTIM >= @rExeStartDate OR g.IMPENDTIM <= @rExeEndDate)) h
left join EMP_ORG_REL i on h.STFID = i.EMPCOD) ) j group by j.ORGID ) d on a.ORGID = d.ORGID
left join
(select count(*) as pcTotalPsns,m.ORGID from
(SELECT PCJLBPCR FROM dbo.STD_SJ_PCJL where PCJLTYPE = @sts and PCJLPCRQ >= @rExeStartDate and PCJLPCRQ <= @rExeEndDate
group by PCJLBPCR) l
left join EMP_ORG_REL m on l.PCJLBPCR = convert(varchar,m.EMPID) group by m.ORGID) e --排查人数
on a.ORGID = e.ORGID
left join
(select count(aaa.pcTotalTimes) pcTotalTimes,aaa.PCJLBPCRORG as ORGID from
(SELECT count(*) pcTotalTimes,PCJLBPCRORG FROM dbo.STD_SJ_PCJL where PCJLPCRQ >= @rExeStartDate and PCJLPCRQ <= @rExeEndDate and PCJLTYPE = @sts group by PCJLPCRQ,PCJLPCFS,PCJLPCR,PCJLBPCRORG) aaa group by aaa.PCJLBPCRORG) f --排查次数
on a.ORGID = f.ORGID
open first_cursor
FETCH NEXT FROM first_cursor INTO @temp0,@temp1,@temp2,@temp3,@temp4,@temp5,@temp6,@temp7
WHILE @@FETCH_STATUS = 0
--返回被 FETCH 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。
begin
--开始循环游标变量
select @maxId=isnull(max(numid),0)+1 from STD_PC_WDPCTJ01
insert into STD_PC_WDPCTJ01(numid,orgid,name,totalpsn,leaders,others,totalimp,pctotalpsns,pctotaltimes,jzsj,tjtype) values (@maxId,
@temp0,@temp1,@temp2,@temp3,@temp4,@temp5,@temp6,@temp7,@jzsj,@pcsts)
set @error=@error+@@error
FETCH NEXT FROM first_cursor INTO @temp0,@temp1,@temp2,@temp3,@temp4,@temp5,@temp6,@temp7
end
if @error=0 --没有错误 统一提交事务
begin
commit tran --提交
end
else
begin
rollback tran --回滚
end
CLOSE first_cursor --关闭游标
DEALLOCATE first_cursor --释放游标
END
相关推荐
SAP HANA是一个高性能的内存数据库系统,它提供了一系列功能强大的工具来进行数据分析、应用开发、存储过程编写等操作。其中,对于存储过程的调试是开发者日常开发工作中的一个重要环节,SAP HANA为存储过程提供了...
在IT领域,尤其是在数据库管理与优化中,存储过程的解锁是一项关键技能,尤其对于Oracle数据库而言。当存储过程被锁定时,可能会影响系统的性能和稳定性,因此掌握如何解锁存储过程至关重要。以下是对“oracle存储...
SqlServer存储过程及调试指南的知识点如下: 1. 存储过程概念:存储过程是一组为完成特定功能的SQL语句集,这些语句经过编译后存储在数据库中,供用户通过指定存储过程名和参数(如有)来执行。存储过程被称作...
SQL存储过程试题及答案 SQL存储过程是数据库中的一种程序单元,能够完成特定的数据库操作。今天,我们将讨论三道关于SQL存储过程的试题,这些试题涵盖了存储过程的创建、调用和参数传递等方面。 1. 创建分数存储...
在IT行业中,数据库操作是日常开发中的重要环节,而存储过程是数据库中一种高效、封装性强的预编译语句集合。本问题涉及到的是在PowerBuilder(简称Pb)环境中如何调用Oracle或SQL Server等数据库中的存储过程。以下...
在SQL Server中,存储过程分为不同种类,包括用户定义的存储过程、系统存储过程、临时存储过程以及扩展存储过程。 1. **用户定义的存储过程**:由开发人员或DBA创建,可以根据业务需求定制各种复杂操作,如数据处理...
PL/SQL Developer 调试存储过程及调试包中创建的存储过程 PL/SQL Developer 调试存储过程是指使用 PL/SQL Developer 工具来调试 Oracle 数据库中的存储过程。调试存储过程可以帮助开发者快速地定位和解决存储过程...
### 存储过程的优点 #### 一、提升执行效率 1. **编译优势**:存储过程在创建时仅编译一次,之后每次执行时都无需再次编译。相比之下,一般的SQL语句每次执行都需要重新编译。这种差异使得存储过程能够显著提高...
MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列SQL语句并封装成一个可重复使用的单元,从而提高数据处理的效率和代码的复用性。本教程将深入探讨MySQL存储过程的创建、调用以及相关概念...
本文将从 Oracle 存储过程的基础知识开始,逐步深入到 Oracle 存储过程的高级应用,包括 Hibernate 调用 Oracle 存储过程和 Java 调用 Oracle 存储过程的方法。 Oracle 存储过程基础知识 Oracle 存储过程是 Oracle...
内容概要:简单的C# winform调用存储过程实例,创建存储过程入参,通过SqlConnection对象和SqlCommand对象调用存储过程,获取存储过程的出参并显示出来,详细代码注释,希望对用到C#调用存储过程的小伙伴有帮助 ...
在MySQL中,存储过程是一种预编译的SQL代码集合,它可以执行复杂的操作并提供更好的性能。在编写存储过程时,异常处理是确保程序稳定性和健壮性的重要环节。本实例展示了如何在MySQL存储过程中实现异常处理,以捕获...
《用友R9知识存储过程详解》 在IT行业中,特别是在企业级财务系统中,数据库的高效管理和数据处理是至关重要的。用友R9作为一款先进的财务管理系统,它利用存储过程这一强大的数据库功能来优化账务处理,提高系统...
在数据库管理中,存储过程和触发器是两个重要的概念,它们极大地增强了数据库的功能和效率。存储过程是一组预先编写的SQL语句,可以被多次调用,减少了网络流量,提高了性能,并提供了更好的安全性。而触发器则是一...
### ASP与SQL存储过程详解 #### 一、存储过程简介 存储过程(Stored Procedures)是一种在数据库中预先定义并编译好的SQL语句集合。它能够实现特定功能,并且可以在多处被调用,以此来简化复杂的数据库操作,提高...
存储过程文档--MySQL 存储过程是 MySQL 中的一个强大功能,它允许用户预先将常用的或复杂的工作写入 SQL 语句,并将其存储起来,以便在以后的数据库操作中可以快速调用和执行。存储过程可以提高数据库的执行速度,...
在Oracle数据库环境中,事务管理与存储过程的结合是实现数据一致性、事务回滚以及错误处理的关键技术之一。本文将深入探讨“Oracle事务回滚存储过程”这一主题,旨在理解其核心概念、工作原理以及实际应用。 ### ...
本篇文章将深入探讨如何对PostgreSQL的存储过程进行调试,这对于优化数据库性能和解决复杂问题至关重要。 PostgreSQL的存储过程是由一系列SQL语句组成的代码块,可以被多次调用并执行,类似于编程语言中的函数。...