我想定义一个函数,用来进行用户登录和用户权限判断,有学生、教师、管理员、信息员四种角色(其中信息员是学生的一种角色),这四个角色被存在3张表(Student、Supervisor、Administrator)中,每个表都有用户ID,用户密码和用户权限三个字段,用户权限取值范围为0-3,1代表学生、2代表信息员、3代表老师、0代表管理员,我想在mysql中创建function,接收用户名和密码两个参数,返回一个flag的整型,返回不同的整数,代表不同的角色,现在函数写出来了,但是不能执行,小弟新手,请高手帮忙解决一下,先说声谢啦~~
代码如下:
delimiter $$
DROP FUNCTION IF EXISTS sp_login $$
CREATE FUNCTION sp_login( userID VARCHAR(20), passPwd VARCHAR(20)) RETURNS INT(1)
BEGIN
DECLARE flag INT default 5;
IF SELECT Stu1.Authority FROM (SELECT * from Student where Student.StuID = userID and Student.StuPwd = passPwd)Stu1
where Stu1.Authority = '1' > 0 THEN
SET flag = 1;
RETURN flag;
ELSEIF SELECT * from Supervisor where Supervisor.SVID = userID and Supervisor.SVPwd = passPwd > 0 THEN
SET flag = 3;
RETURN flag;
ELSEIF SELECT Stu2.Authority FROM (SELECT * from Student where Student.StuID = userID and Student.StuPwd = passPwd)Stu2
where Stu2.Authority = '2' > 0 THEN
SET flag = 2;
RETURN flag;
ELSEIF SELECT * from Administrator where Administrator.AdminID = userID and Administrator.AdminPwd = passPwd > 0 THEN
SET flag = 0;
RETURN flag;
ELSE
RETURN flag;
END IF;
END $$delimiter ;
代码如下:
delimiter $$
DROP FUNCTION IF EXISTS sp_login $$
CREATE FUNCTION sp_login( userID VARCHAR(20), passPwd VARCHAR(20)) RETURNS INT(1)
BEGIN
DECLARE flag INT default 5;
IF SELECT Stu1.Authority FROM (SELECT * from Student where Student.StuID = userID and Student.StuPwd = passPwd)Stu1
where Stu1.Authority = '1' > 0 THEN
SET flag = 1;
RETURN flag;
ELSEIF SELECT * from Supervisor where Supervisor.SVID = userID and Supervisor.SVPwd = passPwd > 0 THEN
SET flag = 3;
RETURN flag;
ELSEIF SELECT Stu2.Authority FROM (SELECT * from Student where Student.StuID = userID and Student.StuPwd = passPwd)Stu2
where Stu2.Authority = '2' > 0 THEN
SET flag = 2;
RETURN flag;
ELSEIF SELECT * from Administrator where Administrator.AdminID = userID and Administrator.AdminPwd = passPwd > 0 THEN
SET flag = 0;
RETURN flag;
ELSE
RETURN flag;
END IF;
END $$delimiter ;
解决方案 »
- 安装mysql过程中,check requirement步骤,Visual Studio Tools for Office 2010 Runtime 循环安装?
- Mysql存储过程的合并语句?
- mysql 统计语句 年龄段
- 如何通过网页打开数据库
- 为什么插入数据出错?????
- mysql 145错误处理 (非常急)
- 关于制定数字类型长度的问题,好像输入的数据不受制定长度限制。
- 求MYSQL的教程书
- 请教如何将下面的mssql表和存储过程转成mysql的表存储过程
- Unknown column 'limitation' in 'field list'
- Mysql 无法启动---121210 15:03:02 InnoDB: Page dump in ascii and hex (16384 bytes):
- MySQL用户权限可以在数据库中的表进行限制吗?限制某个用户只读写某个表?
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT Stu1.Authority FROM (SELECT * from Student where Student.StuID = userID a' at line 4
是无法创建
改为如下SELECT count(*) into iCnt from Student where Student.StuID = userID and Student.StuPwd = passPwd and Authority = '1' > 0 IF iCnt > 0 THEN
SET flag = 1;
CREATE FUNCTION sp_login( userID VARCHAR(20), passPwd VARCHAR(20)) RETURNS INT(1)
里面的returns必须要加上吗?