cretae function fun1(n int) returns int deterministic begin declare sum int default 0; declare i int default 1; while i<=n do set sum := sum + i; set i := i + 1; end while; return sum; end; 哪里有错
时间: 2023-11-22 07:55:27 浏览: 128
这个函数看起来是正确的,但是你缺少了一个 DELIMITER 命令以指定新的语句结束符号。下面是一个修正后的代码:
```
DELIMITER //
CREATE FUNCTION fun1(n INT) RETURNS INT DETERMINISTIC BEGIN
DECLARE sum INT DEFAULT 0;
DECLARE i INT DEFAULT 1;
WHILE i<=n DO
SET sum := sum + i;
SET i := i + 1;
END WHILE;
RETURN sum;
END //
DELIMITER ;
```
这里我们使用 DELIMITER 命令指定了新的语句结束符号 //,这样在函数内部使用 ; 也不会被误解为整个 CREATE FUNCTION 语句的结束。同时在最后使用 DELIMITER ; 将语句结束符号恢复为 ;。
相关问题
CREATE FUNCTION murmurhash3( input_string VARCHAR(255), seed INT ) RETURNS BIGINT DETERMINISTIC BEGIN DECLARE h1, k1, c1, c2 BIGINT; DECLARE i, len INT; DECLARE key_varbinary VARBINARY(255); SET len = CHAR_LENGTH(input_string); SET h1 = seed; SET c1 = 0xcc9e2d51; SET c2 = 0x1b873593; SET key_varbinary = CAST(input_string AS VARBINARY); SET i = 1; WHILE (i <= len) DO SET k1 = CAST(SUBSTRING(key_varbinary, i, 1) AS UNSIGNED); SET k1 = k1 * c1; SET k1 = (k1 << 15) | (k1 >> 49); SET k1 = k1 * c2; SET h1 = h1 ^ k1; SET h1 = (h1 << 13) | (h1 >> 51); SET h1 = h1 * 5 + 0xe6546b64; SET i = i + 1; END WHILE; SET h1 = h1 ^ len; SET h1 = h1 ^ (h1 >> 16); SET h1 = h1 * 0x85ebca6b; SET h1 = h1 ^ (h1 >> 13); SET h1 = h1 * 0xc2b2ae35; SET h1 = h1 ^ (h1 >> 16); RETURN h1; END//
这是一个 MySQL 存储过程,用于计算字符串的 MurmurHash3 值。输入参数为字符串和种子值,输出为一个大整数。该存储过程使用了 MurmurHash3 算法,并且是确定性的,相同的输入会得到相同的输出。存储过程的实现方式是先将字符串转换为二进制,然后按照 MurmurHash3 算法的步骤进行计算。最后返回计算出的哈希值。
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 函数并将结果命名为 '学生人数' 并输出
```
阅读全文