createfunction dept_count(dept_name varchar(20)) returnsinteger begin declare d_count integer; selectcount(*) into d_count from instructor where instructor.dept_name = dept_name return d_count; end;
但是我在MySQL 8.0中运行上述命令,报错如下:
1
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'return d_count; end' at line 8
解决方案
这是因为select语句没有以分号结束,修改为如下即可:
1 2 3 4 5 6 7 8 9
createfunction dept_count(dept_name varchar(20)) returnsinteger begin declare d_count integer; selectcount(*) into d_count from instructor where instructor.dept_name = dept_name; return d_count; end;
新问题
不过还是有错误:
1
1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
解决方案
执行下面的语句,然后再执行创建存储过程的语句即可.
1
SETGLOBAL log_bin_trust_function_creators =1;
1 2 3 4 5 6 7 8 9 10 11 12 13
mysql> SET GLOBAL log_bin_trust_function_creators = 1; Query OK, 0 rows affected (0.00 sec)
mysql> create function dept_count(dept_name varchar(20)) returns integer begin declare d_count integer; select count(*) into d_count from instructor where instructor.dept_name = dept_name; return d_count; end; Query OK, 0 rows affected (0.02 sec)