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

MySQL存储进程理会

发布时间:2017-07-22 07:11:37 所属栏目:编程 来源:站长网
导读:副问题#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 ;

(编辑:湖南网)

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

热点阅读