再MySQL中函数和封装函数结束时END;$$和ENDS;$$和END$$的区别及用法
时间: 2023-09-29 21:03:25 浏览: 47
在 MySQL 中,函数和存储过程的结束标记可以使用 `END` 关键字来表示。但是,如果在函数或存储过程中使用了 `BEGIN` 关键字,则需要使用不同的结束标记。
以下是不同类型的结束标记及其用法:
1. `END;`:这是最常见的结束标记,用于表示函数或存储过程的结束。
2. `END$$`:这个结束标记通常用于存储过程或函数中嵌套了其他存储过程或函数的情况。在这种情况下,使用 `END` 关键字可能会导致语法错误。使用 `END$$` 可以避免这个问题。
3. `ENDS;$$`:这个结束标记通常用于存储过程或函数中嵌套了其他存储过程或函数,并且这些嵌套的存储过程或函数都使用了 `BEGIN` 关键字的情况。在这种情况下,使用 `END` 或 `END$$` 都可能会导致语法错误。使用 `ENDS;$$` 可以解决这个问题。
需要注意的是,结束标记前后必须要有分号(`;`)。另外,不同的结束标记应该在不同的行上,否则会导致语法错误。
例如,一个使用 `END$$` 的存储过程的定义方式如下:
```
DELIMITER $$
CREATE PROCEDURE myProc()
BEGIN
-- Some code here
IF some_condition THEN
-- Call another stored procedure
CALL nestedProc();
END IF;
END$$
DELIMITER ;
```
而一个使用 `ENDS;$$` 的存储过程的定义方式如下:
```
DELIMITER $$
CREATE PROCEDURE myProc()
BEGIN
-- Some code here
IF some_condition THEN
-- Call another stored procedure
BEGIN
DECLARE var1 INT;
SET var1 := nestedProc();
END;
END IF;
ENDS;$$
DELIMITER ;
```
在以上两个例子中,`DELIMITER` 用于改变语句分隔符,以便在存储过程中使用 `;`。