欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > 【MySql】第五章(存储函数与存储过程)习题

【MySql】第五章(存储函数与存储过程)习题

2025/2/7 5:04:04 来源:https://blog.csdn.net/weixin_49345320/article/details/143431048  浏览:    关键词:【MySql】第五章(存储函数与存储过程)习题

一、解答题

  1. 存储过程中的代码可以改变吗?
    可以的。在MySQL中,你可以通过 ALTER PROCEDURE 语句来修改已经存在的存储过程的代码。这个语句允许你更改存储过程的特性,比如修改参数列表或者更改过程体中的SQL语句。例如:

    ALTER PROCEDURE procedure_name
    BEGIN-- 新的存储过程代码
    END;
    
  2. 存储过程可以调用其他存储过程吗?
    是的,存储过程可以调用其他存储过程。在存储过程中,你可以使用 CALL 语句来调用另一个存储过程,就像在普通的SQL查询中一样。例如:

    CALL other_procedure();
    

    但是,需要注意的是,这种调用可能会导致代码的复杂性和难以追踪,因此在设计存储过程时应该谨慎使用。

  3. 为什么存储过程的参数不能与数据表中的字段名相同?
    存储过程的参数名和数据表中的字段名可以相同,这不会导致技术上的问题。但是,为了避免混淆和提高代码的可读性,通常建议不要使用相同的名称。参数是存储过程的局部变量,而字段名是数据库表的列标识符。如果它们有相同的名称,特别是在复杂的查询和存储过程中,可能会导致理解上的困难,尤其是在参数和字段都参与到同一个查询中时。因此,为了保持代码的清晰和易于维护,最好使用不同的命名约定。

二、操作题

1. 创建存储函数 cnt_f() ,统计fruits表中记录的个数,并调用执行该存储函数。

创建存储函数 cnt_f()
DELIMITER $$CREATE FUNCTION cnt_f() RETURNS INT
BEGINDECLARE total_count INT;SELECT COUNT(*) INTO total_count FROM fruits;RETURN total_count;
END $$DELIMITER ;

这个存储函数 cnt_f() 没有参数,它使用 COUNT(*) 来统计 fruits 表中的记录个数,并将结果返回。

调用存储函数 cnt_f()
SELECT cnt_f();

这条语句将执行存储函数 cnt_f() 并返回 fruits 表中的记录个数。

2. 创建存储过程sum_price(),统计fruits表中的和(要求使用游标完成),并调用执行该存储过程

创建存储过程 sum_price()
DELIMITER $$CREATE PROCEDURE sum_price()
BEGINDECLARE done INT DEFAULT FALSE;DECLARE fruit_name VARCHAR(255);DECLARE price DECIMAL(10, 2);DECLARE total_price DECIMAL(10, 2) DEFAULT 0.00;DECLARE fruit_cursor CURSOR FOR SELECT name, price FROM fruits;DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;OPEN fruit_cursor;read_loop: LOOPFETCH fruit_cursor INTO fruit_name, price;IF done THENLEAVE read_loop;END IF;SET total_price = total_price + price;END LOOP;CLOSE fruit_cursor;-- 输出总价格SELECT total_price;
END $$DELIMITER ;

这个存储过程 sum_price() 使用游标 fruit_cursor 来逐行处理 fruits 表中的数据,计算所有水果的价格总和。

调用存储过程 sum_price()
CALL sum_price();

这条语句将执行存储过程 sum_price() 并返回 fruits 表中所有水果的价格总和。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com