【问题标题】:invalid input syntax for type boolean in if conditionif 条件中布尔类型的输入语法无效
【发布时间】:2017-01-09 07:17:44
【问题描述】:

我正在尝试在 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"

上下文:PL/pgSQL 函数 emat_proc_ad_user_login(字符 变化,字符变化)第 7 行在 IF

【问题讨论】:

  • 你能发送哪些参数使你的函数崩溃
  • 选择 emat_proc_ad_user_login('sadmin','admin');和 SELECT emat_proc_ad_user_login('sjh','sdnj');

标签: postgresql


【解决方案1】:

问题在于包含ELSIF 的行。

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

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

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

【讨论】:

  • 感谢您立即回复我的查询和您提到的解决方案,它工作正常。
猜你喜欢
  • 1970-01-01
  • 2021-04-14
  • 2012-11-09
  • 1970-01-01
  • 2021-10-08
  • 2021-11-04
  • 1970-01-01
  • 2018-05-22
  • 2021-05-06
相关资源
最近更新 更多