精华内容
下载资源
问答
  • 存储过程大体上相同,但也有一些差别: 1. 存储过程往往实现功能较复杂,而函数在功能上一般都很有针对性; 2.返回值:函数只能返回一个值,可以表变量;而存储过程的返回值个数没有什么限制; 3. ...

    存储过程大体上是相同的,但也有一些差别:

    1. 存储过程往往实现的功能较复杂,而函数在功能上一般都是很有针对性的;
    2. 返回值:函数只能返回一个值,可以是表变量;而存储过程的返回值个数没有什么限制;
    3. 函数的限制比较多,不能用临时表,只能用表变量;
    4. 存储过程通常都是作为一个独立的部分来执行的,而函数可以作为查询语句的一部分来调用。函数可以返回表对象,所以通常可以放在sql语句的FROM关键字之后作为查询对象来操作。

     

    转载于:https://www.cnblogs.com/my11120/archive/2009/02/10/1387459.html

    展开全文
  • MySQL存储过程函数的区别与优缺点

    千次阅读 2017-08-10 15:24:00
    什么是存储过程和函数:...存储过程函数的区别1.一般来说存储过程实现的功能要复杂一些,函数实现的功能针对性较强。存储过程功能强大,可以执行包括修改表等一系列数据库操作;用户定义函数不能用于执行一组修改全局

    什么是存储过程和函数:

    存储过程可以简单的理解为一条或者多条sql语句的集合。函数数通常是数据库已定义的方法。存储过程和函数事先进行过编译。存储过程和函数执行不是由程序调用,也不是手动启动。而是由事件触发、激活从而实现执行。

    存储过程和函数的区别

    1.一般来说存储过程实现的功能要复杂一些,函数实现的功能针对性较强。存储过程功能强大,可以执行包括修改表等一系列数据库操作;用户定义函数不能用于执行一组修改全局数据库状态的操作。
    2.对于存储过程来说可以返回参数,如记录集,而函数只能返回值或者表对象。函数只能返回一个变量;存储过程可以返回多个。存储过程参数可以有IN、OUT、INOUT三种类型;函数只有IN。存储过程声明时不需要返回类型,而函数声明时需要描述返回类型,且函数体中必须包含一个有效的return语句。
    3.存储过程,可以使用非确定函数,不允许在用户定义函数主体中内置非确定函数。
    4.存储过程一般是作为一个独立的部分来执行( EXECUTE 语句执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。 SQL语句中不可用存储过程,而可以使用函数。

    存储过程优缺点:

    优点:
    1.存储过程只在创建的时候进行编译,以后每次执行存储过程都不需要重新编译,而一般的sql语句每执行一次就要编译一次,所以使用存储过程可以提高数据库执行速度。
    2.存储过程就是降sql封装在一起与数据库的事务处理结合一起使用。在操作是仅需要连接一次数据库。而由程序执行sql有可能会多次连接数据库
    3.减少了开发人员的工作量
    缺点:
    1.对于简单的sql来讲,编译sql花费的时间几乎没什么影响。在运行速度上存储过程优势不明显。
    2.可移植性差

    存储过程的简单编写

    drop procedure if exists ‘proc_adder’;
    delimiter;;
    create definer=’root’@’localhost’ procedure ‘proc_adder’(in a int,in b int,out sum int)
    begin
    declare c int;
    if a is null then set a = 0;
    end if;
    if b is null then set b = 0;
    end if;
    set sum = a + b;
    end
    ;;
    delimiter;


    调用存储过程proc_adder

    set @b=5
    call proc_adder(2,@b,@s);
    select @s as sum;

    结果:

    sum = 7


    展开全文
  • 什么是存储过程与函数什么区别和联系?

    什么是存储过程?与函数有什么区别和联系?

    1、存储过程

    SQL语句在执行的时候,需要先编译再运行。在大型的数据库系统中,为了提高效率,将为了完成某个功能的SQL语句集进行编译优化之后,存储在数据库服务器中,用户通过指定的存储过程的名字来调用执行。

    运用存储过程可以增强SQL语句的灵活性和可用性。

    2、存储过程和函数的区别?

    (1)存储过程一般是作为一个独立的部分来执行。函数一般会作为查询语句的一个部分来调用。

    (2)一般来说,存储过程实现的功能较为复杂。函数实现的功能比较有针对性。

    (3)存储过程可以返回多个参数。函数需要用括号包住输入的参数,并且只能返回一个值或者对象。

    (4)函数可以嵌入在SQL中使用,也可以在select中使用,存储过程则不可以。

    (5)函数不能操作实体表,只能操作内建表。

    (6)存储过程在创建时就在服务器上进行了编译,执行速度比函数快。

    3、存储过程的优点和缺点?

    优点:

    (1)执行速度快

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

    (2)减少网络通信量

    当对数据库进行复杂操作时,(如对多个表进行insert、update、select、delete时)可将这些复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序完成就是多条SQL语句,可能要多次连接数据库,而换成存储过程只需一次连接。

    缺点:

    (1)开发调试差

    无良好的IDE开发工具,存储过程的调试比一般SQL要复杂的多。

    (2)可移植性差

    由于存储过程将应用程序绑定到数据库上,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。

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

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

    函数

    Mysql中函数有两种:

    系统函数

    自定义函数

    在mysql中,函数必须有返回值: 所以凡是有结果的内容都是由select去访问

    函数调用: select 函数名(参数列表);

    一、系统函数

    在mysql中所有的字符串操作单位基本都是字符

    substring: 子字符串截取

    06eeb2db6e2120f82305ff0a5ea5dbd9.png

    char_length: 字符长度

    length: 字节长度

    82027e5f770654bd06c6155212f9910e.png

    instr: 在什么里面

    5f6a7003623586f1dca5ad302b3d8c96.png

    lpad: 左填充: 将字符串填充到指定长度(字符数)

    8c9d074556283c533d1c55bb8f4cbad8.png

    insert: 字符串替换

    7f75b22b15375febceae3ae85a9bfc8d.png

    strcmp: 比较字符串

    eecabc43d8604e685cc77a7b5c2dcb39.png

    时间日期函数: now(), unix_timestamp()

    f318aa9bf1aef51467beae75f541b62e.png

    二、自定义函数

    用户自己定义函数

    函数要素: 关键字(function), 函数名, 参数列表(形参和实参), 返回值, 函数体

    1. 定义函数

    定义语法

    create Function 函数名([形参列表]) returns返回值的数据类型begin

    --函数体--return 返回值

    end

    a9fcd2470903d1d2228f39c02bb9deab.png

    2. 查看函数

    函数不能像表一样查看: 但是可以查看函数创建语句: show create function 函数名;

    29b36d5f0aed75475ce73ea76f8025b4.png

    函数有另外一种方式查看所有函数: show function status like ‘pattern’;

    b205af133638da0415cbee678814b9d1.png

    3. 删除函数

    drop function 函数名;

    f3e11333e2f08b3ba096f1a7135caeaf.png

    4. 调用函数

    与调用系统函数一样

    cc4d6a2009519ba2337e17101aa510bc.png

    虚拟表: dual,为了保证select的语法结构性而存在的一个虚拟表

    select 1+ 1 from dual;

    7119a410e388bb424436354209835539.png

    Mysql的布尔类型: mysql没有bool类型,但是有bool关键字(通过0和1来实现)

    d555396f760a4cfb55ac7df35d3880de.png

    5. 函数参数

    函数的参数: 在mysql中,对函数参数的要求可以理解为强类型语言: 必须在定义函数参数(形参)指定其数据类型, 可以有多个形参

    create function test(int_1 float ,int_2 int...)

    要求在调用函数的时候,必须传入对应的实际参数: 个数与类型都必须完全一致

    Mysql函数中函数的参数,不存在引用传递(都是值传递), 也没有默认值(每个形参都必须传入实参)

    554c7f1419399aa580baafc9d5734b80.png

    调用函数

    454e240d14196844d1b35fde3d83571d.png

    6. 函数返回值

    函数内部(函数体) 的具体返回数据,必须与结构上指定的类型相同(returns)

    41804c21e8155af0eeb39be77de00772.png

    7. 函数体

    函数体没有什么特殊说明: 就是外部执行功能某一些代码进行封装.

    局部变量: 在局部作用域定义的变量(结构内部)

    Declare 变量名 数据类型 [其他属性]; -- 一个结构内部若要声明局部变量: 必须是在所有代码的最前面.

    60c32cc8b93e2e1af21b1f9f0bc6b47c.png

    全局变量可以全局访问, 局部变量只能是函数内部访问.

    897e07eecd6f908ef8344364abb5779d.png

    作用域: 全局作用域是在任何地方可以直接访问, 局部只能在内部访问

    ab39c497f6e56dd10d8a2bc5b39ba4e6.png

    三、代码结构

    代码结构:

    顺序结构

    分支结构

    循环结构

    1. 分支结构

    if分支: 根据条件进行判断

    if语法

    if 条件判断 then --then表示如果满足条件--满足条件所有执行的事情

    else

    --可以再使用if进行条件判断: 有多少个if,一定有多少个end if;--不满足条件所有做的事情

    end if;

    函数: 比较三个数的大小

    53f2e8d4a7dc7db8c256c5acf359f9d1.png

    注意: 如果使用比较判断的话: 没有”==”,只有”=”

    2. 循环结构

    为了代码的重复执行.

    while循环

    while条件判断 do--循环体

    --循环条件变更

    end while;

    需求: 求1到10之间的和

    a1c47eb1853d723261b9bad91d35665c.png

    循环控制: mysql中没有continue和break, 取而代之的是iterate和leave

    循环名字:while条件 do

    Iterate/leave 循环名字;end while;

    求1到指定数之间的和,但是凡是5的倍数都不要

    f45f8c7b18d53b21367aa00bdcc1d00f.png

    存储过程

    存储过程: procedure也叫做过程,是一种没有返回值的函数

    函数是为了解决数据操作, 返回结果的话; 存储过程就是为了解决数据操作, 但是没有结果.

    一、使用过程

    定义语法

    create procedure 过程名([参数列表])begin

    --过程体: 与函数体完全一样(局部变量,全局变量,if分支,while循环)

    end

    存储过程没有返回值, 如果想显示数据,在内部使用select

    1ebce48e30f8e7dc5bd15aa9d0002b7c.png

    使用过程: 过程没有返回值: select不能使用

    aae10a3de4a9ff54791c2d74639d0f03.png

    过程调用: 有一个专门的关键字: call

    3e60c31d4c5c77cbe27a0bac1972e32f.png

    二、维护过程

    查看过程: 查看所有过程:show procedure status;

    83371dc9563fc831e7fca6af0ae9933a.png

    查看过程的创建语句: show create procedure 过程名;

    1c3f9545796828ef2980016717f55534.png

    存储过程不能修改: 只能删除

    drop procedure 过程名;

    16d720d697eaa2692490a5bb266f0260.png

    三、过程参数

    存储过程的参数不单有数据类型,而且还有自己的类型

    in: 传进去, 外部(实参)将数据传递给存储过程内部使用(内部可以使用): 但是对外部变量没有影响(值传递)

    out: 传出去, 外部只需要对内部提供一个变量名, 内部会自动事先清空变量 = null, 然后内部对变量进行操作, 最后反应到外部的变量身上.(会内部事先清空变量引用传递)

    inout: 传进去又可以传出去(典型引用传值)

    语法: create procedure 过程名(过程参数类型 参数名 数据类型,....)

    ff6b6d134b6795f1497522170c41e3be.png

    out类型和inout类型都是类似引用传值: 意味着实参不能使用值常量,必须使用变量

    f2ee977dd1c89e320400934cbd82115f.png

    正常调用: 三个都传入变量

    50de66457f4c476ee8c43e6ac932cf57.png

    全局变量没有访问限制: 过程内部可以访问全局变量

    c546b97eeccaa65b5b3aade51d550c7d.png

    9d093a793bde73b2f47558cd329e53e1.png

    存储过程和函数的区别:

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

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

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

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

    展开全文
  • 下表是存储过程(PROCEDURE)自定义函数(User-Defined Function)的区别,参考: 存储过程 自定义函数 返回 一个或多值 必须返回标量或一个表 参数 有输入输出 仅有输入 被谁调用 ...
  • 存储过程sql语句和控制语句的一个预编译集合,以一个名称存储并作为...存储过程与自定义函数的区别? 1.存储过程能返回多个值,函数只能返回一个值 2.存储过程一般独立执行,函数可以作为其他sql的组成部分  ...
  • mysql 存储过程与函数

    2018-12-06 22:48:51
    什么是存储过程和函数  存储过程和函数事先经过... 存储过程函数的区别在于:函数必须有返回值,而存储过程没有,存储过程的参数可以使用 IN,OUT,INOUT 类型,而函数的参数只能IN 类型的。如果有函数从...
  • 原文:Mysql学习笔记(十)存储过程与函数 + 知识点补充(having与where的区别) 学习内容:存储程序与函数。。。这一章学的我云里雾里的。。。 1.存储过程。。。 Mysql存储过程从mysql 5.0开始增加的一个新功能...
  • 存储过程的优点其实有很多,不过我觉得存储过程最重要优点就是实现了SQL代码封装,那么我们为什么需要封装SQL语句呢?原因就是当我们在面对一个庞大数据库时候,当我们使用外部程序去访问数据库时候。。。...
  • 存储过程和自定义函数的区别 Difference between Procedure and User Defined Function 首先来看一下存储过程和自定义函数的概念 一、 什么是存储过程存储过程可以使得对...
  • 什么是存储函数,什么是存储过程区别是什么? ORACLE 提供可以把PL/SQL 程序存储在数据库中,并可以在任何地方来运行它,这样就叫存储过程函数。 存储函数存储过程的唯一区别是:存储函数有返回值,存储过程...
  • 索引,触发器,存储过程和存储... 存储过程与存储函数的区别4. 如何创建及调用一个存储过程5. 如何常见及调用一个存储函数6. 如何删除存储过程7. 如何删除存储函数游标1. 什么是游标2. 使用游标的四个步骤:1. 声明游
  • 存储过程: 1、什么是存储过程指在大型数据库系统中,一组为了完成特定功能的语句集,...存储函数的区别: 相同点: 1、存储过程和函数都为了可重复执行操作数据库的SQL语句的集合。 2、都一次编译,后续可...
  • C++ 内联函数的概念介绍内联函数之前,需要说明一下 C ++ 在执行普通函数时的一个过程,在调用普通函数时,执行到函数调用指令时,程序将在函数调用后立即存储该指令的内存地址,并将函数参数复制到堆栈,跳转到标记...
  • 存储函数

    2017-10-10 22:52:08
    存储过程与存储函数类型结构上类似 , 在外表上看来,必须有一个return 语句,用于返回函数值。 b. 存储过程与存储函数一样,都使用 in 和 out 来表示 输入型参数和输出型参数。 b. 创建存储函数的语法格式:...
  • 一、什么是存储过程函数 1. 被命名pl/sql块 2. 被称之为pl/sql子程序 3. 匿名块类似,有块结构: 声明部分可选(没有declare关键字) 必须有执行部分 可选异常处理部分 二、匿名块和子程序之间...
  • 本文从初学者角度,深入浅出地详解什么是指针、如何使用指针、如何定义指针、如何定义数组指针和函数指针,并给出对应实例演示;接着,区别了数组指针指针数组、函数指针指针函数;最后,对最常混淆引用...
  • MySQL 存储函数

    2019-09-20 18:24:50
    存储函数存储过程的区别 创建存储函数 调用存储函数 删除存储函数 定义实现完整性约束 1、什么是存储函数  存储函数与存储过程一样,由SQL语句和过程式语句组成的代码片段 2、存储函数存储...
  • MySql 存储过程

    2018-06-06 22:42:00
    什么是存储过程 ...存储过程与函数的区别  函数必须有返回值,而存储过程没有,存储过程的参数可以使用in、out、inout类型,而函数的参数只能in类型的。如果有函数从其他类型的数据库迁移到My...
  • 存储过程不仅仅"批处理"存储过程经过编译的sql语句集二、存储过程与函数和触发器的区别?从语法上看, 存储过程和函数以及触发器十分类似的。我们甚至可以说, 触发器和函数就是一种特别...
  • 存储过程与函数的区别 什么是数据库事务
  • 关于存储过程

    2019-10-04 14:40:36
    什么是存储过程? 存储过程(Stored Procedure)在数据库系统中,一组为了完成特定功能的SQL语句集,经编译后存储在...存储过程与函数和触发器的区别? 从语法上看,存储过程和函数以及触发器十分类似的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 459
精华内容 183
关键字:

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