1、对于存储过程中的局部变量写法可随意,但对于存储过程外的局部变量前,要加@标识。如@Cname

补充:存储过程有三类参数,分别是输入参数IN,输出参数OUT,输入输出参数INOUT。

对于IN可缺省,其余不能。

2、题目案例:(仅供参考,具体情况需要具体分析)

(1)创建一个名为stu_pr的存储过程,该存储过程能查询出系名及各系教师的人数

DELIMITER $$
CREATE PROCEDURE str_pr()
BEGIN
	SELECT Tdept,COUNT(Tno) FROM Teacher GROUP BY Tdept;
END;
$$
DELIMITER ;
/*调用存储过程*/
CALL str_pr();

(2)创建一个名为stu_proc1的存储过程,查询某系、某姓名的学生的学号、姓名、年龄,选修课程名和成绩。系名和姓名在调用该存储过程时输入。

DELIMITER $$
CREATE PROCEDURE stu_proc1(Sdept1 Varchar(20),Sname1 Varchar(20))
BEGIN
	SELECT S.Sno,Sname,Sage,Cname,Grade from Student S,Course C,SC
    WHERE S.Sno = SC.Sno AND SC.Cno = C.Cno AND S.Sdept = Sdept1 AND S.Sname = Sname1;
END;
$$
DELIMITER ;
/*调用存储过程*/
CALL stu_proc1('CS','LiYong');

(3) 创建一个名为stu_proc2的存储过程,查询某系学生的选课记录。如果存储过程调用者无法明确系别,则默认查询所有学生的选课记录。系名在调用该存储过程时输入。

DELIMITER $$
CREATE PROCEDURE stu_proc2(dept Varchar(20))
BEGIN
	IF dept IS NULL THEN
    SELECT Sname,Sdept,S.Sno,Cno,Grade
    FROM Student S,SC
    WHERE S.Sno = SC.Sno;
    ELSE
    SELECT Sname,Sdept,S.Sno,Cno,Grade
    FROM Student S,SC
    WHERE S.Sno = SC.Sno AND S.Sdept = dept;
    END IF;
END;
$$
DELIMITER ;

4、创建一个名为course_sum的存储过程,可查询某门课程的选修人数及总成绩。选修人数和总成绩要作为输出参数输出。

DELIMITER $$
CREATE PROCEDURE course_sum(
					IN Cname1 Varchar(40),
                    OUT CountRenShu INT,
                    OUT SumGrade SMALLINT
                    )
BEGIN
	SELECT Count(*),Sum(Grade)
    INTO CountRenShu,SumGrade
    FROM Course C,SC
    WHERE C.Cno = SC.Cno AND Cname = Cname1;
END;
$$
DELIMITER ;

调用时需要使用局部变量:

SET @Cname = 'Math';
CALL course_sum(@Cname,@CountRenShu,@SumGrade);
SELECT @Cname,@CountRenShu,@SumGrade;

 5、创建一个名为update_sc的存储过程,可更新某学号、某课程号的学生的课程成绩。学号、课程号、更新的成绩由调用时输入。

DELIMITER $$
CREATE PROCEDURE update_sc(
					IN Sno1 Varchar(9),
                    IN Cno1 Varchar(4),
                    IN NewGrade SMALLINT)
BEGIN
	UPDATE SC SET Grade = NewGrade
    WHERE Sno = Sno1 AND Cno = Cno1;
END;
$$
DELIMITER ;

调用时需要使用局部变量:

SET @Sno = '202015121';
SET @Cno = '1';
SET @NewGrade = 100;
CALL update_sc(@Sno,@Cno,@NewGrade);
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐