第1关 定义一个名为PROC_COUNT的无参数存储过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
USE mydata;
#请在此处添加实现代码
########## Begin ##########
DELIMITER $
CREATE PROCEDURE PROC_COUNT()
BEGIN
    SELECT COUNT(*)
    FROM J
    WHERE JNAME LIKE "%厂%";
END $
DELIMITER ;

CALL PROC_COUNT()
########## End ##########

第2关 定义一个名为PROC_JNAME的有参数存储过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
USE mydata;
#请在此处添加实现代码
########## Begin ##########
DELIMITER $
CREATE PROCEDURE PROC_JNAME(IN city CHAR(2))
BEGIN
    SELECT JNAME
    FROM J
    WHERE J.CITY = city;
END $
DELIMITER ;

########## End ##########
#以下代码禁止删除
CALL PROC_JNAME('天津');

第3关 定义一个名为PROC_JINFO的有参数存储过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
USE mydata;
#请在此处添加实现代码
########## Begin ##########
DELIMITER $
CREATE PROCEDURE PROC_JINFO(IN city CHAR(2))
BEGIN
    SELECT
        JNAME,
        PNAME,
        SUM(QTY) SUM_QTY
    FROM SPJ
    JOIN P USING(PNO)
    JOIN J USING(JNO)
    WHERE J.CITY = city
    GROUP BY JNAME,PNAME
    ORDER BY JNAME,PNAME;
END $
DELIMITER ;
########## End ##########
#以下代码禁止删除
CALL PROC_JINFO('天津');

第4关 定义一个名为PROC_AVGGRADE的有参数存储过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
USE myschool;

#请在此处添加实现代码
########## Begin ##########
DELIMITER $
CREATE PROCEDURE PROC_AVGGRADE(IN name CHAR(9))
BEGIN
    SELECT
        AVG(Grade) AVG_Grade
    FROM SC
    JOIN Course USING(Cno)
    WHERE Cname = name;
END $
DELIMITER ;


########## End ##########
# 以下代码禁止删除
CALL PROC_AVGGRADE('数据库');

第5关 定义一个名为PROC_SINFO的有参数存储过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
USE mydata;

#请在此处添加实现代码
########## Begin ##########
DELIMITER $
CREATE PROCEDURE PROC_SINFO(IN name CHAR(10))
BEGIN  
    SELECT
        JNAME,
        PNAME,
        SUM(QTY) SUM_QTY
    FROM SPJ
    JOIN S USING(SNO)
    JOIN P USING(PNO)
    JOIN J USING(JNO)
    WHERE SNAME = name
    GROUP BY JNAME,PNAME
    ORDER BY JNAME,PNAME;
END $
DELIMITER ;

########## End ##########
#以下代码禁止删除
CALL PROC_SINFO('精益');

第6关 定义一个名为PROC_JSEARCH的有参数存储过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
USE mydata;

#请在此处添加实现代码
########## Begin ##########
DELIMITER $
CREATE PROCEDURE PROC_JSEARCH(IN no CHAR(2))
BEGIN
    SELECT
        SNAME,
        PNAME,
        JNAME
    FROM SPJ
    JOIN S USING(SNO)
    JOIN P USING(PNO)
    JOIN J USING(JNO)
    WHERE SPJ.JNO = no
    ORDER BY SNAME,PNAME;
END $
DELIMITER ;

########## End ##########
#以下代码禁止删除
CALL PROC_JSEARCH('J2');

第7关 定义一个名为PROC_SUPDATE的有参数存储过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
USE mydata;

#请在此处添加实现代码
########## Begin ##########
DELIMITER $
CREATE PROCEDURE PROC_SUPDATE(no CHAR(3),name CHAR(10),city CHAR(10))
BEGIN
    UPDATE S
    SET SNAME = name,
        CITY = city
    WHERE SNO = no;
END $
DELIMITER ;

########## End ##########
#以下代码禁止删除
CALL PROC_SUPDATE('S4', '深技大', '深圳');
SELECT * FROM S;

第8关 定义一个名为PROC_AVGWEIGHT的有参数存储过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
USE mydata;
#请在此处添加实现代码
########## Begin ##########
DELIMITER $
CREATE PROCEDURE PROC_AVGWEIGHT(IN sno CHAR(3),IN jno CHAR(3),OUT AVG_WEIGHT INT)
BEGIN
    SELECT
        SUM(WEIGHT*QTY)/SUM(QTY)
    INTO AVG_WEIGHT
    FROM SPJ
    JOIN P USING(PNO)
    WHERE SPJ.SNO = sno AND SPJ.JNO = jno
    GROUP BY SPJ.SNO,SPJ.JNO;
END $
DELIMITER ;

########## End ##########
CALL PROC_AVGWEIGHT('S2','J2',@AVG_WEIGHT);
SELECT @AVG_WEIGHT;

第9关 定义一个名为PROC_JGRADE的有参数存储过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
USE mydata;
#请在此处添加实现代码
########## Begin ##########
DELIMITER $
CREATE PROCEDURE PROC_JGRADE(IN jno CHAR(3),OUT JTYPE CHAR(1))
BEGIN
    SELECT
        CASE
            WHEN SUM(QTY) > 2000 THEN 'L'
            WHEN SUM(QTY) BETWEEN 1000 AND 2000 THEN 'M'
            ELSE 'S'
        END  type
        INTO JTYPE
    FROM SPJ
    WHERE SPJ.JNO = jno;
END$
DELIMITER ;

########## End ##########
#以下代码禁止删除
CALL PROC_JGRADE('J1', @JTYPE);
SELECT @JTYPE;