第1关:创建存储过程
任务描述
本关任务:创建一个新的存储过程并调用这个存储过程。
CREATE PROCEDURE proc01()
AS
BEGIN
-- 检查并删除已存在的tmp表
IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'tmp') THEN
DROP TABLE tmp;
END IF;
-- 创建tmp表
CREATE TABLE tmp (
num INTEGER,
name CHAR(20),
course CHAR(20)
);
-- 插入数据并按num和course排序
INSERT INTO tmp
SELECT
s.num,
s.name,
c.name
FROM
student s
JOIN
sel_course sc ON s.num = sc.studentid
JOIN
course c ON sc.courseid = c.id
WHERE
s.dept = 'cs'
ORDER BY
s.num, c.name;
END;
/
-- 调用存储过程(不显示查询结果)
CALL proc01();
第2关:修改存储过程
任务描述
本关任务: 删除存储过程proc01,重新创建存储过程proc01;
-- 删除现有存储过程
DROP PROCEDURE IF EXISTS proc01;
-- 重新创建存储过程proc01
CREATE OR REPLACE PROCEDURE proc01()
AS
BEGIN
-- 1. 删除sel_course表中成绩<60的记录
DELETE FROM sel_course WHERE score < 60;
-- 2. 检查并删除已存在的tmp表
IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'tmp') THEN
DROP TABLE tmp;
END IF;
-- 3. 创建新的tmp表
CREATE TABLE tmp (
num INTEGER,
name CHAR(20),
course CHAR(20),
score INTEGER
);
-- 4. 插入数据并按num和course排序(确保结果顺序)
INSERT INTO tmp
SELECT
s.num,
s.name,
c.name,
sc.score
FROM
student s
JOIN
sel_course sc ON s.num = sc.studentid
JOIN
course c ON sc.courseid = c.id
WHERE
s.dept = 'cs'
ORDER BY
s.num, c.name; -- 按学号升序、课程名升序排列
END;
/
-- 调用存储过程
CALL proc01();
-- 查询tmp表(按相同规则排序)
SELECT * FROM tmp ORDER BY num, course;

被折叠的 条评论
为什么被折叠?



