当前位置:首页 » 存储配置 » 函数存储过程区别

函数存储过程区别

发布时间: 2022-07-12 12:02:24

数据库存储过程和函数有什么区别

函数分两种,表值函数跟标量函数
表值函数最后要返回一个表变量,而标量函数最后要返回一个标量值
存储过程即一组批处理,可以返回或不返回值,仅仅是执行其内部的全部语句
函数可以与一般sql语句一同编写,而存储过程不可以,需要单独执行

❷ 存储过程和函数的区别是什么

存储过程需要单独执行;
函数可以随处调用。
存储过程是保存起来的可以接受和返回用户提供的参数的
Transact-SQL
语句的集合。
可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。
也可以创建在
Microsoft®
SQL
Server™
启动时自动运行的存储过程。
用户定义函数,它是返回值的已保存的
Transact-SQL
例程。用户定义函数不能用于执行一组修改全局数据库状态的操作。
与系统函数一样,用户定义函数可以从查询中唤醒调用。也可以像存储过程一样,通过
EXECUTE
语句执行。
http://topic.csdn.net/t/20030806/16/2116067.html
http://www.cnsdn.com.cn/blog/article.asp?id=2035这个的解释也很好。

❸ 函数和存储过程的区别

函数和存储过程对SQL SERVER来说有很大的区别:
1.在SQL SERVER2K以前,没有自定义函数UDF,只有系统函数。
2.无论系统函数和UDF,在系统启动是就进行编译并加载,所以UDF的效率比SP要高,SP只是在调用时才加载(扩展的存储过程除外)。
3.有些函数getdate,exec..都在UDF里不能用!
4.函数必须有返回值,SP则不一定。
5.函数可以包括在FROM子句中,SP则不可以。
6.在SQL SERVE2K中SP可以DEBUG,UDF不可以。 用户定义函数
函数是由一个或多个 Transact-SQL 语句组成的子程序,可用于封装代码以便重新使用。Microsoft® SQL Server™ 2000 并不将用户限制在定义为 Transact-SQL 语言一部分的内置函数上,而是允许用户创建自己的用户定义函数。

可使用 CREATE FUNCTION 语句创建、使用 ALTER FUNCTION 语句修改、以及使用 DROP FUNCTION 语句除去用户定义函数。每个完全合法的用户定义函数名 (database_name.owner_name.function_name) 必须唯一。

必须被授予 CREATE FUNCTION 权限才能创建、修改或除去用户定义函数。不是所有者的用户在 Transact-SQL 语句中使用某个函数之前,必须先给此用户授予该函数的适当权限。若要创建或更改在 CHECK 约束、DEFAULT 子句或计算列定义中引用用户定义函数的表,还必须具有函数的 REFERENCES 权限。

在函数中,区别处理导致删除语句并且继续在诸如触发器或存储过程等模式中的下一语句的 Transact-SQL 错误。在函数中,上述错误会导致停止执行函数。接下来该操作导致停止唤醒调用该函数的语句。

用户定义函数的类型
SQL Server 2000 支持三种用户定义函数:

标量函数

内嵌表值函数

多语句表值函数

存储过程
存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信息的工作容易得多。存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。

存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。

可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点:

可以在单个存储过程中执行一系列 SQL 语句。

可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。

存储过程在创建时即在服务器上进行编译,所以执行起来比单个 SQL 语句快。 存储过程可能单独完成一些内容,可以单独进行。
函数可以在试子中调用,比如可以进行一些计算等,不能单独执行。

❹ 数据库存储过程、函数、触发器的区别是什么

三者差别:

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

2、存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用;

3、触发器是特殊的存储过程,存储过程需要程序调用,而触发器会自动执行。

分别含义:

1、存储过程的特点

①存储过程只在创建时进行编译,以后执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。

② 当对数据库进行复杂操作时(如对多个表进行Update、Insert、Query、Delete时),可将此复杂操作用存储过程封装起来。

③可以在过程中调用另一个存储过程。可以在存储过程中调用函数。这可以简化一系列复杂语句。

④ 安全性高,可设定只有某用户才具有对指定存储过程的使用权。

⑤参数有三种(IN、OUT、IN OUT),可返回多个参数值。

⑥在ORACLE中,若干个有联系的过程可以组合在一起构成程序包。

⑦存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

2、函数的特点

①函数只有一种参数(IN),只有一条RETURN语句,只能返回单一的值。

②可在SQL语句(DML或SELECT)中调用函数。由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。

3、触发器的特点

触发器是特殊的存储过程,存储过程需要程序调用,而触发器会自动执行。

❺ 存储过程和函数有何区别

存储过程和函数目的是为了 可重复地 执行操作数据库的sql语句的集合。

区别是写法和调用上。

写法上:存储过程的参数列表可以有输入参数、输出参数、可输入输出的参数;

函数的参数列表只有输入参数,并且有return <返回值类型,无长度说明>。

返回值上:

存储过程的返回值,可以有多个值,

函数的返回值,只有一个值。

调用方式上:

存储过程的调用方式有:

1)、exec <过程名>;

2)、execute <过程名>;

3)、在PL/SQL语句块中直接调用。

函数的调用方式有:

在PL/SQL语句块中直接调用。

具体分为:

----调用FUNCTION add_three_numbers

----1. 位置表示法调用函数

BEGIN

dbms_output.put_line(add_three_numbers(2,4,5));

END;

----2. 命名表示法调用函数

BEGIN

dbms_output.put_line(add_three_numbers(b=>3, a=>4,c=>2));

END;

----3. 混合使用位置表示法和命名表示法调用函数

BEGIN

dbms_output.put_line(add_three_numbers(3, b=>4,c=>2));

END;

----4. 排除表示法

BEGIN

dbms_output.put_line(add_three_numbers(12,c=>2));

END;

----5. sql调用表示法 --混合表示法

SELECT add_three_numbers(3, b=>4,c=>2) FROM DUAL;

----1. 该函数接受3个可选参数,返回3个数字的和

CREATE OR REPLACE FUNCTION add_three_numbers

(

a NUMBER:=0, b NUMBER:=0, c NUMBER:=0

)

RETURN NUMBER IS

BEGIN

RETURN a+b+c;

END;

存储过程:

基本语法:

create procere <过程名>(<参数列表,无参时忽略>)

as|is

变量声明、初始化

begin

业务处理、逻辑代码

exception

异常捕获、容错处理

end <过程名>;

参数:<参数名> in|out|in out <参数类型,无长度说明> ,如:v_name varchar2

in:入参

out:出参

in out:出入参

注:as|is表示as或is

调用语法:

1)、exec <过程名>;

2)、execute <过程名>;

3)、在PL/SQL语句块中直接调用。

例:

create or replace procere up_wap(v_param1 in out varchar2,v_param2 in out varchar2)

is

v_temp varchar2(20);

begin

dbms_output.put_line('交换前参数1:'||v_param1||' 参数2:'||v_param2);

v_temp:=v_param1;

v_param1:=v_param2;

v_param2:=v_temp;

dbms_output.put_line('交换后参数1:'||v_param1||' 参数2:'||v_param2);

exception

when others then dbms_output.put_line('There is a error when the procere up_wap executing!');

end up_wap;

/

-- 调用存储过程

declare

v_param1 varchar2(20):='param1';

v_param2 varchar2(20):='param2';

begin

up_wap(v_param1 => v_param1,v_param2 => v_param2);

end;

/

自定义函数(function)

基本语法:

create function <函数名>(<参数列表,无参时忽略>)

return <返回值类型,无长度说明>

as|is

变量声明、初始化

begin

业务处理、逻辑代码

return <返回的值>;

exception

异常捕获、容错处理

end <函数名>;

参数:in 入参

注:只有入参的类型。

在存储过程和自定义函数中的参数的传递(入参和出参)不能使用%type或%rowtype匹配,不能使用空值null,但是存储过程可以返回空值。

例:

create function uf_select_name_by_id_test(v_id in number)

return varchar2

is

v_name t_test.t_name%type;

begin

select t_name into v_name from t_test where t_id=v_id;

return v_name;

exception

when others then dbms_output.put_line('error');

end uf_select_name_by_id_test;

/

select uf_select_name_by_id_test(1) 姓名 from al;-- select调用

declare --pl/sql语句块调用

v_name varchar2(20);

begin

v_name:=uf_select_name_by_id_test(1);

dbms_output.put_line('name = '||v_name);

end;

/

❻ 函数和存储过程的区别

函数一般是传入一个
标量
参数,也就是某个具体的值,进行适当加工后返回合适的结果。函数不允许进行
数据库操作
,比如在函数里是不允许执行
SQL语句
的。

存储过程
也可以接受参数,不过它一般是依据传入的参数对数据进行不同的处理,这时一般是执行SQL语句操作数据。

❼ 函数和存储过程区别

函数只是对某个数据进行的一个运算,存储过程能对整批数据进行处理,不是简单的运算!

❽ 存储过程和函数分别是什么呢,有什么区别

存储过程和函数都包含一段处理脚本,两者都有返回值,而主要区别也体现在返回值上。
存储过程的返回值可以通过过程体内return + 一个整数
的形式中指过程,返回过程状态;也可以通过返回参数(output)得到一个返回值。
函数的返回结果就很多了,除了返回各种基本类型,还能返回table类型(内嵌表值函数和多语录表值函数),暂时能想到的就这些了~

热点内容
android局域网视频 发布:2024-10-08 18:35:29 浏览:691
java访问私有变量 发布:2024-10-08 18:34:50 浏览:84
vivo锁屏壁纸缓存在哪 发布:2024-10-08 18:34:49 浏览:535
insta360oner配多大的存储卡 发布:2024-10-08 18:34:40 浏览:212
csgo和永劫无间哪个配置要求高 发布:2024-10-08 18:20:47 浏览:48
43数据库 发布:2024-10-08 18:19:20 浏览:816
svn服务器不能访问 发布:2024-10-08 18:18:36 浏览:984
压缩面膜多少钱 发布:2024-10-08 18:18:01 浏览:539
徐州少儿编程培训机构 发布:2024-10-08 17:52:29 浏览:389
c语言常用函数大全 发布:2024-10-08 17:46:33 浏览:410