赞
踩
CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body
[ IN | OUT | INOUT ] param_name type
BEGIN ...... END$$
-- $$ 可以自定义为其他作为结束符
DELIMITER $$
CREATE PROCEDURE nbsp_procedure(IN 参数名 参数类型)
BEGIN .... END
-- 声明语句结束符,可以自定义:
delimiter $$
-- 创建存储过程,名为 nbsp_procedure 参数为空, 执行输出 'hello world'
create procedure nbsp_procedure () -- 默认当前用户下创建 create definer = `nbsp`@`%` procedure nbsp_procedure ()
begin
select 'hello world';
end $$
-- 声明语句结束符
delimiter ;
-- 调用存储过程
call nbsp_procedure();
-- 删除存储过程
drop procedure nbsp_procedure;
-- 语法 declare 变量名 变量类型 [default 默认值] -- 举例 declare name varchar(32) '张三' -- set 赋值 delimiter $$ drop procedure if exists var01$$ create procedure var01() begin -- 声明变量 declare username varchar(32) default '张三'; -- 为变量赋值 set username = '李四'; select username; end $$ delimiter ; call var01();
delimiter $$
drop procedure if exists var02$$
-- 创建存储过程
create procedure var02()
begin
set @username='张三';
end $$
delimiter ;
-- 调用存储过程
call var02();
-- 查询会话变量的值
select @username;
set @username='wangwu';
delimiter $$
drop procedure if exists var03$$
-- 传入两个变量,第一个为输入in变量,第二个为是输出out变量。当输入用户id 时,返回用户名。
create procedure var03(in id int,out username varchar(32))
begin
select id,username;
-- select 'procedure into username' into username;
-- set username='procedure into username'
end $$
delimiter ;
-- 在还未调用存储过程时,我们发现此时的会话变量@username的值依然为 wangwu
select @username;
call var03(35,@username);
-- 此时会话变量为NULL
select @username;
IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list]...
[ELSE statement_list]
END IF
------------------------------------------------------------------------------------------
IF 判断条件 THEN 执行语句
[ELSELF 判断条件 THEN 执行语句]
[ELSE 执行语句]
END IF
set @username = '张三风'; -- 存过创建失败,不清楚原因 delimiter $$ drop procedure if exists if01$$ create procedure if01() begin IF @username = '张三' THEN select concat('我是',@username); ELSEIF @username = '张三风' THEN select '张三是我徒弟'; ELSE select '我是栗四,不认识张三'; END IF; end $$ delimiter ; call if01;
CASE
WHEN expr_condition THEN ...do something...
WHEN expr_condition THEN ...do something...
....多个 WHEN THEN 语句.....
[ELSE ...do something...]
END CASE;
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list]...
[ELSE statement_list]
END CASE
------------------------------------------------------------------
CASE 参数变量
WHEN 参数变量1 THEN 执行语句]
[WHEN 参数变量2 THEN 执行语句]
[ELSE 执行语句]
END CASE
DELIMITER $$ CREATE PROCEDURE proc1(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; $$ DELIMITER ;
[begin_label:] LOOP
statement_list ;
END LOOP [begin_label];
------------------------------------------------------------------
循环名: loop
-- 循环体
执行语句;
end loop 循环名;
-- 需求: 打印1-10,输出结果为 1,2,3,4......9,10 -- 如果存在loop_test,则先删除 drop procedure if exists loop_test; delimiter $$ -- 创建存储过程loop_test create procedure loop_test() begin declare c_index int default 1; declare result_str varchar(256) default '1'; cnt: loop -- 循环10次,则跳出循环 if c_index >= 10 then leave cnt; end if; -- 自增 set c_index = c_index + 1; -- 拼接 select concat(result_str, ',', c_index) into result_str; end loop cnt; -- 查询结果 select result_str; end $$ delimiter ; call loop_test();
public void loop_test() {
String result_str = "1";
int c_index = 1;
while (true) {
if (c_index >= 10) {
break;
}
c_index = c_index + 1;
result_str = result_str + "," + c_index;
}
System.out.println(result_str);
}
[WHILE标注] : WHILE 条件表达式 DO
执行语句
END LOOP [WHILE标注];
drop procedure if exists sp_flow_while; delimiter $$ -- 创建存储过程sp_flow_while create procedure sp_flow_while() begin declare c_index int default 1; -- 收集结果集字符串 declare result_str varchar(256) default '1'; while c_index < 10 do set c_index = c_index + 1; set result_str = concat(result_str, ',', c_index); end while; -- 查询结果 select result_str; end $$ delimiter ; call sp_flow_while();
[REPEAT标注]:REPEAT
执行语句
UNTIL 条件表达式
END REPEAT [REPEAT标注]
drop procedure if exists test; -- 如果存在test存储过程则删除
delimiter $$ -- 定义标识符为双斜杠
create procedure test() -- 创建无参存储过程,名称为test
begin
declare i int default 6; -- 申明变量
repeat
insert into test values (i); -- 往test表添加数据
set i = i + 1; -- 循环一次,i加一
until i > 10 end repeat; -- 结束循环的条件: 当i大于10时跳出repeat循环
select * from test; -- 查看test表数据
end;
$$ -- 结束定义语句
delimiter ;
ITERATE [LOOP/REPEAT/WHILE标注]
drop procedure if exists test; -- 如果存在test存储过程则删除 delimiter $$ -- 定义标识符为双斜杠 create procedure test() -- 创建无参存储过程,名称为test begin declare i int(11) default 0; -- 申明变量 myloop:loop set i = i + 1; if i < 5 then iterate myloop; -- 跳过本次循环 elseif i > 8 then leave myloop; end if; insert into test values (i); end loop myloop; select * from test; end; $$ delimiter ; -- 结束定义语句
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。