加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL存储过程解析

发布时间:2017-02-19 04:40:08 所属栏目:MySql教程 来源:站长网
导读:副标题#e# 1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(StoredProcedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有

(4). 变量

Ⅰ. 变量定义

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 number(8,2) DEFAULT 9.95;

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

http://www.bianceng.cn

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客户端使用用户变量

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   |

+------+

ⅱ. 在存储过程中使用用户变量

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

mysql > SET @greeting='Hello';

mysql > CALL GreetWorld( );

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

| CONCAT(@greeting,' World') |

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

|  Hello World               |

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

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

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

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

mysql> CALL p1( );

mysql> CALL p2( );

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

| CONCAT('Last procedure was ',@last_proc |

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

| Last procedure was p1                         |

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

注意:

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

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

(5). 注释

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

双模杠:--

该风格一般用于单行注释

c风格: 一般用于多行注释

例如:

mysql > DELIMITER //

mysql > CREATE PROCEDURE proc1 --name存储过程名

-> (IN parameter1 INTEGER)

-> BEGIN

-> DECLARE variable1 CHAR(10);

-> IF parameter1 = 17 THEN

-> SET variable1 = 'birds';

-> ELSE

-> SET variable1 = 'beasts';

-> END IF;

-> INSERT INTO table1 VALUES (variable1);

-> END

-> //

mysql > DELIMITER ;

4. MySQL存储过程的调用

用call和你过程名以及一个括号,括号里面根据需要,加入参数,参数包括输入参数、输出参数、输入输出参数。具体的调用方法可以参看上面的例子。

5. MySQL存储过程的查询

我们像知道一个数据库下面有那些表,我们一般采用showtables;进行查看。那么我们要查看某个数据库下面的存储过程,是否也可以采用呢?答案是,我们可以查看某个数据库下面的存储过程,但是是令一钟方式。

我们可以用

select namefrom mysql.proc where db=’数据库名’;

或者

selectroutine_name from information_schema.routines whereroutine_schema='数据库名';

或者

show procedurestatus where db='数据库名';

进行查询。

如果我们想知道,某个存储过程的详细,那我们又该怎么做呢?是不是也可以像操作表一样用describe表名进行查看呢?

答案是:我们可以查看存储过程的详细,但是需要用另一种方法:

SHOW CREATEPROCEDURE 数据库.存储过程名;

就可以查看当前存储过程的详细。

6. MySQL存储过程的修改

ALTER PROCEDURE

更改用CREATE PROCEDURE建立的预先指定的存储过程,其不会影响相关存储过程或存储功能。

7. MySQL存储过程的删除

删除一个存储过程比较简单,和删除表一样:

DROPPROCEDURE

从MySQL的表格中删除一个或多个存储过程。

8. MySQL存储过程的控制语句

(1).变量作用域

内部的变量在其作用域范围内享有更高的优先权,当执行到end。变量时,内部变量消失,此时已经在其作用域外,变量不再可见了,应为在存储

过程外再也不能找到这个申明的变量,但是你可以通过out参数或者将其值指派

给会话变量来保存其值。

mysql > DELIMITER //

mysql > CREATE PROCEDURE proc3()

     -> begin

     -> declare x1 varchar(5) default 'outer';

     -> begin

     -> declare x1 varchar(5) default 'inner';

     -> select x1;

     -> end;

     -> select x1;

     -> end;

     -> //

mysql > DELIMITER ;

 (2). 条件语句

Ⅰ. if-then-else语句

mysql > DELIMITER //

mysql > CREATE PROCEDURE proc2(IN parameter int)

     -> begin

     -> declare var int;

     -> set var=parameter+1;

     -> if var=0 then

     -> insert into t values(17);

     -> end if;

     -> if parameter=0 then

     -> update t set s1=s1+1;

     -> else

     -> update t set s1=s1+2;

     -> end if;

     -> end;

     -> //

mysql > DELIMITER ;

Ⅱ. case语句:

mysql > DELIMITER //

mysql > CREATE PROCEDURE proc3 (in parameter int)

     -> begin

     -> declare var int;

     -> set var=parameter+1;

     -> case var

     -> when 0 then

     -> insert into t values(17);

     -> when 1 then

     -> insert into t values(18);

     -> else

     -> insert into t values(19);

     -> end case;

     -> end;

     -> //

mysql > DELIMITER ;

(3).循环语句

Ⅰ. while ···· endwhile:

mysql > DELIMITER //

mysql > CREATE PROCEDURE proc4()

     -> begin

     -> declare var int;

     -> set var=0;

     -> while var<6 do

     -> insert into t values(var);

     -> set var=var+1;

     -> end while;

     -> end;

     -> //

mysql > DELIMITER ;

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读