【发布时间】:2023-04-01 06:47:02
【问题描述】:
我正在使用 mysql 视图,我想在该视图上使用 IF ELSE 语句。它给了我这样的错误
#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 'if(getUser()="") THEN]
select hie_code_1 from hs_hr_emp_level L,hs_hr_u' at line 7
这是我的看法
drop view if exists vw_hs_hr_employee;
CREATE VIEW vw_hs_hr_employee as
select * from hs_hr_employee where
hie_code_1 in
(
BEGIN
if(getUser()="") THEN
select hie_code_1 from hs_hr_emp_level L
ELSE
select hie_code_1 from hs_hr_emp_level L,hs_hr_users U
where L.emp_number=U.emp_number
and L.emp_number=getUser()
and ( U.def_level=1 or U.def_level=4 )
END if
)
已编辑 这是我的功能
CREATE FUNCTION `getUser`() RETURNS char(50) CHARSET latin1
RETURN @user
如果有人可以帮助我,谢谢
更新的查询
CREATE VIEW vw_hs_hr_employee as
select * from hs_hr_employee where
CASE getUser()
WHEN ''
THEN
select hie_code_1 from hs_hr_emp_level L
END
hie_code_1 in ( select hie_code_1 from hs_hr_emp_level L,hs_hr_users U where L.emp_number=U.emp_number and L.emp_number=getUser() and ( U.def_level=1 or U.def_level=4 ) )
or
hie_code_3 in ( select hie_code_3 from hs_hr_emp_level L,hs_hr_users U where L.emp_number=U.emp_number and L.emp_number=getUser() and U.def_level=2 )
or
hie_code_4 in ( select hie_code_4 from hs_hr_emp_level L,hs_hr_users U where L.emp_number=U.emp_number and L.emp_number=getUser() and U.def_level=3 )
给出错误syntax to use near 'select hie_code_1 from hs_hr_emp_level L END hie_code_1 in ( select hie_code_' at line 6
完成
drop view if exists vw_hs_hr_employee;
CREATE VIEW vw_hs_hr_employee as
select * from hs_hr_employee e where CASE WHEN getUser()=''
THEN
e.emp_number is not null
ELSE
hie_code_1 in ( select hie_code_1 from hs_hr_emp_level L,hs_hr_users U where L.emp_number=U.emp_number and L.emp_number=getUser() and ( U.def_level=1 or U.def_level=4 ) )
or
hie_code_3 in ( select hie_code_3 from hs_hr_emp_level L,hs_hr_users U where L.emp_number=U.emp_number and L.emp_number=getUser() and U.def_level=2 )
or
hie_code_4 in ( select hie_code_4 from hs_hr_emp_level L,hs_hr_users U where L.emp_number=U.emp_number and L.emp_number=getUser() and U.def_level=3 )
end
【问题讨论】:
-
getUser()应该是 CURRENT_USER() or USER() 吗? -
另外,视图应该是一个普通的 SELECT 语句,并且它们不允许像存储过程那样进行块流控制。因此,您需要使用 IF() or CASE...WHEN..END
-
感谢您的回答我更新了查询,请参阅