数据库sql语句-----游标和存储过程

news2025/2/28 20:21:28

关键词:

create procedure xxx()as.......go

查询: exec  ...

从例子中感悟一下:

create table cartoon(
linenum int,
name varchar(50) not null,
line varchar(100) not null
)


insert into cartoon values(1,'灰太狼','我一定会回来的!')
insert into cartoon values(2,'老爹','妖魔鬼怪快离开,妖魔鬼怪快离开')
insert into cartoon values(3,'胡图图','看我的动耳神功')
insert into cartoon values(4,'小智','就决定是你了,妙蛙种子!')
insert into cartoon values(5,'不二周助','正因为我看不见,所以才能赢')
insert into cartoon values(6,'大头儿子','大头大头下雨不愁,人家有伞,我有大头。')

创建如下表:

回顾一下之前是怎么创建游标的:

输出以下格式:序号:+名字+‘说’+经典台词

declare @name varchar(10),@num int,@linetext varchar(50)
declare word_cursor cursor    -----定义游标
for
	select name,line from cartoon -----name和line两个变量参与游标移动过程

set @num=1
open word_cursor 
fetch next from word_cursor into @name,@linetext
while @@FETCH_STATUS = 0
begin
	print cast(@num as varchar(10)) +':'+@name+'说:'+@linetext
	fetch next from word_cursor into @name,@linetext    -----移动游标
	set @num=@num+1   ------记录游标移动的行数
end
close word_cursor
deallocate word_cursor

得到

例题要求:若句子结尾没有‘,(逗号)‘!’(感叹号)‘。’(句号)‘?’(问号),则为其统一加上。

这里需要用到内嵌函数:right(x,y):不熟悉内嵌函数,可以认真看下:

http://t.csdn.cn/oC845

可更新的游标: 

declare @num int,@linetext varchar(50)
declare line_cursor cursor
for
	select line from cartoon for update;---------for update
set @num=1
open line_cursor
fetch next from line_cursor into @linetext
while @@FETCH_STATUS=0
begin
	if(right(@linetext,1) not in(',','。','!','?'))
    update cartoon set line =@linetext+'。' where current of line_cursor
	fetch next from line_cursor into @linetext
	set @num=@num+1
end
close line_cursor
deallocate line_cursor

得到:

 注意:这里是update,如果想要重新编写代码,可以

drop table cartoon

再将上面的创建和插入语句运行一遍

 进入正题:存储过程的建立:

例题要求: exec n:输出1到n的语句

create procedure ShowCartoon(
 @v_linenum varchar(100) output    -------v_linenum表示需要输出的语句个数
) 
as
begin
declare @linetext varchar(100);
declare line_cursor cursor for
	select line from cartoon
	where linenum<=@v_linenum
    order by linenum;
	open line_cursor
	fetch next from line_cursor into @linetext
	while @@FETCH_STATUS=0
	begin
		print @linetext;
		fetch next from line_cursor into @linetext;
    end
	close line_cursor
	deallocate line_cursor;
end
go

输入

exec ShowCartoon 3

得到

注:如果想直接修改,他会提示你“数据库已存在名为“xxx”的对象”

drop procedure ShowCartoon

再此运行编写后的代码就行

例题2要求:输出

第一个动画片段:

xxxxxx

xxxxxx(两句话)

方法1:

create procedure ShowCartoon2
as
	declare @linetext varchar(100);
	declare @num int;
	declare @num2 int;
	declare @name varchar(30);
	set @num2=1
	declare cursor_linetext cursor 
    for
	select name,line from cartoon
    order by linenum;
	open cursor_linetext
	fetch next from cursor_linetext into @name,@linetext;
	while @@FETCH_STATUS=0
	begin
		print '第'+cast(@num2 as varchar)+'个动画片段:'
		set @num=1
		while(@num<=2)
		begin
		print @name+'说:'+@linetext
		fetch next from cursor_linetext into @name,@linetext;
		set @num=@num+1
		end
		set @num2=@num2+1
	end
	close cursor_linetext;
	deallocate cursor_linetext;
go

 调用存储过程

exec ShowCartoon2

得到:

方法2:

create procedure ShowCartoon2
as
    declare @linenum int;
	declare @linetext varchar(100);
	declare @name varchar(30);
	declare cursor_linetext cursor 
    for
	select linenum,name,line from cartoon
    order by linenum;
	open cursor_linetext
	fetch next from cursor_linetext into @linenum,@name,@linetext;
	while @@FETCH_STATUS=0
	begin
        if @linenum%2=1
        begin
		    print '第'+cast((@linenum+1)/2 as varchar(5))+'个动画片段:'
            print @name+'说:'+@linetext
		end
        else
        begin
           print @name +'答:'+@linetext
           print '' 
        end
        fetch next from cursor_linetext into @linenum,@name,@linetext;
	end
	close cursor_linetext;
	deallocate cursor_linetext;
go

记得先drop procedure ShowCartoon,再

exec ShowCartoon2
得到

建立存储过程 2 ,在存储过程 2 中调用存 储过程 1
这个例子不好举例,我们建立这样一张表,建表过程忽略:

 建立存储过程:

CREATE PROCEDURE SanGuoHuman(
 @v_name VARCHAR(20) OUTPUT
)
AS
BEGIN
 DECLARE @name VARCHAR(20);
 DECLARE @mypower int;
 DECLARE @weapon VARCHAR(20);
 DECLARE @horse VARCHAR(20);
 DECLARE @birthyear int;
 DECLARE sanguo_cursor CURSOR FOR
 SELECT name, mypower, weapon, horse, birthyear from SanGuo
 WHERE name = @v_name;
 
 OPEN sanguo_cursor;
 FETCH NEXT FROM sanguo_cursor INTO @name, @mypower, @weapon, @horse, @birthyear;
 
 WHILE @@FETCH_STATUS = 0
 BEGIN
 PRINT '姓名:'+@name;
 PRINT '武力:' + CAST( @mypower AS VARCHAR );
 PRINT '兵器:' + @weapon;
 PRINT '坐骑:' + @horse;
 PRINT '出生年份:公元' + CAST( @birthyear AS VARCHAR );
 PRINT ' ';
 FETCH NEXT FROM sanguo_cursor INTO @name, @mypower, @weapon, @horse, @birthyear;
 END
 CLOSE sanguo_cursor;
 DEALLOCATE sanguo_cursor;
END
GO
调用
EXEC sanguohuman '刘备';

得到:

调用这一存储过程

CREATE PROCEDURE SanGuoBrother
AS
 DECLARE @name VARCHAR(20);
 DECLARE cursor_human CURSOR FOR
 SELECT name FROM SanGuo ORDER BY birthyear ASC;
BEGIN
 OPEN cursor_human;
 FETCH NEXT FROM cursor_human INTO @name;
 WHILE @@FETCH_STATUS = 0
 BEGIN
 exec SanGuoHuman @name;     ------调用存储过程1
 FETCH NEXT FROM cursor_human INTO @name; 
 END
 
 CLOSE cursor_human;
 DEALLOCATE cursor_human;
END
GO

EXEC SanGuoBrother;

讲存储过程1的形式扩展到存储过程2,使得存储过程代码看起来更加简洁

得到:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/557044.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SpringBoot+Vue+MybatisPlus的智慧校园系统

智慧校园系统 1. 项目简介2. 项目模块3. 技术栈4. 软件环境4.1 安装数据库4.2 安装数据库客户端Navicat工具4.4 安装IDEA4.4 安装Maven 5. 系统页面5.1 首页登录页5.2 系统功能模块5.3 Swagger2接口文档查阅5.4 运行截图 6. 源代码下载 1. 项目简介 智慧校园管理系统是一个基于…

从零开始Vue3+Element Plus后台管理系统(十三)——富文本编辑器、Markdown编辑器、代码编辑器

早就想着要放几个编辑器的Demo到项目中&#xff0c;这也是项目开始就立下的flag。 今天专门挑选了几款主流编辑器&#xff0c;包括绕不开的富文本编辑器&#xff0c;码农最爱的markdown编辑器&#xff0c;还有用途相对少的代码编辑器。 时间有限的情况下&#xff0c;仅引入4个…

去哪儿酒店数据下载

字段内容包含&#xff1a; id int(11) NOT NULL AUTO_INCREMENT, hotelid varchar(50) DEFAULT NULL, url varchar(200) DEFAULT NULL, hotelname2 varchar(100) DEFAULT NULL, name varchar(100) DEFAULT NULL, province varchar(50) DEFAULT NULL, d…

zabbix安装完成后,无法找到zabbix/bin目录

问题 zabbix安装完成后&#xff0c;无法找到zabbix/bin目录 详细问题 笔者安装zabbix后&#xff0c;自定义item key进行测试。需在zabbix-server 端 切换目录&#xff1a; cd /usr/local/zabbix/bin 执行查询命令&#xff1a; ./zabbix_get -s 192.168.174.132 -p 10050 -k …

Bat批处理中的 FINDSTR用法

linux中的grep等同于win中的findstr命令。可以在txt文本中截取到有特定关键字的行&#xff0c;并显示出来。 grep也可以通过关键字&#xff0c;在一个文件夹下查找多个有这些关键字的文件&#xff0c;并生成结果。 一、findstr命令介绍 findstr是Windows系统自带的命令,简单来说…

chatgpt赋能Python-python_end的用法

简介 Python是一种广泛使用的编程语言&#xff0c;被广泛应用于数据科学&#xff0c;机器学习&#xff0c;网络编程&#xff0c;Web开发等领域。Python内置了许多有用的操作符和关键字&#xff0c;其中包括end。end是Python中一个非常有用的操作符&#xff0c;它可以在将多个输…

C001--Visual C++ 6.0集成开发环境的下载与安装并运行简单的C语言程序

visual c的下载安装过程不复杂&#xff0c;只需要运行setup.exe程序&#xff0c;然后按照安装程序的提示信息进行操作&#xff0c;也可以指定系统文件存放的路径。 目录 一&#xff0c;下载安装集成开发环境 1&#xff0c;流程 2&#xff0c;熟悉visual c工作界面 二&am…

Element-UI介绍:主题定制、自定义组件和插件扩展

部分数据来源&#xff1a;ChatGPT 什么是Element-UI Element-UI是一款简单好用的前端UI库&#xff0c;基于Vue.js开发。它提供了常用的组件和样式&#xff0c;可以帮助我们快速地构建美观、实用的交互界面。 在使用Element-UI开发项目过程中&#xff0c;我们有时遇到了一些特…

chatgpt赋能Python-python_dim

Python dim&#xff1a;将维度降至极致 在机器学习和数据分析领域&#xff0c;我们经常需要处理高维数据。然而&#xff0c;高维数据不仅处理起来麻烦&#xff0c;而且往往也不利于数据分析和模型训练。因此&#xff0c;数据科学家和工程师需要一个有效的方法来降低数据维度。…

【数据结构与算法】- 期末考试

课程链接: 清华大学驭风计划 代码仓库&#xff1a;Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的&#xff0c;其分为四门课&#xff0c;包括: 机器学习(张敏教授) &#xff0c; 深度学习(胡晓林教授), 计算…

python笔记 第一章

学习用到的资源链接&#xff1a;https://pan.baidu.com/s/1Ftptx_9iH9xFYj3NbugMrg?pwd1234 提取码&#xff1a;1234 文章目录 1.1 简介Python版本 1.2 解释器下载Python解释器安装Python解释器验证是否安装 扩展 1.3 PyCharm安装PyCharm基本使用新建项目设置只看项目文件运行…

【深度学习】- 作业6: 图像自然语言描述生成

课程链接: 清华大学驭风计划 代码仓库&#xff1a;Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的&#xff0c;其分为四门课&#xff0c;包括: 机器学习(张敏教授) &#xff0c; 深度学习(胡晓林教授), 计算…

2023 华为 Datacom-HCIE 题库 04--含解析

单选题 1.[试题编号&#xff1a;189921] &#xff08;单选题&#xff09;防火墙双机热备场景下&#xff0c;当VGMP工作在负载分担模式时&#xff0c;为了避免在来回路径不一致的场景下回程流量因没有匹配到会话表项而丢弃的现象&#xff0c;防火墙需要启开一下那些功能&#x…

【vim】从入门到放弃(“四种”模式、常用命令、正则表达式、文件属性、插件安装)

文章目录 一、vim简介二、vim操作2.1 三种模式及其切换2.2 常用命令2.21 命令模式下常用命令2.22 底行模式下常用命令 三、vim进阶3.1 进阶操作3.11 可视化模式3.12 正则表达式3.13 结合其他文本处理命令3.14 修改文件属性&#xff08;编码、格式、权限&#xff09; 3.2 进阶配…

cpu压力测试、平均负载、切换上下文(linux)

和windows下有很多图形化测试工具不同&#xff0c;linux下的压力测试通常需要命令行 一、平均负载 1.查看命令 uptime会给出类似如下的信息 2.说明 三个数值代表1分钟&#xff0c;5分钟&#xff0c;15分钟的平均进程数。 换成更容易理解但不准确的说法就是几个核满载 比如…

目前前端流行的框架总结

框架 前端框架 前端框架一般指用于简化网页设计的框架&#xff0c;使用广泛的前端开发套件&#xff0c;比如&#xff0c;jquery&#xff0c;extjs&#xff0c;bootstrap等等&#xff0c;这些框架封装了一些功能&#xff0c;比如html文档操作&#xff0c;漂亮的各种控件&#x…

取余,取模

目录 一&#xff1a;取整方式 1&#xff1a;向0取整 --- trunc取整函数 2.向-∞取整 --- floor&#xff08;地板&#xff09;函数 3.向∞取整 --- ceil函数 4.四舍五入取整 --- round 函数 5.四种取整方式的对比 二&#xff1a;取模 1.引入 2.取模与取余等价&#xff1f; 一&a…

JavaScript实现通过表格方式显示三角形的代码

以下为实现通过表格方式显示三角形的程序代码和运行截图 目录 前言 一、通过表格方式显示三角形 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择&#xff0c;您可以在目录里进行快速查找&#xff1b; 2.本博文代码可以根据题目要…

5.python列表

文章目录 一、什么是列表二、列表的表示方法三 、列表元素的索引四、访问列表元素五、修改列表元素直接赋值 六、添加列表元素6.1 方法append()6.2 方法insert() 七、删除列表元素7.1 语句del7.2方法pop()7.3方法remove() 八、组织列表8.1倒着打印列表8.2确定列表长度8.3 列表排…

【机器学习】 - 作业5: 基于Kmeans算法的AAAI会议论文聚类分析

课程链接: 清华大学驭风计划 代码仓库&#xff1a;Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的&#xff0c;其分为四门课&#xff0c;包括: 机器学习(张敏教授) &#xff0c; 深度学习(胡晓林教授), 计算…