使用postgresql函数声明并返回json变量

new9mtju  于 2023-02-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(205)

我试图创建一个函数PostgreSQL来检查用户是否存在于表users中,方法是创建一个返回JSON变量的函数。

CREATE OR REPLACE FUNCTION login( uname character varying(55),pswd character varying(55)) 
RETURNS json AS
$$
DECLARE
  msg json ;
BEGIN
IF ((SELECT COUNT(*) FROM (SELECT * FROM users WHERE username=uname and password=pswd) AS row_count) =1)
THEN
msg="{ 'stat' : 'active' }";
    RETURN msg;
ELSE
msg="{ 'stat' : 'inactive' }";
    RETURN msg;
END IF;    
END;
$$ LANGUAGE plpgsql;

但当我尝试使用它的返回我以下错误:错误:列“{ 'stat':'inactive' }”不存在

6tdlim6h

6tdlim6h1#

在SQL(和PL/pgSQL)中,字符串常量需要用单引号括起来,而JSON对键和值使用双引号,所以{ 'stat' : 'active' }也是无效的JSON。
您需要:

msg := '{"stat": "active"}';

实际上并不需要该变量,您也可以使用:

return '{"stat": "active"}';

注意,使用EXISTS条件可以使IF条件更有效一些:

if exists (SELECT * FROM users WHERE username=uname and password=pswd) 
then 
  ...

相关问题