直接po代码
#mysql中函数的注意事项以及局部变量的注意事项
#定义一个函数(可以正确执行)
DELIMITER $
CREATE FUNCTION test1() RETURNS INT
BEGIN
INSERT INTO book(bName, price, bTypeId) VALUES ('萍踪侠影', 36.72, 10);
RETURN 888;
END$
#调用函数
SELECT test1()$
#定义一个函数(可以正确执行)
DELIMITER $
CREATE FUNCTION test2() RETURNS INT
BEGIN
#DECLARE testNumber1 int; #定义局部变量(注意:局部变量可以只声明,不初始化)
DECLARE testNumber2 INT DEFAULT 999; #定义局部变量并赋值初始化
INSERT INTO book(bName, price, bTypeId) VALUES ('倚天屠龙记', 88.56, 10);
RETURN testNumber2;
END$
#调用函数
SELECT test2()$
/*
会报错原因在于,局部变量作用域仅仅在定义它的begin end块中有效,并且
局部变量必须写在begin end中的开头,即必须写在begin end中的第一句话
*/
#定义一个函数(会报错)
DELIMITER $
CREATE FUNCTION test3() RETURNS INT
BEGIN
INSERT INTO book(bName, price, bTypeId) VALUES ('鹿鼎记', 57.29, 10);
#DECLARE testNumber1 int; #定义局部变量(注意:局部变量可以只声明,不初始化)
DECLARE testNumber2 INT DEFAULT 678; #定义局部变量并赋值初始化
RETURN testNumber2;
END$
#
#定义一个函数(可以正确执行)
DELIMITER $
CREATE FUNCTION test4() RETURNS INT
BEGIN
#SELECT COUNT(*) FROM employees;
#SELECT * FROM employees;
#select last_name, email, salary from employees;
RETURN 666;
END$
#调用函数
SELECT test4()$
#定义一个函数(会报错,报错原因在下面会总结)
DELIMITER $
CREATE FUNCTION test5() RETURNS INT
BEGIN
SELECT COUNT(*) FROM employees;
SELECT * FROM employees;
SELECT last_name, email, salary FROM employees;
RETURN 666;
END$
#
#定义一个函数(可以正确执行)
DELIMITER $
CREATE FUNCTION test6() RETURNS INT
BEGIN
DECLARE myTest INT;
SELECT COUNT(*) INTO myTest FROM employees;
RETURN 666 + myTest;
END$
#调用函数
SELECT test6()$
#
#定义一个存储过程(可以正确执行)
DELIMITER $
CREATE PROCEDURE test7()
BEGIN
SELECT COUNT(*) FROM employees;
SELECT * FROM employees;
SELECT last_name, email, salary FROM employees;
END$
#调用存储过程
CALL test7()$
/*
注意:
在mysql的trigger和function中不能出
现select * from table;或select 字段1, 字段2, 字段3 from table;等等形式的查
询,因为其会返回一个结果集;而这在mysql的trigger和function中是不可接
受的,但是在存储过程中可以。在trigger和function中可以使
用select ... into ...形式的查询
*/