2017-01-09 2 views
-1

Я пытаюсь создать следующую функцию в 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

+0

Вы могли послать какой набор параметров сделает вашу функцию аварии – jlandercy

+0

ВЫБЕРИТЕ emat_proc_ad_user_login ( «sadmin ',' admin ' ); и SELECT emat_proc_ad_user_login ( 'sjh', 'sdnj' ); –

ответ

1

Проблема связана с линией, содержащей ELSIF.

IF или ELSIF ожидать логическое выражение, но поле user_id из таблицы кажется строкового типа данных. PostgreSQL пытается передать результат запроса в логическое и терпит неудачу, потому что значение sadmin не является допустимым булевым.

Правильное решение зависит от того, что вы пытаетесь достичь, но, возможно, это что-то вдоль этих линий:

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

Благодарим за ответ сразу за мой запрос и решение, о которых вы упомянули, о его работоспособности. –

Смежные вопросы