存储过程和过程化SQL实验报告 - MySQL 5.7
一、实验目的
- 了解存储过程和过程化SQL的概念和基本特点。
- 掌握存储过程和过程化SQL的创建、执行和调用方法。
- 了解存储过程和过程化SQL在实际应用中的作用和优势。
二、实验环境
- 操作系统:Windows 10
- 数据库系统:MySQL 5.7
三、实验内容
1. 创建存储过程
(1) 创建一个简单的存储过程,实现输出'Hello World!' 的功能。
DELIMITER $$
CREATE PROCEDURE hello_world()
BEGIN
SELECT 'Hello World!';
END$$
DELIMITER ;
(2) 创建一个包含参数的存储过程,实现两个数的加法运算。
DELIMITER $$
CREATE PROCEDURE add(IN a INT, IN b INT)
BEGIN
SELECT a + b;
END$$
DELIMITER ;
2. 执行存储过程
(1) 执行无参数的存储过程。
CALL hello_world();
(2) 执行带参数的存储过程。
CALL add(3, 4);
3. 调用存储过程
(1) 调用无参数的存储过程。
SET @result = '';
CALL hello_world(@result);
SELECT @result;
(2) 调用带参数的存储过程。
SET @result = '';
CALL add(3, 4, @result);
SELECT @result;
4. 创建过程化SQL
(1) 创建一个过程化SQL,实现查询订单的总金额。
DELIMITER $$
CREATE FUNCTION total_amount(IN order_id INT)
RETURNS DECIMAL(10, 2)
BEGIN
DECLARE total DECIMAL(10, 2);
SELECT SUM(quantity * unit_price) INTO total FROM order_details WHERE order_id = order_id;
RETURN total;
END$$
DELIMITER ;
5. 执行过程化SQL
SELECT total_amount(10248);
四、实验结果
1. 创建存储过程
(1) 创建一个简单的存储过程,实现输出'Hello World!' 的功能。
CREATE PROCEDURE hello_world()
BEGIN
SELECT 'Hello World!';
END
(2) 创建一个包含参数的存储过程,实现两个数的加法运算。
CREATE PROCEDURE add(IN a INT, IN b INT)
BEGIN
SELECT a + b;
END
2. 执行存储过程
(1) 执行无参数的存储过程。
CALL hello_world();
执行结果:
Hello World!
(2) 执行带参数的存储过程。
CALL add(3, 4);
执行结果:
7
3. 调用存储过程
(1) 调用无参数的存储过程。
SET @result = '';
CALL hello_world(@result);
SELECT @result;
执行结果:
@result
Hello World!
(2) 调用带参数的存储过程。
SET @result = '';
CALL add(3, 4, @result);
SELECT @result;
执行结果:
@result
7
4. 创建过程化SQL
(1) 创建一个过程化SQL,实现查询订单的总金额。
CREATE FUNCTION total_amount(IN order_id INT)
RETURNS DECIMAL(10, 2)
BEGIN
DECLARE total DECIMAL(10, 2);
SELECT SUM(quantity * unit_price) INTO total FROM order_details WHERE order_id = order_id;
RETURN total;
END
5. 执行过程化SQL
SELECT total_amount(10248);
执行结果:
total_amount(10248)
440.00
五、实验总结
本次实验主要学习了存储过程和过程化SQL的基本概念、创建、执行和调用方法,以及在实际应用中的作用和优势。通过实验,我对存储过程和过程化SQL的使用有了更深入的了解,能够更加灵活地运用它们解决实际问题。同时,我也发现,在实际应用中,存储过程和过程化SQL能够提高数据库的效率和安全性,减少了代码的重复性,更加方便了维护和管理。
原文地址: https://www.cveoy.top/t/topic/od8Q 著作权归作者所有。请勿转载和采集!