Как использовать IF / THEN / ELSIF для проверки * Apex Oracle - PullRequest
0 голосов
/ 23 февраля 2020

Я использую Oracle 18 c и Apex 19.1. Я пытаюсь создать процесс проверки страницы в APEX. У меня есть 4 авторских поля, каждое с именем и фамилией, всего 8 полей, связанных с автором. Я бы хотел запретить пользователю вводить только фамилию и оставлять имя пустым. Я надеюсь, что смогу поместить проверку четырех полей в один процесс проверки. Я создал процесс как тип PL / SQL Тело функции (возвращающее логическое значение) . Я использую следующий код:

BEGIN
    IF       :P133_AUTHOR1_LAST_NAME is not null AND :P133_AUTHOR1_FIRST_NAME IS NULL 
    THEN
             :P133_AUTHOR_ERROR_MSG := 'Author1 LAST name is populated but the FIRST ' || 
             'name is blank.  Please populate both names for a given author.';
             RETURN FALSE;
    ELSIF    :133_AUTHOR2_LAST_NAME is not null AND :P133_AUTHOR2_FIRST_NAME IS NULL 
    THEN
             :P133_AUTHOR_ERROR_MSG := 'Author2LAST name is populated but the FIRST ' || 
             'name is blank.  Please populate both names for a given author.';
             RETURN FALSE;
    ELSIF    :133_AUTHOR3_LAST_NAME is not null AND :P133_AUTHOR3_FIRST_NAME IS NULL 
    THEN
             :P133_AUTHOR_ERROR_MSG := 'Author3LAST name is populated but the FIRST ' || 
             'name is blank.  Please populate both names for a given author.';
             RETURN FALSE;
    ELSIF    :133_AUTHOR4_LAST_NAME is not null AND :P133_AUTHOR4_FIRST_NAME IS NULL 
    THEN
             :P133_AUTHOR_ERROR_MSG := 'Author4LAST name is populated but the FIRST ' || 
             'name is blank.  Please populate both names for a given author.';
             RETURN FALSE;

    ELSE
        RETURN TRUE;
    END IF;
END;

Он проверяет первый If / Then и показывает текст в Сообщение об ошибке , когда это необходимо. Однако код игнорирует оставшиеся 3 оператора ELSIF. Как мне сконструировать операторы IF / Then / ElsIf, чтобы они при необходимости возвращались в состояние ЛОЖЬ?

Ответы [ 3 ]

0 голосов
/ 23 февраля 2020

Проблема была в опечатке. Я пропускал букву «P» после «:» в инструкциях ELSIF 2-4. Как только я исправил опечатку, все заработало нормально. Исправленный код ниже.

BEGIN
    IF       :P133_AUTHOR1_LAST_NAME is not null AND :P133_AUTHOR1_FIRST_NAME IS NULL 
    THEN
             :P133_AUTHOR_ERROR_MSG := 'Author1 LAST name is populated but the FIRST ' || 
             'name is blank.  Please populate both names for a given author.';
    END IF;
    IF       :P133_AUTHOR2_LAST_NAME is not null AND :P133_AUTHOR2_FIRST_NAME IS NULL 
    THEN
             :P133_AUTHOR_ERROR_MSG := 'Author2 LAST name is populated but the FIRST ' || 
             'name is blank.  Please populate both names for a given author.';
    END IF;
    IF       :P133_AUTHOR3_LAST_NAME is not null AND :P133_AUTHOR3_FIRST_NAME IS NULL 
    THEN
             :P133_AUTHOR_ERROR_MSG := 'Author3 LAST name is populated but the FIRST ' || 
             'name is blank.  Please populate both names for a given author.';
    END IF;
    IF       :P133_AUTHOR4_LAST_NAME is not null AND :P133_AUTHOR4_FIRST_NAME IS NULL 
    THEN
             :P133_AUTHOR_ERROR_MSG := 'Author4 LAST name is populated but the FIRST ' || 
             'name is blank.  Please populate both names for a given author.';
    END IF;

    If :P133_author_error_msg is null
    Then    
              Return TRUE;
    Else
              Return FALSE;
    End If;
END;
0 голосов
/ 09 марта 2020

Проблема была на самом деле проблема с данными. Я не сразу это заметил. Код, который я разместил первоначально, на самом деле работает нормально. Спасибо за ответы.

0 голосов
/ 23 февраля 2020

Зачем изобретать велосипед? Установите для всех этих элементов значение обязательное .


Если вы настаиваете на собственной проверке, слегка переписайте ее так, чтобы ваш код содержал 4 отдельных IF - END IF с, т. Е. (Псевдокод)

if :author1_first is null or :author1_last is null then
   error
end if;

if :author2_first is null or :author2_last is null then
   error
end if;

etc.

Как собрать все сообщения:

declare
  l_msg varchar2(500);
begin
    if :author1_first is null or :author1_last is null then
       l_msg := l_msg || 'First '; 
    end if;

    if :author2_first is null or :author2_last is null then
       l_msg := l_msg || 'Second ';
    end if;

    -- etc.

    l_msg := case when l_msg is not null then l_msg || ' author''s first and/or last name are missing';
                  else null
             end;
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...