zoukankan      html  css  js  c++  java
  • mysql中的自定义函数和存储过程的学习总结

    • 自定义函数
    • 存储过程
    • 区别

    一、自定义函数

    自定义函数:用法和内置函数相同,自定义函数需要0个或者多个参数,有一个返回值。

    创建自定义函数:

    CREATE FUNCTION 函数名
    RETURNS 返回值类型
    函数主体
    

    关于函数主体:

    • 函数主体由合法的sql语句构成
    • 复合结构需要用BEGIN...END...语句
    • 复合结构可以包含声明,循环,控制结构

    不带参数的自定义函数:

    CREATE FUNCTION f1()
    RETURNS VARCHAR(30)
    RETURN DATE_FORMAT(NOW(),'%Y年%m月%d日%H点%i分%s秒‘)
    
    调用
    SELECT f1();

    带参数的自定义函数:

    CREATE FUNCTION f2(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED)
    RETURNS FLOAT(10,2) UNSIGNED
    RETURN (NUM1+NUM2)/2;
    调用
    SELECT(1,2);

    二、存储过程

    存储过程是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单位处理;存储过程的优点是可以增强sql语句的灵活性,实现较快的执行速度

    参数类型:

    • IN,表示该参数的值必须在调用的适合被指定
    • OUT,表示该参数的值可以被存储过程改变,并返回
    • INOUT,表示该参数在调用时被指定,并且可以被改变和返回

    存储过程的语法和自定义函数差不多:

    CREATE PROCEDURE 存储过程的名称 (参数)
    BEGIN 
    具体的过程体
    END
    

    不带参数的存储过程:

    DETIMITER //
    CREATE PROCEDURE sp1()
     SELECT VERSION();
    调用
    CALL SP1();

    带IN参数的存储过程:

    DELIMITER //
    CREATE PROCEDURE removeUserById(IN pid INT UNSIGNED)
    BEGIN
    DELETE FROM users WHERE pid=id;
    END
    DELIMITER ;
    调用
    CALL removeUserById(22);
    

    带IN和OUT参数的存储过程:

    CREATE PROCEDURE  removeUserByAgeAndReturnInfos(IN page SMALLINT UNSIGNED,OUT deleteUsers,OUT userCounts)
    BEGIN
    DELETE FROM users WHERE age=page;
    SELECT ROW_COUNT() INTO deleteUsers;
    SELECT COUNT(id) FROM users INTO userCounts;
    END
    调用
    CALL removeUserByAgeReturnInfos(23,@a,@b);
    SELECT @a,@b;

    三、区别

    • 存储过程实现的功能要复杂一些,而函数的针对性更强
    • 存储过程可以有多个返回值,函数只能有一个返回值
    • 存储过程一般独立的执行,函数可以用在其他语句中

  • 相关阅读:
    如何解决flash跑到层上面的问题?How to resolve the div layer appear over the top of flash?
    WSDL
    Java 实现解压缩文件
    Eclipse 插件TFS 注册码
    JNLP
    SOAP
    检测客户端是否安装了JWS Java Web Start
    Java打包JRE于exe中方法
    Java解压文件代码(相当于你在目录中选中压缩文件 右键解压)
    Java代码实现利用google实现多语言翻译案例
  • 原文地址:https://www.cnblogs.com/mesunyueru/p/9019728.html
Copyright © 2011-2022 走看看