一个函数可以运行多个SQL语句,从调用者那里获取多个参数和多个值,然后将一个值返回给调用者。*
文档详细解释了函数的用法。
例如,您可以按照下面的示例创建一个名为
test
的表:
CREATE TABLE test (
num int
);
然后,您将其插入行,其
num
为
2
,如下所示:
INSERT INTO test (num) VALUES (2);
现在,你可以创建一个名为
addition(value INT)
的函数,它将
value
加到
num
上,并将
value
作为返回值返回给调用者,如下所示。*如果没有使用
DETERMINISTIC
,会出现
错误,
我的答案解释了
DETERMINISTIC
,你必须设置
RETURN语句和
RETURNS <type>
子句,否则会出现
错误和
错误,在函数中,允许使用
SELECT INTO
,但不允许使用没有
INTO
的
SELECT
,因为基本上会出现
错误,所以在创建函数时,需要将默认分隔符
;
更改为类似
$$
的内容,否则会出现错误,然后在创建函数后,需要将分隔符
$$
改回
;
,如下所示,
我的答案解释了分隔符,创建存储过程时,必须选择一个数据库,否则会出现
错误。
DELIMITER $$
CREATE FUNCTION addition(value INT) RETURNS INT
DETERMINISTIC
BEGIN
UPDATE test SET num = num + value;
SELECT num INTO value FROM test;
RETURN value;
END$$
DELIMITER ;
然后,你可以使用
SELECT语句调用
addition(3)
,然后返回
5
并将
5
添加到
num
中,如下所示:
mysql> SELECT addition(3);
+
| addition(3) |
+
| 5 |
+
...
mysql> SELECT num FROM test;
+
| num |
+
| 5 |
+
此外,您可以创建一个名为
addition()
的函数,其中包含用户定义的会话变量
the user-defined session variable,例如
@my_value
,并且不带参数,如下所示:
DELIMITER $$
CREATE FUNCTION addition() RETURNS INT
DETERMINISTIC
BEGIN
UPDATE test SET num = num + @my_value;
SELECT num INTO @my_value FROM test;
RETURN NULL;
END$$
DELIMITER ;
然后,你使用
@my_value
设置为
3
并调用
addition()
,然后
3
被加到
num
上,
@my_value
的值变为
5
,如下所示:
mysql> SET @my_value = 3;
...
mysql> SELECT addition();
+
| addition() |
+
| NULL |
+
...
mysql> SELECT num FROM test;
+
| num |
+
| 5 |
+
...
mysql> SELECT @my_value;
+
| @my_value |
+
| 5 |
+
在下面的情况下,您可以创建
addition(value INT)
函数,而无需更改分隔符为
$$
,也不会出现错误。
CREATE FUNCTION addition(value INT) RETURNS INT
DETERMINISTIC
RETURN value;
DELIMITER $$
CREATE PROCEDURE mysql_user_count()
BEGIN
SELECT 'Mysql用户表' description, COUNT(*) record_count FROM mysql.user;
END$$
DELIMITER ;
- Keith John Hutchison