Mysql-学习笔记(==》存储过程 九)

1、存储过程概念
在大型数据库系统中,一组为了完成特定功能的sql语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。


2、建立存储过程
delimiter//
create procedure 过程名(参数名 参数类型)
begin
存储过程要执行的语句;

end//
delimiter;

建立添加数据的存储过程
修改数据的存储过程
删除...
查询...
某些项目众的业务处理的存储过程


3、存储过程使用的语句
if then
end if;

while do
end while;

repeat 循环语句 1+2+3+4+...+100=5050;

case switch


调用存储过程
call 过程名(实参表)

删除存储过程

drop procedure 过程名;


------------------------------------

 

USE db;

CREATE TABLE sss(
sid INT UNSIGNED NOT NULL AUTO_INCREMENT,
sname VARCHAR(10) NOT NULL,
sscore TINYINT UNSIGNED,
saddress VARCHAR(30),
stel BIGINT UNSIGNED,
PRIMARY KEY(sid)
)ENGINE=MYISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
INSERT INTO sss VALUES(NULL,'甄子丹',90,'北京',18298375932);
INSERT INTO sss VALUES(NULL,'李连杰',50,'湖北省武汉市',18298375932);
INSERT INTO sss VALUES(NULL,'杨幂',20,'上海',18298375932);
INSERT INTO sss VALUES(NULL,'李晨',30,'济南',18298375932);


SELECT * FROM sss;

成绩在20-59之间的加分
地址包含哪个地区的字符的 加多少分

-- 查看db数据库中所有的存储过程信息
SHOW PROCEDURE STATUS WHERE Db='db';

CALL sssadd(6);-- 传参数(相当于调用方法)
-- 建立存储过程(相当于java的类)
DELIMITER//
CREATE PROCEDURE sssadd(i INT)
BEGIN
DECLARE sc TINYINT;
DECLARE sd VARCHAR(30);
SELECT sscore, saddress INTO sc,sd FROM sss WHERE sid=i;
IF sc>=20 AND sc<60 THEN
IF sd LIKE '%上海%' THEN
UPDATE sss SET sscore=sscore+1 WHERE sid=i;
END IF;

IF sd LIKE '%济南%' THEN
UPDATE sss SET sscore=sscore+5 WHERE sid=i;
END IF;
END IF;
END//
DELIMITER;

DROP PROCEDURE sssadd;

-- 另外一种if then.. elseif... then else... end if
DELIMITER//
CREATE PROCEDURE sssadd(i INT)
BEGIN
DECLARE sc TINYINT;
DECLARE sd VARCHAR(30);
SELECT sscore, saddress INTO sc,sd FROM sss WHERE sid=i;
IF sc>=20 AND sc<60 THEN
IF sd LIKE '%上海%' THEN
UPDATE sss SET sscore=sscore+1 WHERE sid=i;
ELSEIF sd LIKE '%济南%' THEN
UPDATE sss SET sscore=sscore+5 WHERE sid=i;
ELSE
UPDATE sss SET sscore=sscore+3 WHERE sid=i;
END IF;
END IF;
END//
DELIMITER;


-- 条件循环 declare 声明变量 set 设置变量
DELIMITER//
CREATE PROCEDURE ddd()
BEGIN
DECLARE n INT;
SET n=0;
SET @x=0;
REPEAT
SET @x=@x+1;
SET n=n+1;
UNTIL n>100 END REPEAT;
END//
DELIMITER;
DROP PROCEDURE ddd;
CALL ddd();

SELECT @x;

 

posted @ 2016-12-09 10:01  芜明-追星  阅读(215)  评论(0编辑  收藏  举报