百科狗-知识改变命运!
--

mysql中函数和存储过程的区别

小肉包1年前 (2023-12-19)阅读数 9#综合百科
文章标签存储过程函数

存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。

存储过程和函数存在以下几个区别:

1)一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。存储过程,功能强大,可以执行包括修改表等一系列数据库操作;用户定义函数不能用于执行一组修改全局数据库状态的操作。

2)对于存储过程来说可以返回参数,如记录集,而函数只能返回值或者表对象。函数只能返回一个变量;而存储过程可以返回多个。存储过程的参数可以有IN,OUT,INOUT三种类型,而函数只能有IN类~~存储过程声明时不需要返回类型,而函数声明时需要描述返回类型,且函数体中必须包含一个有效的RETURN语句。

3)存储过程,可以使用非确定函数,不允许在用户定义函数主体中内置非确定函数。

4)存储过程一般是作为一个独立的部分来执行( EXECUTE 语句执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。 SQL语句中不可用存储过程,而可以使用函数。

oracle中函数和存储过程的区别和联系

本质上没区别。只是函数有如:只能返回一个变量的限制。而存储过程可以返回多个。而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。执行的本质都一样。

函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少

1. 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。

2. 对于存储过程来说可以返回参数,而函数只能返回值或者表对象。

3. 存储过程一般是作为一个独立的部分来执行(EXEC执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。

4. 当存储过程和函数被执行的时候,SQL Manager会到procedure cache中去取相应的查询语句,如果在procedure cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。

楼主您好

在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点。刚学完函数和存储过程,下面来和大家分享一下自己总结的关于函数和存储过程的区别。

一、存储过程

1.定义

存储过程是存储在数据库中提供所有用户程序调用的子程序,定义存储过程的关键字为procedure。

2.创建存储过程

create [or replace] procedure 存储过程名

[(参数1 类型,参数2 out 类型……)]   

as

  变量名  类型;

begin

  程序代码体

end;

示例一:无参无返

create or replace procedure p1

--or replace代表创建该存储过程时,若存储名存在,则替换原存储过程,重新创建

--无参数列表时,不需要写()

as

begin

dbms_output.put_line('hello world');

end;

--执行存储过程方式1

set serveroutput on;

begin

p1();

end;

--执行存储过程方式2

set serveroutput on;

execute p1();

示例二:有参有返

create or replace procedure p2

(name in varchar2,age int,msg out varchar2)

--参数列表中,声明变量类型时切记不能写大小,只写类型名即可,例如参数列表中的name变量的声明

--参数列表中,输入参数用in表示,输出参数用out表示,不写时默认为输入参数。

------------输入参数不能携带值出去,输出参数不能携带值进来,当既想携带值进来,又想携带值出去,可以用in out

as

begin

msg:='姓名'||name||',年龄'||age;

--赋值时除了可以使用:=,还可以用into来实现

--上面子句等价于select '姓名'||name||',年龄'||age into msg from dual;

end;

--执行存储过程

set serveroutput on;

declare

msg varchar2(100);

begin

p2('张三',23,msg);

dbms_output.put_line(msg);

end;

mysql中函数和存储过程的区别

示例三:参数列表中有in out参数

create or replace procedure p3

(msg in out varchar2)

--当既想携带值进来,又想携带值出去,可以用in out

as

begin

dbms_output.put_line(msg); --输出的为携带进来的值

msg:='我是从存储过程中携带出来的值';

end;

--执行存储过程

set serveroutput on;

declare

msg varchar2(100):='我是从携带进去的值';

begin

p3(msg);

dbms_output.put_line(msg);

end;

示例四:存储过程中定义参数

create or replace procedure p4

as

--存储过程中定义的参数列表

name varchar(50);

begin

name := 'hello world';

dbms_output.put_line(name);

end;

---执行存储过程

set serveroutput on;

execute p4();

总结:1.创建存储过程的关键字为procedure。

2.传参列表中的参数可以用in,out,in out修饰,参数类型一定不能写大小。列表中可以有多个输入输出参数。

3.存储过程中定义的参数列表不需要用declare声明,声明参数类型时需要写大小的一定要带上大小。

  4.as可以用is替换。

5.调用带输出参数的过程必须要声明变量来接收输出参数值。

6.执行存储过程有两种方式,一种是使用execute,另一种是用begin和end包住。

存储过程虽然有很多优点,但是它却不能使用return返回值。当需要使用return返回值时,我们可以使用函数。

二、存储函数

1.函数与存储过程的结构类似,但是函数必须有一个return子句,用于返回函数值。

create or replace function f1

return varchar--必须有返回值,且声明返回值类型时不需要加大小

as

msg varchar(50);

begin

msg := 'hello world';

return msg;

end;

--执行函数方式1

select f1() from dual;

--执行函数方式2

set serveroutput on;

begin

dbms_output.put_line(f1());

end;

三、存储过程与存储函数的区别和联系

相同点:1.创建语法结构相似,都可以携带多个传入参数和传出参数。

   2.都是一次编译,多次执行。

不同点:1.存储过程定义关键字用procedure,函数定义用function。

    2.存储过程中不能用return返回值,但函数中可以,而且函数中必须有return子句。

    3.执行方式略有不同,存储过程的执行方式有两种(1.使用execute2.使用begin和end),函数除了存储过程的两种方式外,还可以当做表达式使用,例如放在select中(select f1() form dual;)。

总结:如果只有一个返回值,用存储函数,否则,一般用存储过程。

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)