Sql 在视图中使用IF-ELSE子句

Sql 在视图中使用IF-ELSE子句,sql,postgresql,Sql,Postgresql,我必须对所有用户使用相同的视图,但我希望为不同的角色返回不同的行 结构应如下所示: CREATE VIEW view_grades AS IF test_special_role() THEN SELECT * FROM "Grades" ELSE SELECT * FROM "Grades" WHERE uid=get_current_uid() ... END IF; 函数test_special_role()返回一个布尔值,对于角色“Pam”为“true”,否则为false。函数ge

我必须对所有用户使用相同的视图,但我希望为不同的角色返回不同的行

结构应如下所示:

CREATE VIEW view_grades AS
IF test_special_role() 
THEN SELECT * FROM "Grades" 
ELSE SELECT * FROM "Grades" WHERE uid=get_current_uid() ...
END IF;
函数test_special_role()返回一个布尔值,对于角色“Pam”为“true”,否则为false。函数get_current_uid()返回当前用户的id(例如:D)

我也试着用“CASE”来代替“IF”,但那没有多大帮助。也许我应该在“WHERE”语句中使用“CASE”,但在“true”语句中(WHERE…nothing…)我会怎么做


数据库:PSQL 10.4

SQL中没有
IF
,但可以使用条件WHERE子句:

CREATE VIEW view_grades AS
SELECT * 
FROM "Grades" 
WHERE (test_special_role() OR uid=get_current_uid());

但更好的解决方案是限制对
“Grades”
表的访问

你当然是对的。我应该试试行级安全性。谢谢你的快速回答,我现在把头撞到墙上…:D