В настоящее время я работаю в Oracle Application Express 18.1.0.00.45 и получаю ошибку, которую не понимаю.
Я создал интерактивную сетку, используя следующий запрос:
select periodic_topics_id, filter, topic,
CASE
WHEN LINK1 like '%116%' then LINK1||:APP_SESSION
ELSE LINK1
END AS LINK1
From periodic_topics
where meeting like :P31_MEETING_DESC
and
(nvl(:P31_FILTER,'0') = '0' or instr(:P31_FILTER||':',filter||':') > 0)
В таблице в базе данных столбец period_topics_id является первичным ключом, и он автоматически заполняется при добавлении новой строки в таблицу с использованием следующего триггера:
create or replace TRIGGER periodic_topics_trigger
BEFORE INSERT ON periodic_topics
FOR EACH ROW
BEGIN
:new.periodic_topics_id := periodic_topics_seq.nextval;
END;
В приложении APEX link1 является текстовым полем, а в разделе «Ссылка» свойств этого столбца «Target» имеет тип URL, а URL - & LINK1.
Я также указал в приложении APEX, что period_topics_id является первичным ключом. Это свойства столбца ссылок, на которые я ссылаюсь:
Проблема: когда я вручную вставляю значение в ячейку в столбце «LINK1» интерактивной сетки, возникает ошибка, которая говорит:
"• Ajax-вызов вернул ошибку сервера. ORA-20987: APEX - обработать« Периодические разделы - сохранить данные интерактивной таблицы »,« ORA-01733: виртуальный столбец здесь запрещен »во время выполнения команды DML. Эта ошибка может возникать, если Столбец основан на агрегации или выражении SQL. Установите для атрибута столбца «Только запрос» значение Да, чтобы исключить столбец из оператора INSERT и UPDATE. - Обратитесь к администратору приложения. for. "
Однако, если я создаю интерактивную сетку, используя тот же запрос, но без оператора case, у меня не будет проблем с добавлением ссылки в интерактивную сетку. Ошибка не возникает. Другими словами, при попытке добавить значение в столбец «Link1» в интерактивной сетке не возникает ошибка, если я создаю интерактивную сетку, используя следующий запрос:
select periodic_topics_id, filter, topic, link1
From periodic_topics
where meeting like :P31_MEETING_DESC
and
(nvl(:P31_FILTER,'0') = '0' or instr(:P31_FILTER||':',filter||':') > 0)
Только к вашему сведению, мне нужно, чтобы в запросе была указана ситуация, потому что некоторые ссылки будут перенаправлять пользователя на внешние веб-сайты, а другие - на другую страницу приложения. Без конкатенации оператора case: APP_SESSION к ссылке пользователь вынужден снова входить в приложение всякий раз, когда он щелкает ссылку, которая направляет его на другую страницу приложения.
Кто-нибудь знает, почему ошибка возникает, когда оператор case находится в запросе, а не когда оператор case отсутствует в запросе?
Заранее спасибо.