我正在尝试在Postgresql中创建以下函数
CREATE OR REPLACE FUNCTION emat_proc_ad_user_login(user_id_in character varying, password_in character varying)
RETURNS character varying AS
$BODY$
declare
TESTING character varying(200):='';
BEGIN
raise notice 'before if case';
IF (USER_ID_IN is NULL AND PASSWORD_IN IS NULL) THEN
TESTING:='Username Or Password Cannot Be Blank';
RAISE NOTICE '%',TESTING;
ELSIF (SELECT USER_ID FROM AD_USERMASTER WHERE USER_ID=USER_ID_IN) THEN
IF (SELECT USER_ID FROM AD_USERMASTER WHERE password=password_in) THEN
TESTING:=USER_ID_IN;
RAISE NOTICE '%',TESTING;
ELSE
TESTING:='PASSWORD INCORRECT';
END IF;
ELSE
IF (SELECT USER_ID FROM AD_USERMASTER WHERE password=password_in) THEN
TESTING:='USER ID INCORRECT';
RAISE NOTICE '%',TESTING;
ELSE
raise notice 'first else part';
TESTING:='USER ID AND PASSWORD INCORRECT';
RAISE NOTICE '%',TESTING;
END IF;
END IF;
return TESTING;
END;
$BODY$
在postgresql中运行此脚本时显示错误
ERROR: invalid input syntax for type boolean: "sadmin"
CONTEXT:PL / pgSQL函数emat_proc_ad_user_login(字符 在IF
处,第7行变化,变化
答案 0 :(得分:1)
问题在于包含ELSIF
的行。
IF
或ELSIF
期望一个布尔表达式,但表user_id
中的字段ad_usermaster
似乎是字符串数据类型。 PostgreSQL尝试将查询结果强制转换为布尔值并失败,因为值sadmin
不是有效的布尔值。
正确的解决方案取决于你想要达到的目标,但也许这些是这样的:
ELSIF EXISTS
(SELECT user_id FROM ad_usermaster WHERE user_id = user_id_in)
THEN