计算机三级数据库技术 第8章「数据库后台编程技术」

前言:近三章都在coding,挺没意思的,但是本章涉及比较重要的概念——存储过程和触发器,后面第二道大题中很大概率涉及到

如发现内容错误,评论区轰炸


8.1

1. 存储过程,存储过程是将一段代码封装起来,以便于以后直接拿来用。有了存储过程后就不需要重新写要使用的代码,可以很大程度上节省时间。我们不但可以写自己的存储过程,同时也可以使用系统给的存储过程

通过EXECUTE或者EXEC可以执行存储过程(sp_databases用来查看服务器上的所有数据库)

当然我们也可以通过CREATE PROCEDURE …等关键字来创建自己的存储过程

CREATE PROCEDURE my_procedure
@name char(10), @price decimal(8,2)
AS
SELECT prod_name, prod_price
FROM Products
WHERE prod_name = @name and prod_price > @price

该存储过程用来查询固某件产品大于特定价格的记录

使用 EXEC my_procedure 'king doll', 0; 执行该存储过程

2. 可以通过DROP PROC来删除存储过程

DROP PROC  my_procedure

 

8.2

1. 函数和存储过程差不多,只不过函数必须有一个RETURN子句来返回函数值, 需要在代码中制定返回类型(注意这个是RETUENS),然后还有开始(BEGIN)和结束(END)的节点

CREATE FUNCTION my_function(@price decimal)
RETURNS decimal
AS
BEGIN
RETURN (@price * 2)
END

该函数的作用是输入一个价格,然后输出这个价格的两倍

 

2. 当SELECT语句作为RETURN的返回值时,返回的是一个表,这样的函数称为内联表值函数,把上面函数稍微改一下

CREATE FUNCTION my_function(@price decimal)
RETURNS table
AS
RETURN (SELECT * FROM Products WHERE prod_price = @price)

 

3. 和存储过程类似我们可以通过DROP FUNCTION语句来删除自定义函数

DROP FUNCTION my_function

 

8.3

1. 触发器也是一种类似存储过程的东西,但是看名字就知道,触发器是在被触发之后执行,而不是用户自己去调用的

CREATE TRIGGER my_trigger
ON  my_table FOR INSERT
AS
DECLARE @price int
SELECT @price = Sale_price FROM INSERTED
UPDATE Goods SET Sale_price = @price
WHERE Good_id IN(SELECT Good_id FROM INSERTED)

AS后面是用户使用INSERT命令后触发器要产生的行为,唯一需要注意的是INSERTED代表的是一个临时表,该表用来存放由INSERT影响的行的副本, 即要插入的数据

如果是使用DELETE触发器,相对应的也会产生DELETED临时表,存放的数据是被删除的行的副本

 

2. 删除触发器同样也是使用DROP

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值