zoukankan      html  css  js  c++  java
  • Mysql存储过程变量,参数,注释

    Mysql存储过程--变量,参数,注释

    变量定义:

    DECLARE variable_name [,variable_name...] datatype [DEFAULT value];

    其中,datatype为mysql的数据类型,如:INT, FLOAT, DATE, VARCHAR(length)

    例:

    DECLARE l_int INT unsigned default 4000000;

    DECLARE l_numeric NUMERIC(8,2) DEFAULT 9.95;

    DECLARE l_date DATE DEFAULT '1999-12-31';

    DECLARE l_datetime DATETIME DEFAULT '1999-12-31 23:59:59';

    DECLARE l_varchar VARCHAR(255) DEFAULT 'This will not be padded';

    变量赋值

    SET 变量名 = 表达式值 [,variable_name = expression ...]

    参数

    mysql存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT

    Create procedure|function([[IN |OUT |INOUT ] 参数名 数据类形...])

    IN 输入参数

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

    OUT 输出参数

    该值可在存储过程内部被改变,并可返回

    INOUT 输入输出参数

    调用时指定,并且可被改变和返回

    IN参数例子:

    创建

    mysql> CREATE PROCEDURE sp_demo_in_parameter(IN p_in INT)

    mysql> BEGIN SELECT p_in; /*查询输入参数*/

    mysql> SET p_in=2; /*修改*/

    mysq> select p_in; /*查看修改后的值*/

    mysql> END;


    执行结果:
    mysql> set @p_in=1;
    mysql> call sp_demo_in_parameter(@p_in);
    +------+
    | p_in |
    +------+
    |    1 |
    +------+

    +------+
    | p_in |
    +------+
    |    2 |
    +------+

    mysql> select @p_in;

    +-------+
    | @p_in |
    +-------+
    | 1     |
    +-------+

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

    OUT参数例子

    创建:

    mysql> CREATE PROCEDURE sp_demo_out_parameter(OUT p_out INT)

    mysql> BEGIN SELECT p_out;/*查看输出参数*/

    mysql> SET p_out=2;/*修改参数值*/

    mysql> SELECT p_out;/*看看有否变化*/

    mysql> END;
    执行结果:
    mysql> SET @p_out=1;
    mysql> CALL sp_demo_out_parameter(@p_out);
    +-------+
    | p_out |
    +-------+
    | NULL |
    +-------+
    /*未被定义,返回NULL*/
    +-------+
    | p_out |
    +-------+
    |     2 |
    +-------+

    mysql> SELECT @p_out;
    +-------+
    | p_out |
    +-------+
    |     2 |
    +----------+

    INOUT参数例子:

    mysql> CREATE PROCEDURE sp_demo_inout_parameter(INOUT p_inout INT)

    mysql> BEGIN SELECT p_inout;

    mysql> SET p_inout=2;

    mysql> SELECT p_inout; END;

    执行结果:
    set @p_inout=1
    call sp_demo_inout_parameter(@p_inout) //
    +---------+
    | p_inout |
    +---------+
    |       1 |
    +---------+

    +---------+
    | p_inout |
    +---------+
    |       2 |
    +---------+


    select @p_inout;

    +----------+
    | @p_inout |
    +----------+
    | 2        |
    +----------+

    用户变量

    1、 在mysql客户端使用用户变量

    mysql> SELECT 'Hello World' into @x;
    mysql> SELECT @x;
    +-------------+
    | @x          |
    +-------------+
    | Hello World |
    +-------------+
    mysql> SET @y='Goodbye Cruel World';

    mysql> select @y;
    +---------------------+
    | @y                  |
    +---------------------+
    | Goodbye Cruel World |
    +---------------------+

    mysql> SET @z=1+2+3;
    mysql> select @z;
    +------+
    | @z   |
    +------+
    | 6    |
    +------+

    2、 在存储过程中使用用户变量

    mysql> CREATE PROCEDURE GreetWorld( ) SELECT CONCAT(@greeting,' World');
    mysql> SET @greeting='Hello';

    mysql> CALL GreetWorld( );
    +----------------------------+
    | CONCAT(@greeting,' World') |
    +----------------------------+
    | Hello World                |
    +----------------------------+

    3、 在存储过程间传递全局范围的用户变量

    mysql> CREATE PROCEDURE p1( )   SET @last_procedure='p1';

    mysql> CREATE PROCEDURE p2( ) SELECT CONCAT('Last procedure was ',@last_procedure);

    mysql> CALL p1( );

    mysql> CALL p2( );
    +-----------------------------------------------+
    | CONCAT('Last procedure was ',@last_procedure) |
    +-----------------------------------------------+
    | Last procedure was p1                         |
    +-----------------------------------------------+

    注意:

    ①用户变量名一般以@开头

    ②滥用用户变量会导致程序难以理解及管理

    注释

    mysql存储过程可使用两种风格的注释

    双模杠:--

    该风格一般用于单行注释

    c风格:/* 注释内容 */ 一般用于多行注释

  • 相关阅读:
    Spring事务初识
    JdbcTemplate 和 NamedParameterJdbcTemplate详解
    Java7 新特性
    Spring的数据库编程
    Spring AOP初识
    Spring Bean装配
    [USACO12FEB]Nearby Cows G
    [USACO07OPEN]Cheapest Palindrome G
    洛谷P2633 Count on a tree
    洛谷P4113 [HEOI2012]采花
  • 原文地址:https://www.cnblogs.com/smileallen/p/3391514.html
Copyright © 2011-2022 走看看