Oracle Apex - переход на другую страницу на основе тела функции PL / SQL, возвращающего URL - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь выполнить ветку страницы на основе запроса из таблицы. Запрос, который он выполняет и возвращает что-то, но оператор выполняет только часть else, что заставляет меня думать, что значение из запроса не передается в вычисляемую переменную в операторе. Как лучше всего этого добиться?

Declare
evaluated NUMBER;
SELECT COUNT(*) INTO evaluated FROM USER_EVALUATION join term using(term_id)
WHERE EVALUATION.USER_ID=:P1_ID 
    and term_id =:P1_TERM;

    IF evaluated > 1 THEN
        RETURN 'page_link1_here';

    ELSE
        RETURN 'page_link2_here';

    END IF;
END;

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

В вашем блоке PL / SQL отсутствует ключевое слово BEGIN.

Лучший способ проверить, каковы действительные значения P1_ID и P1_TERM во время работы этого блока, - вставить их в таблицу для тестирования. , Скорее всего, вы увидите, что их значения равны NULL, потому что, как Littlefoot предлагает значения элемента на странице (в DOM), это не то, что используется для запуска PL SQL. PL SQL интересует только значение элементов, которое сохраняется в состоянии сеанса.

Сохранение в состояние сеанса выполняется при отправке страницы, но может быть выполнено с помощью PL SQL piror для отправки страницы. используя эту процедуру:

BEGIN

    APEX_UTIL.SET_SESSION_STATE('P1_ITEM', 'New Value');

END;
1 голос
/ 27 февраля 2020

Если ELSE part всегда возвращается, то count(*) = 0, что означает, что либо в нем нет строк, удовлетворяющих условиям, либо значения элемента страницы не находятся в состоянии сеанса. Неважно, что вы видите их на экране.

Я бы посоветовал вам отправить страницу - это поместит P1_ID и P1_TERM в состояние сеанса, и тогда вы увидите, возвращается ли другая ссылка или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...