IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 6. 存储过程:系统存储过程、临时存储过程、本地存储过程 -> 正文阅读

[大数据]6. 存储过程:系统存储过程、临时存储过程、本地存储过程

存储过程的类型

1.系统存储过程

主要存储在master数据库中并以sp_开头

1.1显示数据库的参数及其数据类型【exec sp_help 数据库名 】

在这里插入图片描述

1.2 更改数据库名【exec sp_rename】

在这里插入图片描述

1.3 显示规则、默认值、未加密的存储过程、用户定义函数、触发器或视图的定义【exec sp_helptext】

在这里插入图片描述



2.临时存储过程(有一定的使用期限)

(1)本地临时存储过程【以#开头】

存储在tempdb数据库中。
只有创建它的用户可以执行它。一旦用户断开服务器连接,本地临时存储过程会自动删除。

创建临时存储过程#s_g,检索所有学生的成绩记录,包括学号、姓名、所选课程号和成绩:

create procedure #s_g
as
	select student.sno,student.sname,sc.cno,sc.score
	from student,sc
	where student.sno=sc.sno 
	order by student.sno
go

exec #s_g        --执行该存储过程:
go

(2)全局临时存储过程【以##开头】

存储在tempdb数据库中。
连接到服务器的所有用户都可以执行它。创建它的用户断开服务器连接时,服务器检查是否有其他用户在执行它,如果没有删除存储过程;如果有则会等其他用户执行完再删除。


3.本地存储过程

即本地服务器上的存储过程,也就是一般所称的用户自定义存储过程。

3.1定义存储过程

① 带参数的存储过程:根据书本的数量修改价格

create procedure price_if_ByNum
	@isbn char(15),
	@num int,
	@prize numeric(4,2)
as
	if @num>100 
		begin
			update Book set Prize=@prize+5 where ISBN=@isbn;
		end
	else  
		begin
			update Book set Prize=@prize+1 where ISBN=@isbn;
		end 
go

exec price_if_ByNum '9787540456030  ',9,90.00



② 在存储过程中使用默认值

create proc select_student
    @sno char(6)='1'
as 
    select student.sno,student.sname,sc.cno,sc.score
	from student,sc
	where student.sno=@sno and student.sno=sc.sno
go

exec select_student   --不指定参数调用,则使用默认参数值1
exec select_student '2'  --指定参数调用

drop proc select_student
go



③ output的用法

创建一个存储过程average,它返回两个参数@st_name@st_avg,
分别代表了姓名和平均成绩,即查询指定学号的学生的姓名和平均成绩

create procedure average
	(@st_sno char(6),	 
	 @st_sname char(10) output,
	 @st_avg float output)
as 
    select @st_sname=student.sname, @st_avg=avg(sc.score)
	from student,sc
	where student.sno=sc.sno and student.sno=@st_sno
	group by student.sname
go
-------------------------------------------------------------------------------
执行以上存储过程average,查询学号为“1”的学生姓名和平均分:
declare @st_sname char(10), @st_avg float
exec average '1',@st_sname output, @st_avg output
select @st_sname as '姓名', @st_avg  as '平均分'    --或select '平均分'=@st_avg
go



④ return的用法

/*例: 创建存储过程test_ret根据输入的参数来判断返回值:*/
create proc test_ret(@input_int int=0)
as 
begin
	if @input_int=0
		return 0   --输入的参数等于0,则返回0
	if @input_int>0
		return 1000    --输入的参数大于0,则返回1000
	if @input_int<0
		return -1000    --输入的参数大于0,则返回-1000
end
------------------------------------------------------------------------------
declare @ret_int int   --保存返回值
exec @ret_int=test_ret 1   --执行该存储过程
print @ret_int



3.2修改存储过程【例子:修改 “加密” 为 “不加密”】

创建加密存储过程s_a,查询学生的平均年龄

create procedure s_a
with encryption
as
	select avg(sage) from student
go

exec s_a                加密存储过程可以执行这行语句
exec sp_helptext s_a    加密存储过程不可以执行这行语句
go

----------------------------------------------------------------------------------------------
/*修改存储过程*/
/*修改存储过程s_a,查询学生的最大年龄,不加密了!*/

alter procedure s_a
as
	select max(sage) from student
go

exec s_a                加密存储过程可以执行这行语句
exec sp_helptext s_a    加密存储过程可以执行这行语句
go



3.3删除存储过程【drop proc 存储名】

drop proc maxgrade
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 23:15:00  更:2022-04-06 23:16:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:19:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码