mysql中function和procedure的区别
时间: 2023-10-08 21:06:44 浏览: 212
在 MySQL 中,Function 和 Procedure 是两种不同类型的可调用对象。
Function 是一种可重用的代码块,用于执行特定的计算并返回一个值。它可以接受一个或多个参数,并在执行期间使用它们进行计算。 Function 的返回值可以是任何有效的数据类型,例如整数、字符串或日期/时间值。 Function 可以被其他查询或函数调用,并且可以在 SELECT 语句中用作列表达式。
Procedure 是一组 SQL 语句的集合,它们按照特定的顺序执行。 Procedure 可以接受一个或多个参数,并且可以使用 IN、OUT 或 INOUT 参数类型来指定参数的传递方式。 Procedure 通常用于执行某些操作或任务,例如插入、更新或删除数据等。 Procedure 不返回任何值,但可以使用 OUT 或 INOUT 参数来返回值。
因此,Function 和 Procedure 的主要区别在于它们的目的和行为。 Function 用于计算并返回值,而 Procedure 用于执行操作或任务。
相关问题
create function和PROCEDURE
CREATE FUNCTION和CREATE PROCEDURE是MySQL中用于创建自定义函数和存储过程的语句。\[1\]在GBase 8s中,虽然可以使用CREATE PROCEDURE来编写并注册返回一个或多个值的SPL例程(即SPL函数),但建议改用CREATE FUNCTION来创建函数。\[1\]要注册外部函数,必须具有CREATE ROUTINE权限。如果使用DEFINER子句,则所需的权限取决于用户值。如果启用了二进制日志记录,则创建函数可能需要超级权限。\[2\]
CREATE FUNCTION用于定义自定义函数,其调用方式与调用MySQL预定义的系统函数相同。函数定义包括函数名、参数列表、返回值类型和函数体。函数体中必须包含RETURN语句来返回结果。\[3\]下面是一个示例代码:
DELIMITER //
CREATE FUNCTION email_by_name() RETURNS VARCHAR(25)
BEGIN
RETURN (SELECT email FROM emps WHERE last_name = 'Abel');
END //
DELIMITER ;
可以通过调用SELECT email_by_name()来使用这个函数。
在创建函数之前,需要执行SET GLOBAL log_bin_trust_function_creators = 1;语句,以确保函数的创建成功。\[3\]
总结来说,CREATE FUNCTION用于创建自定义函数,而CREATE PROCEDURE用于创建存储过程。它们在语法和用途上有所不同,具体使用取决于您的需求。
#### 引用[.reference_title]
- *1* [GBase8s数据库使用 CREATE PROCEDURE 与 CREATE FUNCTION 的对比](https://blog.csdn.net/weixin_48486849/article/details/121564607)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [mysql8 参考手册--CREATE PROCEDURE和CREATE FUNCTION语句](https://blog.csdn.net/weixin_32272937/article/details/114164835)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [【MySQL笔记】存储过程(PROCEDURE)与存储函数(FUNCTION)的创建与使用](https://blog.csdn.net/lijibai_/article/details/124819611)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
Create FUNCTION PROCEDURE
在GBase 8s中,可以使用CREATE PROCEDURE来创建并注册一个返回一个或多个值的SPL例程(即SPL函数),但建议改用CREATE FUNCTION。要注册外部函数,必须使用CREATE FUNCTION。\[1\]在MySQL 5.1中,要创建子程序,必须具有CREATE ROUTINE权限,并且ALTER ROUTINE和EXECUTE权限会自动授予创建者。如果允许二进制日志功能,可能还需要SUPER权限。参数的指定为IN、OUT或INOUT只对PROCEDURE是合法的,而FUNCTION参数总是被认为是IN参数。RETURNS字句只能对FUNCTION做指定,它用于指定函数的返回类型,并且函数体必须包含一个RETURN value语句。创建者或调用者必须具有访问子程序关联的数据库的权限。在MySQL 5.1中,必须具有EXECUTE权限才能执行子程序。\[2\]用户定义的过程指SPL过程和外部过程,而用户定义的函数指SPL函数和外部函数。在较早的文档中,术语存储过程同时用于SPL过程和SPL函数,但在此手册中,术语SPL例程替换了术语存储过程。在需要区分SPL函数和SPL过程函数时,本手册将进行区分。术语外部例程应用于外部过程或外部函数,这两者都是由SPL以外的编程语言编写的UDR。在需要区分外部函数和外部过程时,本手册也会进行区分。\[3\]
#### 引用[.reference_title]
- *1* *3* [GBase8s数据库使用 CREATE PROCEDURE 与 CREATE FUNCTION 的对比](https://blog.csdn.net/weixin_48486849/article/details/121564607)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [mysql -CREATE PROCEDURE和CREATE FUNCTION的语法](https://blog.csdn.net/snakewarhead/article/details/6595506)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文