mysql function 与 procedure
Mysql 的 function 和 procedure 有啥区别呢 ? 网上搜索后说 function 有返回值, procedure 无返回值。
1.return
从function 的语法角度来说确实如此, function 的定义中有 return 一项,如下所示
procedure:
DROP PROCEDURE IF EXISTS `p_query_user` ;
DELIMITER //
CREATE PROCEDURE p_query_user()
begin
declare c varchar(100) default '';
select 1111 ; end //
DELIMITER ;
CALL p_query_user();
function:
DROP FUNCTION IF EXISTS `f_query_user` ;
DELIMITER //
CREATE FUNCTION f_query_user() RETURNS varchar(100) CHARSET gbk
begin
declare c varchar(100) default '';
select 1111 INTO c;
RETURN c;
end //
DELIMITER ;
SELECT f_query_user();
2.select
- 在 procedure 可以有 select 1111 ;
- 在 function 中不能有 select 1111 ;
3.调用
procedure 用 call 可以调用
CALL p_query_user();
function 用 select 调用.
SELECT f_query_user();
4.参数带默认值
procedure 不支持defualt值,可以改成set或者内部定义变量加上 defualt关键字
function 不支持defualt值,可以改成set或者内部定义变量加上 defualt关键字
3. 让我来简单的说PROCEDURE可以返回值,也可以做一件事,比如几个TABLE之间的数据转来转去,而FUNCTION一定要有返回值,还只能返回一个.....
4.三点与存储过程不同的地方:
a,必须要一个RETURNS语句来定义返回值类型
b,不能指定参数的IN、OUT或INOUT修饰符,所有参数隐式的为IN
c,Function体必须包含RETURN语句来终结Function执行并返回指定的结果给调用者
2.考虑是使用函数还是使用存储过程可以根据以下方面:
从参数的返回情况来看:如果返回多个参数值最好使用存储过程,如果只有一个返回值的话可以使用函数;
从调用情况来看:
(1)如果在SQL语句(DML或SELECT)中调用的话一定是存储函数或存储的封装函数不可以是存储过程,但调用存储函数的时候还有好多限制以及函数的纯度等级的问题,你可以参考《ORACLE 9I PL\SQL程序设计》(机械工业出版社);
(2)如果是在过程化语句中调用的话,就要看你要实现什么样的功能。函数一般情况下是用来计算并返回一个计算结果而存储过程一般是用来完成特定的数据操作(比如修改、插入数据库表或执行某些DDL语句等等),所以虽然他们的语法上很相似但用户在使用他们的时候所需要完成的功能大部分情况下是不同的。
mysql function 与 procedure的更多相关文章
- MySQL存储过程(PROCEDURE)(二)
一.存储过程的修改: 语法: ALTER {PROCEDURE | FUNCTION} sp_name [characteristic……] 参数解释: Sp_name:表示存储过程或函数的名称 ...
- oracle的function和procedure返回值给shell
本文演示两个关于如何在shell中调用oracle的function和procedure,并将返回值返回给shell. 1.首在package中创建function和procedure,脚本如下: G ...
- oracle中的function 、procedure、packages、package bodies比较
1 function和procedure的区别 1).可以理解函数是存储过程的一种 2).函数可以没有参数,但是一定需要一个返回值,存储过程可以没有参数,不需要返回值 3).函数return返回值没 ...
- MySQL 5.7 create VIEW or FUNCTION or PROCEDURE
1.视图 a. CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY INVOKER VIEW `sakila` ...
- sql:MySql create FUNCTION,VIEW,PROCEDURE
use geovindu; #函数 DELIMITER $$ drop function if exists f_GetDepartmentName $$ CREATE function f_GetD ...
- 关于MySQL function创建的限制
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. MySQL 的function创建会有各种限制,经常使用的语句的限制如下: 1.CONTAINS_DYNAMIC_SQL ...
- SQLServer:FUNCTION/CURSOR/PROCEDURE/TRIGGER
一.FUNCTION:在sqlserver2008中有3中自定义函数:标量函数/内联表值函数/多语句表值函数,首先总结下他们语法的异同点:同点:1.创建定义是一样的: ...
- Oracle function和procedure
1.返回值的区别 函数有1个返回值,而存储过程是通过参数返回的,可以有多个或者没有 2. 调用的区别,函数可以在查询语句中直接调用,而存储过程必须单独调用. 函数:一般情况下是用来计算并返回一个计算结 ...
- mysql function
mysql 自定义函数的使用 先查看函数功能是否开启:show variables like '%func%'; 若是未开启则:SET GLOBAL log_bin_trust_function_cr ...
随机推荐
- div居中的三种方法
方法1: #div1{ width:200px; height:200px; background:green; position:absolute; left:0; top:0; right:0; ...
- 将Oracle表导入到Access方法,已经安装了Access但Win7提示 找不到access driver
已经安装了Access但Win7提示 找不到access driver: 1.打开 "C:\Windows\SysWOW64\odbcad32.exe" 2.管理员cmd运行 命令 ...
- npm更换淘宝镜像
镜像使用方法(三种办法任意一种都能解决问题,建议使用第三种,将配置写死,下次用的时候配置还在): 1.通过config命令 npm config set registry https://regist ...
- JAVA构造器、this、super
构造器是为了创建一个类的实例.这个过程也可以在创建一个对象的时候用到: Platypus p1 = new Platypus(); 相反,方法的作用是为了执行java代码. 修饰符,返回值和命名的不同 ...
- Extjs3 Combo实现百度搜索查询
在Extjs中实现Combo手输模糊筛选出下拉框数据.之前一直利用的Combo的keyup来实时的请求数据库进行查询.最近发现了一个更好的方式:只需要引用一个ComboBoxQuery Ext.ns( ...
- jsf使用spring注入的bean
jsf的后台bean中使用spring定义的service,需要使用@ManagedProperty,并且要具有该属性的getter/setter方法. package cn.catr.lm.idc. ...
- 合理配置MySQL缓存 提高缓存命中率
众所周知,系统读取数据时,从内存中读取要比从硬盘上速度要快好几百倍.故现在绝大部分应用系统,都会最大程度的使用缓存(内存中的一个存储区域),来提高系统的运行效率.MySQL数据库也不例外.在这里,笔者 ...
- [PS] 透明底图片制作
网页中有时需要自己绘制一些图片,或者现有的图片希望修改底色,这些都会用到透明底色的图片,下面总结两种方法,比较简单入门. 一.自己制作透明底图片 步骤1.新建图片,背景内容选择透明: 步骤2.选择文字 ...
- IP address/地址 检查
1.Determine if a string is a valid IP address in C Beej's Guide to Network Programming 2.9.14. inet_ ...
- XML, XPath, Xslt及解析/Parse
XML及解析/Parse "Programming with libxml2 is like the thrilling embrace of an exotic stranger.&quo ...