如果条件为

时间:2017-01-09 07:17:44

标签: postgresql

我正在尝试在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行变化,变化

1 个答案:

答案 0 :(得分:1)

问题在于包含ELSIF的行。

IFELSIF期望一个布尔表达式,但表user_id中的字段ad_usermaster似乎是字符串数据类型。 PostgreSQL尝试将查询结果强制转换为布尔值并失败,因为值sadmin不是有效的布尔值。

正确的解决方案取决于你想要达到的目标,但也许这些是这样的:

ELSIF EXISTS
   (SELECT user_id FROM ad_usermaster WHERE user_id = user_id_in)
THEN