MySQL存储进程理会
(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 ; (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |