数据库实验九 存储过程(新)第5关:使用游标的存储过程

任务描述

本关任务: jdxx数据表有四个字段,分别是省份(sf)、城市(cs)、区县(qxmc)、街道(name)。 例如,查询天心区(qxmc)的所有字段的值结果如图所示

,

任务要求

建立存储过程 tjdq(in sf varchar(10)) 输入省份的名称,将该省份所有城市的所有地区的 乡x、镇z和街道jd和其他的个数插入到数据表dqtj中。 dqtj数据表已经建立在数据库中,有城市(cs),区县名称(qxmc)、县(x)、街道(jd)、镇(z)、其他(qt)六个字段。分别存储指定省份的城市、区县名称和县、街道、镇、其他的个数。 以湖南省为参数,调用tjdq过程后 dqtj数据表部分数据如图所示

,

调用过程 以安徽省为参数,调用过程

提示:该过程先要删除dqtj数据表的所有数据 然后将指定省份的城市和区县的唯一信息值存入游标 然后将游标的各条信息依次取出循环,根据游标中的城市和区县名称,在jdxx数据表查出对应的乡、街道、镇和其他的个数,然后插入到dqtj数据表。

相关知识

声明游标

命令格式: DECLARE 游标名 CURSOR FOR select语句

打开和关闭游标

命令格式: open 游标名 close 游标名

读取游标信息

命令格式: FETCH 游标名 INTO var1,var2[,…] 将游标声明时的查询结果逐条存放在变量中 每执行一次fetch将指针指向下一条结果 变量必须在声明游标前定义

遍历游标

use province;
#代码开始
delimiter $$
create procedure tjdq(in sm varchar(10))
begin
    declare flag int default 1;
    declare city varchar(10);
    declare qx varchar(10);
    declare jd int;
    declare x int;
    declare z int;
    declare qt int;
    declare dq cursor for select distinct cs, qxmc from jdxx where sf = sm;
    declare continue handler for not found set flag = 0;
    delete from dqtj;
    open dq;
        fetch dq into city, qx;
        while flag = 1 do
            select count(*) from jdxx where cs = city and qxmc = qx and name like "%街道" into jd;
            select count(*) from jdxx where cs = city and qxmc = qx and name like "%乡" into x;
            select count(*) from jdxx where cs = city and qxmc = qx and name like "%镇" into z;
            select count(*) from jdxx where cs = city and qxmc = qx and name not like "%镇" and name not like "%街道" and name not like "%乡" into qt;
            insert into dqtj values(city, qx, x, jd, z, qt);
            fetch dq into city, qx;
        end while;
    close dq;
end $$
delimiter ;
call tjdq("安徽省");
#代码结束
select * from dqtj;
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SQL Server 中的游标是一种特殊的工具,可以用于在存储过程中逐行处理结果集。游标可以将结果集的行视为单独的数据单元,并允许在这些行上进行迭代处理。 举个例子,假设你有一张表,表中有许多用户订单记录。你想要写一个存储过程来遍历每一条记录,并对每一条记录执行相同的操作。你可以使用游标来实现这个目的。 游标有两种类型:静态游标和动态游标。静态游标在定义时就将结果集载入内存中,然后在内存中进行遍历。动态游标则是在执行时才载入结果集,并且在遍历过程中不会将数据载入内存。 使用游标的时候,需要注意一些注意事项: - 游标操作是资源密集型操作,应该尽量避免使用游标。在大多数情况下,使用 SET 操作或者 JOIN 操作可以达到同样的目的。 - 如果必须使用游标,应该尽量避免使用动态游标。静态游标在执行时更加高效。 - 在使用游标时,应该注意避免数据竞争的情况发生,因为游标操作可能导 ### 回答2: SQL Server中的游标是一种用于处理查询结果集的数据库对象。它可被看作是一个指向结果集中当前行的指针,并能够在结果集中移动以逐行处理数据。 游标存储过程使用的好处是可以处理一些复杂的业务逻辑,例如需要在多个表之间进行数据的逐行处理、更或删除操作等。使用游标可以实现对结果集中的每一行进行逐个处理,同时还能够在需要时控制游标的移动和操作。 游标使用过程通常包括以下几个步骤: 1. 声明游标:在存储过程中先声明一个游标变量,并指定查询语句以获取结果集。 2. 打开游标使用OPEN语句打开游标,使其指向结果集的第一行。 3. 取得数据:使用FETCH语句获得当前游标所指向的行的数据,并进行相应的处理操作。 4. 移动游标使用FETCH NEXT语句将游标移动到结果集中的下一行,以便后续处理。 5. 游标使用CLOSE语句游标,释放相应的资源。 6. 释放游标使用DEALLOCATE语句释放游标所占用的内存。 需要注意的是,在使用游标时应尽量避免使用全局游标,并在处理完每一行数据后及时闭和释放游标以节省资源的占用。 总而言之,SQL Server中的游标是一种用于处理查询结果集的工具,能够以逐行的方式对结果集中的数据进行处理操作,以满足复杂的业务需求。 ### 回答3: SQL Server存储过程中的游标是用于处理查询结果集的一种指针机制。它允许我们按行处理查询结果,让我们可以在结果集上进行循环操作。 游标存储过程中的使用需要以下几个步骤:首先,声明一个游标并将其与一个SELECT语句相联;然后,打开游标并将其绑定到查询结果集;接下来,通过FETCH语句将游标定位到结果集中的某一行,并可以在该行上进行操作;最后,当我们不再需要游标时,需要游标以释放资源。 存储过程中的游标可以用于各种目的,例如逐行处理结果集、在结果集中进行搜索、进行数据的插入、更或删除等。但是,由于游标的操作需要占用内存和执行时间,过度使用游标可能会导致性能问题。因此,在使用游标时,需要注意控制结果集的大小,并合理优化游标使用。 总之,SQL Server存储过程中的游标是一种用于按行处理查询结果集的机制。它可以在存储过程中对结果集进行循环操作,提供了一种灵活而强大的处理数据的方式。但是,需要注意合理使用游标,以避免可能的性能问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值