`
zhouxin464585932
  • 浏览: 80484 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

存储过程与游标 结合在一起使用

 
阅读更多


--drop proc insertpostcode

create proc insertpostcode (
@districtname nvarchar(50),--地区名称
@provincename nvarchar(50),--省名
@districtpostcode varchar(20)--邮编号码
)
as
declare @districtcode varchar(20)--地区编号
--给地区编号赋值
set @districtcode=(select distinct districtcode from district where citypostcodeid in(
select citypostcodeid from city where provincepostcode in(
select provincepostcode from province where provincename=@provincename)
)
and districtname=@districtname )
--城市编号
declare @citypostcodeid varchar(20)
--给城市编号赋值
set @citypostcodeid=(select distinct citypostcodeid from district where citypostcodeid in(
select citypostcodeid from city where provincepostcode in(
select provincepostcode from province where provincename=@provincename)
)
and districtname=@districtname)
--地区编号不为空。说明存在此地区
if( @districtcode!='')
BEGIN
--记录总数
DECLARE @count int
SET @count=(SELECT count(*) FROM district WHERE district.districtpostcode=@districtpostcode)
--PRINT @count
--说明此邮编在数据中不存在
IF(@count=0)
begin
--插入到district 表中
insert into district values(@districtpostcode,@districtcode,@districtname,@citypostcodeid,0,0,null,null,null,null,null)
select * from district where districtpostcode =@districtpostcode
--areassign 下插入新的记录
DECLARE @areacount int
SET @areacount=(SELECT count(*) FROM areaassign WHERE districtpostcode IN(
SELECT district.districtpostcode
FROM district
WHERE district.districtname=@districtname))
--PRINT @areacount
IF(@areacount!=0)--已经分配
begin
declare @provinceid varchar(20) --省邮编
DECLARE @areaid varchar(10) --区域编号
declare @sellerid varchar(10) --所属销售人员
declare @rankid varchar(10) --级别
declare @groupid varchar(10) -- 组编号
declare kk cursor for
SELECT TOP 1 areaassign.provincepostcode,areaassign.areaid,areaassign.sellerid,rankid,groupid
FROM areaassign
WHERE districtpostcode
IN
(
SELECT district.districtpostcode
FROM district
WHERE district.districtname=@districtname
)
open kk
fetch next from kk into @provinceid,@areaid ,@sellerid,@rankid,@groupid
while @@fetch_status=0
begin
fetch next from kk into @provinceid,@areaid ,@sellerid,@rankid,@groupid
--PRINT @provinceid
-- PRINT @areaid
-- PRINT @sellerid
-- PRINT @rankid
-- PRINT @groupid
INSERT INTO areaassign
(
--assignareaid,
provincepostcode,
citypostcodeid,
districtpostcode,
areaid,
sellerid,
technicianid,
remark,
isdeleted,
createtime,
createby,
updatetime,
updateby,
rankid,
groupid
)
VALUES
(
@provinceid,
@citypostcodeid,
@districtpostcode,
@areaid,
@sellerid,
NULL,
NULL,
0,
getdate(),
NULL,
getdate(),
NULL,
@rankid,
@groupid
)
end
close kk
deallocate kk
end
else --还没有分配
BEGIN
PRINT @districtname +'未分配'


end
--插入到areassign 表中结束
--插入到areadetails 表中开始
declare @areadetailscount int--总数
set @areadetailscount =(select count(*) from areadetails where citypostcodeid=@citypostcodeid)
print @areadetailscount

if(@areadetailscount!=0)
begin
declare @provin varchar(10)
DECLARE @aareaid varchar(10)
DECLARE @agroupid varchar(10)
declare areadetailscur cursor for
select top 1 provincepostcode,areaid,groupid from dbo.areadetails where citypostcodeid=@citypostcodeid
open areadetailscur
fetch next from areadetailscur into @provin,@aareaid,@agroupid
while @@fetch_status=0
begin
fetch next from areadetailscur into @provin,@aareaid,@agroupid
INSERT INTO areadetails
(
--areadetailsid,
provincepostcode,
citypostcodeid,
districtpostcode,
areaid,
remark,
isdeleted,
createtime,
createby,
updatetime,
updateby,
groupid
)
VALUES
(
@provin,
@citypostcodeid,
@districtpostcode,
@aareaid,
null,
0,
getdate(),
null,
getdate(),
null,
@agroupid
)
end
close areadetailscur
deallocate areadetailscur
end
else
begin
PRINT @districtname +'未分配'
end

END
ELSE
BEGIN
PRINT @districtpostcode+'邮编已经存在'
END
end
else
begin
print @districtname+ '区域不存在'
end

--exec insertpostcode '滨湖区','江苏省','214066'


--delete from district where districtpostcode='214066'
--DELETE FROM areaassign WHERE districtpostcode='214066'
--DELETE FROM areadetails WHERE districtpostcode='214066'
--select * from district where districtname='江苏省'

--SELECT * FROM areaassign WHERE districtpostcode='410083'
--SELECT * FROM areaassign WHERE citypostcodeid='410083'

--SELECT * FROM areadetails WHERE districtpostcode='410083'
--SELECT * FROM areadetails WHERE citypostcodeid='214000'
--SELECT * FROM district WHERE district.districtpostcode='410083'
--SELECT * FROM district WHERE district.districtname='岳麓区'

分享到:
评论

相关推荐

    存储过程和游标详解

    它允许开发者将一系列SQL语句和控制流语句组合在一起,封装为一个可重用的单元,以增强数据操作的安全性、效率和复杂度。 ##### 定义: 存储过程是预编译的一系列SQL语句集合,存储在数据库中,并以一个特定的名字...

    过程和游标实验.rar

    1. **定义与用途**:过程是一组预编译的SQL语句,它们封装在一起,形成一个可重用的代码块。在需要执行多次相同或类似操作时,过程可以提高效率,减少代码重复,并提高代码的可维护性。 2. **创建与调用**:在...

    mysql存储过程 游标 循环使用介绍

    在存储过程中,游标和循环是非常重要的组成部分,它们经常被一起使用来处理数据集。游标允许我们逐行处理查询结果,而循环结构则使得我们能够根据特定条件重复执行某段代码。 1. 游标(Cursor): 游标提供了一种...

    ORACLE存储过程,函数,包,游标

    包是Oracle中一种高级的组织形式,它可以将相关的存储过程和函数封装在一起,形成一个逻辑单元。包包含两个部分:包规范(定义公共接口,即过程和函数的声明)和包体(实现这些接口的具体代码)。使用包可以更好地...

    数据库游标练习

    在Oracle中,游标通常与PL/SQL块(如过程、函数或匿名块)一起使用。 2. **游标的分类** - 显式游标:需要显式声明、打开、读取、关闭等步骤,适用于更复杂的数据处理。 - 隐式游标:由系统自动管理,每次DML操作...

    oracle游标的使用

    首先,当我们执行一个SELECT语句时,通常会与INTO子句一起使用,以便将查询结果存储到预先声明的变量中。例如,如果我们有一个名为`SCOTT.EMP`的表,我们可以声明一个变量`v_empno`,并使用以下语法来获取某员工的...

    PLSQL操作存储过程、函数、游标、触发器、定时任务等实例SQL脚本.zip

    1. **存储过程**:存储过程是一组预编译的SQL语句,它们封装在一起,可以作为一个单元进行调用。在Oracle中,创建存储过程可以提高性能,减少网络流量,并提高代码的安全性。通过存储过程,开发者可以实现复杂的业务...

    单位写的11个优秀存储过程

    在数据库管理领域,存储过程是预编译的SQL语句集合,它们被封装在一起,以供重复使用。存储过程能够提高数据库性能、增加安全性、减少网络流量,并且提供了一种组织和模块化代码的方法。本篇文章将深入探讨存储过程...

    Oracle 游标使用

    在PL/SQL中,当与INTO子句一起使用时,SELECT语句会将查询结果存储到指定的变量或记录中。例如: ```sql DECLARE v_empno SCOTT.EMP.EMPNO%TYPE; v_salary EMP.SALARY%TYPE; BEGIN SELECT EMPNO, SALARY INTO v...

    存储过程详解和实例分析

    ### 存储过程详解与实例分析 #### 一、存储过程概述 存储过程是一种预编译的SQL...通过以上示例可以看出,合理地使用存储过程和游标可以帮助我们更高效地处理数据库中的数据,并且可以提高程序的可维护性和扩展性。

    存储过程精妙语句初学精通

    - 存储过程可以与视图一起使用,创建动态视图,提供更灵活的数据展示方式。 - 触发器可以与存储过程配合,实现数据修改时的自动响应。 12. **存储过程的版本控制**: - 在开发环境中,可以使用版本控制系统跟踪...

    ORACLE 游标

    隐式游标通常与DML语句一起使用,用来获取执行状态信息,例如受影响的行数。以下是一个简单的例子: ```sql DECLARE v_new_salary NUMBER := 5000; BEGIN UPDATE emp SET sal = v_new_salary WHERE deptno = 20; ...

    MySQL存储过程.pdf

    13. **视图与存储过程的结合**:存储过程可以与视图一起使用,创建复杂的业务逻辑视图,提供给用户更加友好的接口。 综上所述,“MySQL存储过程.pdf”这份文档可能会详细解释以上各个知识点,并通过实例展示如何在...

    面向 海量 分布式数据库 游标构造.7z

    7. **分布式的游标状态管理**:在分布式数据库中,游标的状态需要在所有相关节点间同步,以确保在不同节点上进行的操作能够正确地结合在一起。 综上所述,面向海量分布式数据库的游标构造是一项复杂的任务,需要...

    15.sql.server.2005.存储过程 15.sql.server.2005.存储过程

    存储过程可以与视图一起使用,创建动态视图,或者在视图上执行复杂的业务逻辑。 11. **存储过程的优化**: 通过合理使用临时表、优化查询语句、避免不必要的数据转换等方式,可以进一步提升存储过程的执行效率。 ...

    使用MYSQL5创建存储过程procedure

    在MySQL5中,存储过程(Procedure)是一种非常重要的数据库编程元素,它允许用户预先定义一组SQL语句并将其封装在一起,以便在需要时作为一个单元执行。这样不仅可以提高代码的复用性,还可以优化数据库操作的效率,...

    数据库存储过程的报告

    数据库存储过程是数据库管理系统中一组预编译的SQL语句,它们封装在一起,可以作为一个单元进行执行,提供了更高效的数据处理方式。存储过程在数据库设计和开发中扮演着重要角色,因为它们能够提高性能,减少网络...

    存储过程的语法

    存储过程也可以使用游标(Cursor)来逐行处理结果集,虽然这可能影响性能,但在某些情况下是必要的。 ### 9. 触发器与存储过程的结合 存储过程可以和触发器一起使用,当特定的数据库操作(如 INSERT, UPDATE, ...

    MYSQL存储过程技术(ppt文档).ppt

    * 存储过程可以将复杂操作封装起来与数据库提供的事务处理结合一起使用。 * 存储过程可以重复使用,减少数据库开发人员的工作量。 * 存储过程的安全性高,可以设定只有某些用户才具有对指定存储过程的使用权。 基本...

Global site tag (gtag.js) - Google Analytics