zoukankan      html  css  js  c++  java
  • 存储过程和函数

     一、存储过程和函数简介

          存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存储过程和函数可以避免开发人员重复的编写相同的SQL语句。而且,存储过程和函数是在MySQL服务器中存储和执行的,可以减少客户端和服务器端的数据传输。

    二、MySQL存储过程

    一.创建存储过程
    create procedure sp_name()
    begin
    .........
    end

    二.调用存储过程
    1.基本语法:call sp_name()
    注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递

    三.删除存储过程
    1.基本语法:
    drop procedure sp_name;

    2.注意事项
    (1)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程

    四.其他常用命令

    1.show procedure status
    显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等

    2.show create procedure sp_name
    显示某一个mysql存储过程的详细信息

    mysql存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT
    Create procedure|function([[IN |OUT |INOUT ] 参数名 数据类形...])

    IN 输入参数
    表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值

    OUT 输出参数
    该值可在存储过程内部被改变,并可返回

    INOUT 输入输出参数
    调用时指定,并且可被改变和返回

    IN参数例子:

    mysql>DELIMITER //
    mysql>CREATE PROCEDURE sp_demo_in_parameter(IN p_in INT)
           ->BEGIN
           ->SELECT p_in;  /*查询输入参数*/
           ->SET p_in=2;   /*修改*/
           ->select p_in;  /*查看修改后的值*/
           ->END;

           ->//

    mysql>DELIMITER ;

    执行结果:

    mysql> SET @p_in=1;
    mysql> CALL sp_demo_in_parameter(@p_in);

    mysql> SELECT @p_in;

    以上可以看出,p_in虽然在存储过程中被修改,但并不影响@p_in的值

    OUT参数例子
    创建:

    mysql>DELIMITER //
    mysql> CREATE PROCEDURE sp_demo_out_parameter(OUT p_out INT)
           ->BEGIN
           ->SELECT p_out; /*查看输出参数*/
           ->SET p_out=2; /*修改参数值*/
           ->SELECT p_out; /*看看有否变化*/
           ->END;

           ->//

    mysql>DELIMITER ;

    执行结果:
    mysql> SET @p_out=1;
    mysql> CALL sp_demo_out_parameter(@p_out);

    /*未被定义,返回NULL*/

    mysql> SELECT @p_out;

    INOUT参数例子:

    mysql>DELIMITER //
    mysql> CREATE PROCEDURE sp_demo_inout_parameter(INOUT p_inout INT)
           ->BEGIN
           ->SELECT p_inout;
           ->SET p_inout=2;
           ->SELECT p_inout;
           ->END;

          ->//

    mysql>DELIMITER ;

    执行结果:
    mysql>SET @p_inout=1;
    mysql>CALL sp_demo_inout_parameter(@p_inout) ;

    SELECT @p_inout;

    附:函数库

    mysql存储过程基本函数包括:字符串类型,数值类型,日期类型

    一、字符串类
    CHARSET(str) //返回字串字符集
    CONCAT (string2 [,… ]) //连接字串
    INSTR (string ,substring ) //返回substring首次在string中出现的位置,不存在返回0
    LCASE (string2 ) //转换成小写
    LEFT (string2 ,length ) //从string2中的左边起取length个字符
    LENGTH (string ) //string长度
    LOAD_FILE (file_name ) //从文件读取内容
    LOCATE (substring , string [,start_position ] ) 同INSTR,但可指定开始位置
    LPAD (string2 ,length ,pad ) //重复用pad加在string开头,直到字串长度为length
    LTRIM (string2 ) //去除前端空格
    REPEAT (string2 ,count ) //重复count次
    REPLACE (str ,search_str ,replace_str ) //在str中用replace_str替换search_str
    RPAD (string2 ,length ,pad) //在str后用pad补充,直到长度为length
    RTRIM (string2 ) //去除后端空格
    STRCMP (string1 ,string2 ) //逐字符比较两字串大小,
    SUBSTRING (str , position [,length ]) //从str的position开始,取length个字符,
    注:mysql中处理字符串时,默认第一个字符下标为1,即参数position必须大于等于1
    mysql> select substring(’abcd’,0,2);
    +———————–+
    | substring(’abcd’,0,2) |
    +———————–+
    | |
    +———————–+
    1 row in set (0.00 sec)

    mysql> select substring(’abcd’,1,2);
    +———————–+
    | substring(’abcd’,1,2) |
    +———————–+
    | ab |
    +———————–+
    1 row in set (0.02 sec)

    TRIM([[BOTH|LEADING|TRAILING] [padding] FROM]string2) //去除指定位置的指定字符
    UCASE (string2 ) //转换成大写
    RIGHT(string2,length) //取string2最后length个字符
    SPACE(count) //生成count个空格

    参考链接:http://wenku.baidu.com/view/3b40ae3a376baf1ffc4fad8a.html

                http://wenku.baidu.com/view/740d51ef0975f46527d3e199.html?from=rec&pos=3&weight=27&lastweight=24&count=5

  • 相关阅读:
    [导入]Zanzarah: The Hidden Portal Cheats
    [导入]Zanzarah Walkthrough
    Each的实现
    关于SQL命令中不等号(!=,<>)
    获取当前运行函数及调用函数
    MVC3.0学习2Razor视图引擎基础语法
    MVC 3.0 学习1
    java.io.IOException: Too many open files错误解决方案
    linux下执行命令输出乱码解决方案
    通用代码引擎生成工具 XDoclet 介绍
  • 原文地址:https://www.cnblogs.com/hyzhou/p/2362911.html
Copyright © 2011-2022 走看看