您的位置:首页 > 数据库 > MySQL

MYSQL晋级之路----------(4)视图以及存储过程

2020-02-13 23:24 375 查看

视图的定义

视图是虚拟的表,与数据库中我们所定义的数据库表不一样,视图只包含使用使用时动态检索数据的查询。
视图就是对SELECT语句的一种封装。

视图的使用

1.创建: CREATE VIEW viewname AS SELECT语句
2.删除 DROP VIEW
3.更新视图
(1)先DROP 再 CREATE
(2)CREATE OR REPLACE VIEW

存储过程的定义

存储过程就是存储一条或者多条SQL语句的集合。
在开发过程中,将一些复杂操作的多条或者一条sql语句存储在存储过程中,可以有效的简化以及预防错误。

存储过程的使用

创建存储过程
CREATE PROCEDURE productpricing()
BEGIN
SELECT AVG(prod_price) AS priceaverage
FROM products
END;
使用以上创建的存储过程
CALL productpricing();
删除存储过程
DROP PROCEDURE productpricing;

创建接收参数的存储过程
CREATE PROCEDURE productpricing(
OUT pl DECIMAL (8,2),
OUT ph DECIMAL (8,2),
OUT pa DECIMAL (8,2),
)
BEGIN
SELECT Min(pro_price)
INTO pl
FROM products;
SELECT Max(pro_price)
INTO ph
FROM products;
SELECT Avg(pro_price)
INTO pa
FROM products;
END;

以上存储过程接受三个参数。每个参数必须具有具体的参数类型,这里使用的是十进制。
关键字OUT 是指从存储过程中输出参数。
IN(传递给存储过程),INOUT(对存储过程传入或传出)
INTO 保存到相应的参数

使用接收参数的存储过程
调用存储过程
CALL PROCEDURE productpricing( @pricelow,
@pricehign,
@priceaverage);
SELECT @priceaverage;

在调用存储过程的时候,需要指定变量名,格式为 @变量名。 这个变量名不需要与创建时候的变量名(pl、ph、pa)一样。
使用IN的范例:
CREATE PROCEDURE ordertotal(
IN onumber INT,
OUT ototal DECIMAL(8,2)

BEGIN
SELECT Sum(item_price*quantity)
FROM orderitems
WHERE order_num = onumber
INTO ototal;
END;

调用这个存储过程
CALL ordertotal(2005,@total);

2005即传入的参数
使用@total取出参数

智能存储过程

之前的存储过程所封装的SQL都是比较简单的语句,完成一个比较简单的逻辑,封装起来的必要性不是那么强或者说封装起来可能更加麻烦。
智能存储过程就是进行更加复杂的逻辑封装。
以下举出一个例子,同时包含业务逻辑和智能处理。
例子的功能:
1.获得合计
2.把营业税有条件的加到合计
3.返回合计

CREATE PROCEDURE ordertotal(
IN onumber INT,
-- taxable用于判断含税
IN taxable BOOLEAN,
OUT total DECIMAL(8,2)
)COMMENT 'Obtain order total, optionally adding tax'
-- COMMENT关键字 并不是必须的,在执行命令 SHOW PROCEDURE STATUS的时候可看到内容。
BEGIN
DECLARE total DECIMAL(8,2);
DECLARE taxrate INT DEFAULT 6;

SELECT Sum(item_price*quantity)
FROM orderitems
WHERE order_num = onumber
INTO total;

IF taxable THEN
SELECT total+(total/100*taxrate) INTO total;
END IF;
  • 点赞
  • 收藏
  • 分享
  • 文章举报
达旦LCE 发布了16 篇原创文章 · 获赞 3 · 访问量 209 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: