delimiter // CREATE FUNCTION c() RETURN INT BEGIN RETURN ( SELECT COUNT(*) FROM student ); END // delimiter ;为什么报错
时间: 2024-05-09 21:15:49 浏览: 24
这是因为您在函数定义的第一行使用了 `delimiter //`,而在函数的最后一行又使用了 `delimiter ;`,导致 MySQL 无法正确解析函数定义的结束位置。
正确的写法应该是:
```
delimiter //
CREATE FUNCTION c() RETURNS INT
BEGIN
RETURN (SELECT COUNT(*) FROM student);
END //
delimiter ;
```
在这里,我们在函数定义的第一行使用 `delimiter //`,表示在接下来的语句中,MySQL 应该将 `//` 视为语句结束的标志,而不是默认的 `;`。在函数定义结束的最后一行,我们使用 `delimiter ;` 来将分隔符恢复为默认值,以便之后的语句可以正确执行。
相关问题
delimiter // CREATE FUNCTION c() RETURN INT BEGIN RETURN ( SELECT count(*) FROM student); END //为什么报错
这段代码是 MySQL 存储过程的语法,而您在使用分号作为语句的结束符。因此,当 MySQL 执行到第一个分号时,它会认为这个存储过程已经结束了,而不是继续执行下去。所以会报错。
要解决这个问题,您需要将分号替换为自定义的结束符,例如 “//”。您可以尝试使用以下代码:
```
delimiter //
CREATE FUNCTION c() RETURN INT
BEGIN
RETURN (
SELECT COUNT(*) FROM student
);
END //
delimiter ;
```
在这里,我们使用 `delimiter` 命令来将结束符改为 `//`,并在存储过程的结尾处使用相同的结束符。这样 MySQL 就知道了整个存储过程的代码是什么,而不会将其中的分号误解为结束符。
delimiter // create function wzq_11() returns int deterministic begin declare rs int; select count(*) into rs from student; IF rs=0 THEN return '此表人数为空'; ELSE return rs; END IF; end // delimiter ; select wzq_11() as 学生人数 ;为这个代码每行都写上注释
```
delimiter // -- 修改语句结束符为 //
create function wzq_11() returns int deterministic
begin
declare rs int; -- 声明一个整型变量 rs
select count(*) into rs from student; -- 查询 student 表的总行数并存放在 rs 中
IF rs=0 THEN -- 如果 rs 等于 0
return '此表人数为空'; -- 返回字符串 '此表人数为空'
ELSE
return rs; -- 否则返回 rs 的值
END IF; -- 结束 IF-ELSE 语句
end // -- 结束函数定义
delimiter ; -- 恢复语句结束符为 ;
select wzq_11() as 学生人数 ; -- 调用 wzq_11 函数并将结果命名为 '学生人数' 并输出
```