精华内容
下载资源
问答
  • 主要介绍了Mysql存储过程函数区别,需要的朋友可以参考下
  • 主要介绍了谈谈sqlserver自定义函数与存储过程区别,需要的朋友可以参考下
  • NULL 博文链接:https://liuzidong.iteye.com/blog/769097
  • 很清晰的说明了存储过程函数区别
  • oracle存储过程与函数区别

    万次阅读 2017-08-15 22:49:38
    定义: 存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库...存储过程是由流控制和SQL 语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用
    定义:
     
    

    存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程

    带有参数)来执行它。

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

    存储过程是由流控制和SQL 语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。

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


    优 点:

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

    2.当对数据库进行复杂操作时(如对多个表进行Update、Insert、Query、Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。

    3.存储过程可以重复使用,可减少数据库开发人员的工作量。

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


    存储过程与函数的对比


    存储过程的优缺点

    优点:减少网络交互的成本。
    缺点:
    a、不可移植性,每种数据库的内部编程语法都不太相同,当你的系统需要兼容多种数据库时,最好不要用存储过程。
    b、学习成本高,DBA一般都擅长写存储过程,但并不是每个程序员都能写好存储过程,除非你的团队有较多的开发人员熟悉写存储过程,否则后期系统维护会产生问题。
    c、业务逻辑多处存在,采用存储过程后也就意味着你的系统有一些业务逻辑不是在应用程序里处理,这种架构会增加一些系统维护和调试成本。
    d、存储过程和常用应用程序语言不一样,它支持的函数及语法有可能不能满足需求,有些逻辑就只能通过应用程序处理。
    e、如果存储过程中有复杂运算的话,会增加一些数据库服务端的处理成本,对于集中式数据库可能会导致系统可扩展性问题。
    f、为了提高性能,数据库会把存储过程代码编译成中间运行代码(类似于Java的class文件),所以更像静态语言。当存储过程引用的对像(表、视图等等)结构改变后,
    存储过程需要重新编译才能生效,在24*7高并发应用场景,一般都是在线变更结构的,所以在变更的瞬间要同时编译存储过程,这可能会导致数据库瞬间压力上升引起故障



    (oracle数据库就存在这样的问题)。


    本质上没区别。只是函数有如:只能返回一个变量的限制。而存储过程可以返回多个。而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。执行的本质都一样。 
         函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少 
          1.    一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。 
          2.    对于存储过程来说可以返回参数,而函数只能返回值或者表对象。 
          3.    存储过程一般是作为一个独立的部分来执行(EXEC执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。 
          4.    当存储过程和函数被执行的时候,SQL Manager会到procedure cache中去取相应的查询语句,如果在procedure cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。 
          Procedure cache中保存的是执行计划 (execution plan) ,当编译好之后就执行procedure cache中的execution plan,之后SQL SERVER会根据每个execution plan的实际情况来考虑是否要在cache中保存这个plan,评判的标准一个是这个execution plan可能被使用的频率;其次是生成这个plan的代价,也就是编译的耗时。保存在cache中的plan在下次执行时就不用再编译了。


    展开全文
  • 创建存储函数的语法结构: CREATE FUNCTION func_name([proc_parameter])RETURN type[characteristics…] routine body 语法结构释义: CREATE FUNCTION:创建关键字func_name:存储函数名称proc_parameter:参数...

    语法结构

    创建存储函数的语法结构:

    CREATE FUNCTION func_name([proc_parameter])RETURN type[characteristics…] routine body

    语法结构释义:

    CREATE FUNCTION:创建关键字func_name:存储函数名称proc_parameter:参数列表 格式如下

    【param_name type 】param_name:参数名称type:参数类型

    Return type:表示返回数据的类型characteristic:存储函数特性,与存储过程类似,大家可以查看我的上一篇文章,这里不多叙述了

    创建及调用存储函数示例

    1.来个测试表再加点测试数据

    在这里插入图片描述

    2.创建存储函数

    CREATE FUNCTION get_animal_name (search_id INT(11)) #创建函数RETURNS VARCHAR (50) #定义返回值类型BEGINRETURN ( #返回查询ID对应的名称SELECT name FROM test_10 WHERE id = search_id);END
    在这里插入图片描述

    3.调用存储函数

    SELECT get_animal_name(1);
    在这里插入图片描述
    存储函数中参数的使用及流程控制

    1.创建一个存储函数

    CREATE FUNCTION test_liucheng (the_type INT(11)) #创建函数RETURNS INT(11) #定义返回值 BEGIN DECLARE re_age INT(11);#定义变量 IF the_type = 1 THEN #如果类型为1求和 SET re_age = (SELECT SUM(age) FROM test_10); ELSE #如果类型为2,求平均值(测试用就只求整数了) SET re_age = (SELECT AVG(age) FROM test_10); END IF; RETURN (re_age);#返回参数END
    在这里插入图片描述

    2.调用存储函数,计算总和

    SELECT test_liucheng(1) as ‘age总和’;
    在这里插入图片描述

    3.换个参数调用存储函数,计算均值

    SELECT test_liucheng(2) as ‘age均值’;
    在这里插入图片描述
    存储函数与存储过程的区别
    1.存储函数有且只有一个返回值,而存储过程不能有返回值。2. 函数只能有输入参数,而且不能带in, 而存储过程可以有多个in,out,inout参数。3.存储过程中的语句功能更强大,存储过程可以实现很复杂的业务逻辑,而函数有很多限制,如不能在函数中使用insert,update,delete,create等语句;存储函数只完成查询的工作,可接受输入参数并返回一个结果,也就是函数实现的功能针对性比较强。4.存储过程可以调用存储函数。但函数不能调用存储过程。5.存储过程一般是作为一个独立的部分来执行(call调用)。而函数可以作为查询语句的一个部分来调用.

    展开全文
  • mysql中存储过程函数区别

    千次阅读 2018-05-23 18:11:25
    概述1)一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。存储过程,功能强大,可以执行包括修改表等一系列数据库操作;用户定义函数不能用于执行一组修改全局数据库状态的操作。2)对于...

    概述

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


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


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


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


    1.创建存储过程和函数语法

    CREATE PROCEDURE sp_name ([proc_parameter[,...]])
        [characteristic ...] routine_body
     
    CREATE FUNCTION sp_name ([func_parameter[,...]])
        RETURNS type
        [characteristic ...] routine_body
        
        proc_parameter:
        [ IN | OUT | INOUT ] param_name type
        
        func_parameter:
        param_name type
     
    type:
        Any valid MySQL data type
     
    

    2.修改存储过程函数语法

    ALTER {PROCEDURE | FUNCTION} sp_name [characteristic ...]
     
    characteristic:
        { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
      | SQL SECURITY { DEFINER | INVOKER }
      | COMMENT 'string'
    


    3.删除存储过程函数语法

    DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name


    4.查看存储过程和函数


    1.查看存储过程状态
    
    SHOW {PROCEDURE | FUNCTION} STATUS [LIKE 'pattern']
    show procedure status like 'Pro_Employee' \G
    2.查看存储过程和函数的创建语法
    SHOW CREATE {PROCEDURE | FUNCTION} sp_name
    
    SHOW CREATE PROCEDURE Pro_Employee \G;
    3.查看存储过程和函数详细信息
    SELECT * FROM information_schema.ROUTINES WHERE ROUTINE_NAME='Pro_Employee' \G;
    




    展开全文
  • PAGE PAGE 1 欢迎下载 四实验内容及程序代码 1.sch数据表的表结构如表7.1所示sch表的数据如表7.2 表7.1 sch 表结构 字段名 数据类型 主键 外键 非空 唯一 自增 id INT(10) 是 否 是 是 否 name VARCHAR(50) 否 否 是...
  • 存储过程:可读可写 存储函数的读写权限这里要特殊说明一下: 创建存储函数的时候后,必须声明函数读写权限,且只能在DETERMINISTIC, NO SQL, or READS SQL DATA中选择。这三者的含义为确定性、无SQL语句、只对...

    1. 读写权限不同

    存储函数:设计之初的目的是只读的(但是实际并没有严格限制)
    存储过程:可读可写

    存储函数的读写权限这里要特殊说明一下:
    创建存储函数的时候后,必须声明函数读写权限,且只能在DETERMINISTIC, NO SQL, or READS SQL DATA中选择。这三者的含义为确定性、无SQL语句、只对数据库进行读操作。
    如果没有声明读写权限,就会报下面的错误:

    ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
    

    如果想不报错,除了声明参数还有一个办法,执行SET GLOBAL log_bin_trust_routine_creators = 1;命令来禁止掉对SUPER权限的要求。

    注意:虽然存储函数的声明要求是只读的,但是却不会对函数中的语句进行检查,所有我们仍然可以在存储函数中进行写数据库的操作。

    2. 返回不同

    存储函数:必须有返回值
    存储过程:返回值可有可无,通过OUT参数返回

    3. 调用方式不同

    存储函数:只能在sql语句中调用,比如:select function();
    存储过程:只能单独调用,比如:call procedure();

    总结

    综上所述,可以看出存储函数与存储过程在设计上还是用不一样的地方

    • 存储函数:是为了计算一些东西
    • 存储过程:是一些sql语句的集合
    展开全文
  • mysql存储过程存储函数练习,里面有详细代码,供大家参考
  • oracle中的存储过程存储函数区别

    万次阅读 多人点赞 2018-11-13 18:36:02
    oracle中的存储过程存储函数区别 (尊重劳动成果,转载请注明出处:https://blog.csdn.net/qq_39778516/article/details/84032796 consistencely的博客) 1.存储过程 存储过程(Stored Procedure)是在大型...
  • 什么是存储过程 如果你接触过其他的编程语言,那么就好理解了,存储过程就像是方法一样。 竟然他是方法那么他就有类似的方法名,方法要传递的变量和返回结果,所以存储过程存储过程名有存储过程参数也有返回值。 ...
  • 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,可是也有它们的不同之处,这段时间刚学完函数与存储过程,来给自己做一个总结: 一:存储过程:简单来说就是有名字的pl/sql块。 语法结构...
  • 一、为什么要使用存储过程函数 存储过程函数,是用来实现一组关于表操作的SQL语句、可重复地执行操作数据库的集合。...他们的主要区别函数必须有返回值,而存储过程可以没有。 二、存储过程...
  • 存储过程与存储函数区别:是否用return返回值。 存储过程:类似于Java里面void返回类型的方法。目的是完成一系列的数据处理。 存储函数:类似于Java里面非void返回类型的方法。目的是获得函数返回值。 --创建...
  • 存储过程函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程函数来执行已经定义好的SQL语句。存储过程函数可以避免开发人员重复的编写相同的SQL语句。而且,存储过程函数是在MySQL服务器中...
  • MySQL中函数与存储过程区别

    千次阅读 2019-08-21 18:21:27
    概念:自定义函数 (user-defined function UDF)就是用一个象ABS() 或 CONCAT()这样的固有(内建)函数一样作用的新函数去扩展MySQL,所以UDF是对MySQL功能的一个扩展 创建函数: delimiter $$ create function ...
  • 存储过程与自定义函数区别

    千次阅读 2019-02-27 11:12:25
    存储过程与自定义函数区别: 1、存储过程实现的功能相对复杂,函数针对性较强 2、存储过程可以返回多个值,函数只能有一个返回值 3、存储过程一般独立执行,函数可以作为 sql 语句的组成部分来出现 另外,存储...
  • 从创建数据库到存储过程与用户自定义函数的小感,深入的学习mysql
  • SQL 中的存储过程与函数没有本质上的区别 函数 -> 只能返回一个变量. 函数可以嵌入到sql中使用, 可以在select 中调用, 而存储过程不行. 但函数也有着更多的限制,比如不能使用临时表 存储过程 -> 可以返回多...
  • 存储过程函数具体的区别

    千次阅读 2019-05-30 15:35:43
    存储过程: 可以使得对的管理、以及显示关于及其用户信息的工作容易得多。存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个...
  • MySQL存储过程与存储函数区别

    千次阅读 2018-01-26 11:11:51
    一.MySQL存储过程与存储函数区别 https://www.cnblogs.com/rogge7/p/5300605.html 语法定义上的区别就不说了,说一下其他的。如果有不正确的地方,还请大家指正。 1、总述 存储函数存储过程统称为...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,042,040
精华内容 416,816
关键字:

存储过程与函数的区别