1.写一个完整的包括参数、变量、变量赋值、条件判断、UPDATE语句、SELECT返回结果集的存储过程。
DELIMITER //
CREATE PROCEDURE UpdateAndSelect(IN param1 INT)
BEGIN
DECLARE var1 INT;
SET var1 = param1;
IF var1 > 0 THEN
UPDATE your_table
SET column1 = var1
WHERE column2 = var1;
SELECT * FROM your_table;
ELSE
SELECT 'Invalid parameter value. It should be greater than 0.';
END IF;
END //
DELIMITER ;
2.创建一个执行动态SQL的存储过程
DELIMITER //
CREATE PROCEDURE DynamicSQL(IN tableName VARCHAR(64))
BEGIN
SET @sql = CONCAT('SELECT * FROM ', tableName);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
3.创建实现功能相同的存储函数,比较他们之间的不同点在什么地方?
DELIMITER //
CREATE FUNCTION DynamicSQLFunc(tableName VARCHAR(64))
RETURNS VARCHAR(64)
BEGIN
SET @sql = CONCAT('SELECT * FROM ', tableName);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
RETURN 'Executed';
END //
DELIMITER ;
这个存储函数与上述存储过程的功能相同,都是执行动态SQL。但是,存储函数必须返回一个值,这是它与存储过程的一个主要区别。
以下是存储过程和存储函数之间的一些主要区别:
- 返回值:存储函数必须返回一个值,而存储过程不需要。
- 调用方式:存储函数可以在SQL语句中像函数一样被调用,而存储过程需要使用CALL语句单独调用。
- 事务控制:存储过程可以使用COMMIT和ROLLBACK来控制事务,而存储函数则不能。