存储过程和存储函数
1.常见的几种存储过程:
(1).无参数无返回值:
1 #1. 创建存储过程insert_user(),实现传入用户名和密码,插入到admin表中 2 DELIMITER // 3 CREATE PROCEDURE insert_user(IN id1 INT,IN pwd1 VARCHAR(25)) 4 BEGIN 5 INSERT INTO ADMIN (id,pwd) 6 VALUES (id1,pwd1); 7 END // 8 DELIMITER;
格式:
DELIMITER //
CREATE PROCEDURE 函数名()
BEGIN
函数的有关定义;
END //
DELIMITER ;
知识点补充:DELIMITER //的作用是让语句的终止符变为'//'而不是默认的';',因为函数定义的最后要使用';',而此时函数又未结束,所以需重新定义一个结束符 。
DELIMITER;的意义是情况DELIMITER //的操作
(2).无参数有返回值
1 #举例2:创建存储过程avg_employee_salary(),返回所有员工的平均工资 2 3 DELIMITER // 4 5 CREATE PROCEDURE avg_employee_salary() 6 BEGIN 7 SELECT AVG(salary) FROM employees; 8 9 END //
如果有返回值,则函数定义中一定有一个'select'关键词,其后跟的内容就是返回值的内容
无参函数的调用:
1 #调用 2 CALL avg_employee_salary();
使用关键词'call'来进行调用
(3).有参数:
参数共有两种类型:输入型变量(IN)和输出型变量(OUT)
输入性变量:
1 #举例5:创建存储过程show_someone_salary(),查看“emps”表的某个员工的薪资, 2 #并用IN参数empname输入员工姓名。 3 4 DELIMITER // 5 6 CREATE PROCEDURE show_someone_salary(IN empname VARCHAR(20)) 7 BEGIN 8 SELECT salary FROM employees 9 WHERE last_name = empname; 10 END // 11 12 DELIMITER ;
输出型变量:
1 DELIMITER // 2 3 CREATE PROCEDURE show_min_salary(OUT ms DOUBLE) 4 BEGIN 5 SELECT MIN(salary) INTO ms 6 FROM employees; 7 END // 8 9 DELIMITER ;
参数变量的声明格式:
变量类型(IN/OUT) 变量名 变量的数据类型(INT/VARCHAR(25)等)
1 #调用方式1 2 CALL show_someone_salary('Abel'); 3 #调用方式2 4 SET @empname := 'Abel'; 5 CALL show_someone_salary(@empname);
有参函数的调用:
1.如果是常量则直接引入参数
2.如果是变量名则需在变量名前加上'@'
2.常见的几种储存函数:
(1).无参有返回:
1 #无参有返回 2 #1. 创建函数get_count(),返回公司的员工个数 3 DELIMITER // 4 CREATE FUNCTION get_count() 5 RETURNS INT #此处一定要写为returns,不是return! 6 READS SQL DATA#写明一个函数安全类型,防止函数定义其报错 7 BEGIN 8 RETURN (SELECT COUNT(*) FROM employees); 9 END // 10 DELIMITER;
(2).有参有返回:
1 #有参有返回 2 #2. 创建函数ename_salary(),根据员工姓名,返回它的工资 3 DELIMITER // 4 CREATE FUNCTION ename_salary(emp_name VARCHAR(25))#此处不要写in表示输入变量(默认是输入变量) 5 RETURNS DOUBLE 6 READS SQL DATA 7 BEGIN 8 RETURN (SELECT salary FROM employees WHERE last_name = emp_name); 9 END // 10 DELIMITER; 11 12 SELECT ename_salary('Abel');
函数定义的一般格式:
DELIMITER //
CREATE FUNCION 函数名 (参数名 参数数据类型)
RETURNS DOUBLE
READS SQL DATA
BEGIN
RETURN (SELECT ...);
END //
DELIMITER;
为了保证函数创建一定能够成功,可以加入该语句:
#创建函数前执行此语句,保证函数的创建会成功 SET GLOBAL log_bin_trust_function_creators = 1;
三个注意点:
1.声明返回值的类型时,写RETURNS而不是RETURN
2.存储函数的所有参数都默认未输入变量,所以无需声明IN,所有的参数声明形式均为: 变量名 变量数据类型
3.函数定义时一定要声明一个安全类型,防止其编译时发生报错
存储函数的调用形式:
(1).常量为参数
SELECT ename_salary('Abel');
(2).变量为参数
1 SET @emp_id := 102; 2 SELECT email_by_id(@emp_id);
其参数调用原理与存储过程基本相同,涉及到的关键词为'select'
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报