mysql 存储过程入门

 

  Mysql 的存储过程

一、 存储过程

存储过程( Stored procedure )是一组 sql 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数来执行它。

Mysql 数据库中实现了两种类型的存储过程 ; 存储过程 (stored procedure) 和存储函数( stored routine , 二者统称为存储例程

二、 初步认识

1.       存储过程基本语法

创建:

       CREATE PROCEDURE 存储过程名 ( 过程参数 […] )

        过程体

删除:

        DROP PROCEDURE [ IF EXISTS ] 存储过程名

2 .例子

   2.1 创建

  ( 1 ) 编写过程:

        一下程序都是 mysql 的命令行输入,得先修改下端结束符 : DELIMITER $$

        CREATE PROCEDURE helloworld( in d int)

        BEGIN

        SELECT d;

        END$$

    ( 2 ) 调用过程:

        CALL helloworld(3);

    ( 3 ) 显示:

         +------+

          | d    |

         +------+

          |    3 |

         +------+

        1 row in set (0.00 sec)

    ( 4 ) 解释:

        1. 过程参数: in d int

        in 用来指定该参数是向过程传递信息的,此外还有 out inout 两种类型

            out— 从过程中传出信息   inout— 不仅传信息给过程,而且也从过程中传出信息

        d 参数名

        int 参数类型, 有效的参数类型

          

      2. 过程体

         BEGIN

        Sql 语句

   END

2.2 删除

            mysql> DROP PROCEDURE IF EXISTS helloworld;

     Query OK, 0 rows affected (0.03 sec)

    3. 存储函数

与存储过程类似

      3.1 基本语法

创建:

        CREATE FUNCTION   函数名 ( 函数参数 […] )

        RETURNS 返回类型

        函数体

删除:

              DROP PROCEDURE [ IF EXISTS ] 存储过程名

      3.2 例子

    CREATE FUNCTION F1(d int)

       RETURNS int

       BEGIN

       RETURN d;

      END$$

   3.3调用:

SELECT F1(10)$$

   3.4结果:

+--------+

| F1(10) |

+--------+

|     10 |

+--------+

1 row in set (0.00 sec)

三、进一步

1. 过程参数中的 IN OUT INOUT

   1.1 IN 是默认值

   1.2 对于任何申明为 OUT INOUT 的参数,当调用存储过程时需要在参数名前加上 @ 符号,这样改参数就可以在过程外调用了

   1.3 IN 参数是值传递

              1.3.1 例子

CREATE PROCEDURE p_in(in id int)

       BEGIN

           if(id is not null) then

            set id=id+1;

           end if;

           select id as id_inner;

END$$

      1.3.2 调用

   set @id=10;

select @id as id_out;

call p_in(@id)$$

  1.3.3 结果

+--------+

| id_out |

+--------+

|     10 |

+--------+

1 row in set (0.00 sec)

 

+----------+

| id_inner |

+----------+

|        11 |

+----------+

1 row in set (0.01 sec)

1.4 OUT ,无论调用时是否传递有参数, out 关键字修饰的词初始值都为 null

   1.4.1 例子

CREATE PROCEDURE p_out(out id int)

  BEGIN

  select id as id_inner_1;

  if(id is not null) then

  set id=id+1;

  select id as id_inner_2;

  else

  select 1 into id;

  end if;

  select id as id_inner_3;

  END$$

  1.4.2 调用

set @id=10;

call p_out(@id)$$

select @id as id_out$$

  1.4.3 结果

 

+------------+

| id_inner_1 |

+------------+

|       NULL |

+------------+

1 row in set (0.04 sec)

 

+------------+

| id_inner_3 |

+------------+

|          1 |

+------------+

+--------+

| id_out |

+--------+

|      1 |

+--------+

 

1.5inout

      1.5.1 程序

CREATE PROCEDURE p_inout(out id int)

  BEGIN

  select id as id_inner_1;

  if(id is not null) then

  set id=id+1;

  select id as id_inner_2;

  else

  select 1 into id;

  end if;

  select id as id_inner_3;

  END

  $$

1.5.2 调用

set @id=10;

call p_out(@id)$$

select @id as id_inout$$

1.5.3 结果

 

+------------+

| id_inner_1 |

+------------+

|         10 |

+------------+

1 row in set (0.01 sec)

 

+------------+

| id_inner_2 |

+------------+

|         11 |

+------------+

1 row in set (0.01 sec)

 

+------------+

| id_inner_3 |

+------------+

|         11 |

+------------+

四、JDBC调用mysql的存储过程

 

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值