第15章_存储过程

芳华梦落 2022-10-21 53 10/21

#第15章_存储过程与存储函数
#存储过程练习

#0.准备工作
CREATE DATABASE test15_pro_func;
USE test15_pro_func;

#1. 创建存储过程insert_user(),实现传入用户名和密码,插入到admin表中

CREATE TABLE admin(
id INT PRIMARY KEY AUTO_INCREMENT,
user_name VARCHAR(15) NOT NULL,
pwd VARCHAR(25) NOT NULL
);
DELIMITER //
CREATE PROCEDURE insert_user(IN username VARCHAR(20),IN loginpwd VARCHAR(20))
BEGIN
INSERT INTO admin(user_name,pwd)
VALUES(username,loginpwd);
END//
DELIMITER ;
#调用
CALL insert_user('sunzhe','123456');
SELECT * FROM admin;

#2. 创建存储过程get_phone(),实现传入女神编号,返回女神姓名和女神电话

CREATE TABLE beauty(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(15) NOT NULL,
phone VARCHAR(15) UNIQUE,
birth DATE
);
INSERT INTO beauty(NAME,phone,birth)
VALUES
('朱茵','13201233453','1982-02-12'),
('孙燕姿','13501233653','1980-12-09'),
('田馥甄','13651238755','1983-08-21'),
('邓紫棋','17843283452','1991-11-12'),
('刘若英','18635575464','1989-05-18'),
('杨超越','13761238755','1994-05-11');
DELIMITER //
CREATE PROCEDURE get_phone(IN id INT,OUT NAME VARCHAR(20),OUT phone VARCHAR(20))
BEGIN
SELECT b.name,b.phone INTO NAME,phone
FROM beauty b
WHERE b.id=id;
END //
DELIMITER ;
#调用
CALL get_phone(1,@name,@phone)
SELECT @name,@phone;

#3. 创建存储过程date_diff(),实现传入两个女神生日,返回日期间隔大小

DELIMITER //
CREATE PROCEDURE date_diff(IN birth1 DATE,IN birth2 DATE,OUT result INT)
BEGIN
SELECT DATEDIFF(birth1,birth2) INTO result;
END //
DELIMITER ;
#调用
SET @birth1='1992-09-08';
SET @birth2='1989-01-03';
CALL date_diff(@birth1,@birth2,@result);
SELECT @result;

#4. 创建存储过程format_date(),实现传入一个日期,格式化成xx年xx月xx日并返回

DELIMITER //
CREATE PROCEDURE format_date(IN mydate DATETIME,OUT strdate VARCHAR(20))
BEGIN
SELECT DATE_FORMAT(mydate,'%y年%m月%d日') INTO strdate;
END //
DELIMITER ;
#第一种调用方法:
CALL format_date('1992-02-03',@strdate);
SELECT @strdate;
#第二种调用方法:
SET @mydate='1992-02-03';
CALL format_date(@mydate,@strdate);
SELECT @strdate;

#5. 创建存储过程beauty_limit(),根据传入的起始索引和条目数,查询女神表的记录
#创建带inout模式参数的存储过程

DELIMITER //
CREATE PROCEDURE beauty_limit(IN startindex INT,IN size INT)
BEGIN
SELECT * FROM beauty LIMIT startindex,size;
END //
DELIMITER ;
#调用
CALL beauty_limit(1,3);

#6. 传入a和b两个值,最终a和b都翻倍并返回

DELIMITER //
CREATE PROCEDURE add_double(INOUT a INT,INOUT b INT)
BEGIN
SET a=a*2;
SET b=b*2;
END //
DELIMITER ;
#调用
SET @a=2,@b=2;
CALL add_double(@a,@b);
SELECT @a,@b;

#7. 删除题目5的存储过程

DROP PROCEDURE beauty_limit;

#8. 查看题目6中存储过程的信息

SHOW CREATE PROCEDURE add_double;
SHOW PROCEDURE STATUS LIKE 'add_double';
- THE END -

芳华梦落

10月21日17:17

最后修改:2022年10月21日
1

非特殊说明,本博所有文章均为博主原创。