1.写一个完整的包括参数、变量、变量赋值、条件判断
DELIMITER //
CREATE PROCEDURE example_procedure (IN parameter1 INT)
BEGIN
DECLARE variable1 INT;
-- 变量赋值
SET variable1 = parameter1;
-- 条件判断
IF variable1 > 5 THEN
-- UPDATE语句
UPDATE your_table SET column1 = variable1 WHERE column2 = 'some_condition';
END IF;
-- SELECT返回结果集
SELECT * FROM your_table;
END //
DELIMITER ;
2.创建一个执行动态SQL的存储过程
DELIMITER //
CREATE PROCEDURE dynamic_procedure(IN table_name VARCHAR(50), IN col_name VARCHAR(50))
BEGIN
SET @sql_stmt = CONCAT('SELECT * FROM ', table_name, ' WHERE ', col_name, ' = 1');
PREPARE stmt FROM @sql_stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
3.功能相同的存储函数,比较他们之间的不同点在什么地方?
(1)返回值类型:存储过程可以没有返回值,但存储函数必须返回一个值。存储函数可以是内建的(如ABS()函数)或自定义的,而存储过程只能是自定义的。
(2)调用方式:存储函数可以像普通 SQL 函数一样被调用,而存储过程必须使用 CALL 语句来调用。存储函数的语法如下:
SELECT function_name(arguments);
(3)数据修改:存储函数通常用于查询操作,不会改变数据库中的数据。而存储过程可以通过数据修改语句(如 INSERT、UPDATE 和 DELETE)来修改数据库中的数据。存储函数中也可以使用修改数据的语句,但不推荐这样做。
(4)存在执行器的差异:存储过程的执行需要使用执行器来完成。执行器是MySQL内核中的一个模块,负责与存储引擎进行交互,处理查询请求的各个阶段,并返回结果给客户端。而存储函数则没有这个限制,可以直接由 MySQL 解释器执行。
(5)控制流差异:存储过程中可以使用控制流语句(如IF、CASE和while),这些语句可以参与逻辑运算等复杂的操作。而存储函数中也有一些控制流语句,但是不能使用 while 循环。