plpgsql中case语句的返回值

beo*_*ver 2 sql postgresql case syntax-error plpgsql

如何从使用语句的用户定义函数设置值(或直接返回值)case

create function is_bar(email varchar) returns boolean as
$$
declare returnValue boolean;
begin
  select case when exists
  (select * from (users join user_roles on users.userID = user_roles.userID)
  where user_email=email and user_role='bar')
    then (returnValue := TRUE);
    else (returnValue := FALSE);
  end;
  return returnValue;
end;
$$ language plpgsql;
Run Code Online (Sandbox Code Playgroud)

给我:

ERROR:  syntax error at or near ":="
LINE 8: then (returnValue := TRUE);
Run Code Online (Sandbox Code Playgroud)

Pav*_*ule 5

所描述问题的原因是 SQL(功能)CASE语句和 PLpgSQL(过程)CASE语句的更改。

SQL CASE(功能):

BEGIN
   RETURN CASE WHEN EXISTS(..)
               THEN true /* value */
               ELSE false END; /* ended by END */
END;
Run Code Online (Sandbox Code Playgroud)

PLpgSQL(过程)CASE

BEGIN
  CASE WHEN EXISTS(..)
    THEN
       RETURN true; /* statement */ 
    ELSE
       RETURN false;
  END CASE; /* ended by END CASE */
END;
Run Code Online (Sandbox Code Playgroud)

还有一些其他例子(相同的结果):

a := CASE WHEN b < 10 THEN true ELSE false END;
a := b < 10;
CASE WHEN b < 10 THEN
  a := true;
ELSE
  a := false;
END CASE;
Run Code Online (Sandbox Code Playgroud)