我已经创建了一个函数“登录”返回给我的用户,如果匹配的用户名或电子邮件作为JSON和参数是JSON,参数是JSON,我所有的其他功能的工作,但这一个是给我的错误“无效的输入语法类型JSON”。我不知道为什么,我已经检查了JSON验证,和所有其他解决方案,以解决它,但失败了,我的一整天都去了地狱,因为它,请帮助我修复它。这是我的代码:
DROP FUNCTION IF EXISTS login;
CREATE OR REPLACE FUNCTION login(data JSONB)
RETURNS JSONB AS $$
DECLARE
_user JSONB = NULL::JSONB;
_username VARCHAR = coalesce((data->>'username')::varchar, NULL);
_email VARCHAR = coalesce((data->>'email')::varchar, NULL);
BEGIN
-- check if all required variables are available or not
IF _username IS NULL OR _email IS NULL THEN
RETURN JSON_BUILD_OBJECT(
'status', 'failed',
CASE WHEN _username IS NULL THEN 'username' ELSE 'email' END, 'required'
);
END IF;
SELECT username, email INTO _user
FROM users
WHERE username = _username OR email = _email;
RETURN JSON_BUILD_OBJECT(
'status', CASE WHEN _user IS NULL THEN 'failed' ELSE 'success' END,
'user', _user
);
END;
$$ LANGUAGE plpgsql;
字符串
这是我的输入格式:
SELECT * FROM login('
{"username":"raihan123","email":"[email protected]"}
');
型
这是我得到的错误:
ERROR: Token "raihan123" is invalid.invalid input syntax for type json
ERROR: invalid input syntax for type json
SQL state: 22P02
Detail: Token "raihan123" is invalid.
Context: JSON data, line 1: raihan123
PL/pgSQL function login(jsonb) line 15 at SQL statement
型
我累了,如果你能帮我修好它,我将不胜感激。提前感谢!
如果有人想知道我的表有数据,我可以拉数据使用选择命令,并已检查它
SELECT * FROM users WHERE username='raihan123' OR email='[email protected]'
型
请帮我修复它,我的一整天都在寻找修复它的方法
1条答案
按热度按时间h9vpoimq1#
你没有分享你的table的装饰,但这是问题所在:
电子邮件INTO _user
你的列email很可能是一个VARCHAR,你的variable _user被声明为JSONB。这是行不通的。
另一个问题是username,因为它应该在哪里?你没有一个变量来表示它,除非它应该是json object _user的一部分。
我的建议是,你需要这个解决方案:
_user VARCHAR; --不是jsonb,你不需要NULL,因为它已经是NULL了
你仍然需要决定如何处理用户名。
注意事项:请不要全部使用大写字母,因为这可能会传达出由于错误而导致的沮丧。请记住,保持冷静有助于减少错误并鼓励更多的帮助。