sql语句存储过程的写法(mysql和java)
1、2、题目案例:(仅供参考,具体情况需要具体分析)创建一个名为stu_pr的存储过程,该存储过程能查询出系名及各系教师的人数。
·
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);
更多推荐
已为社区贡献8条内容
所有评论(0)