#sql #oracle #oracle-apex
#sql #Oracle #oracle-вершина #oracle-apex
Вопрос:
Я хочу создать триггерную функцию, которая уменьшает количество токенов учащегося каждый раз, когда учитель подает жалобу на ученика. В настоящее время у меня нет таблицы, которая отслеживает, когда изменяется количество учащихся, у меня есть только таблица, которая показывает их начальное количество. Могу ли я создать отображение на apex, которое показывает это начальное количество и уменьшает это количество всякий раз, когда учитель отправляет форму на apex, которая является жалобой на этого ученика? (Учителя также должны иметь возможность добавлять токены к учетной записи учащихся за хорошее поведение).
Также это количество токенов не может быть ниже 0, поэтому я предполагаю, что это будет просто вычисление количества токенов, которое гарантирует, что значение токена не может быть меньше 0 (или, по крайней мере, я предполагаю, что это можно сделать).
Я вроде как новичок в триггерах, и все, что я пока знаю о них, — это как создать последовательность и триггер, который вставляет новое значение первичного ключа, когда в базе данных должна быть создана новая строка. Я не привык к триггерам, которые уменьшают количество, поэтому я не уверен, как это будет работать.
Как уже упоминалось, у меня также нет таблицы, которая отслеживает изменение количества токенов студентов, и я не уверен, нужна ли мне таблица в моей базе данных для этого или apex может каким-то образом просто отобразить значение для меня.
Любая помощь приветствуется.
Комментарии:
1. Вы действительно используете MySQL? Или это Oracle?
2. Привет, я думал, mysql — это другое название oracle sql. Теперь я изменил теги.
Ответ №1:
Для меня это выглядит как увеличение и уменьшение голосов в Stack Overflow.
Поскольку есть таблица, которая содержит данные учащихся, и один из столбцов NUMBER_OF_VOTES
, тогда у учителей будут две кнопки: P1_UPVOTE
и P1_DOWNVOTE
(или назовите их как хотите).
Нажатие P1_UPVOTE
сделало бы
update student s set
s.number_of_votes := s.number_of_votes 1
where s.student_id = :P1_STUDENT_ID;
Аналогично, нажатие P2_DOWNVOTE
приведет
update student s set
s.number_of_votes := s.number_of_votes - 1
where s.student_id = :P1_STUDENT_ID
and s.number_of_votes > 0; --> so that student wouldn't have negative votes
Я думаю, это должно сработать.
Комментарии:
1. Спасибо, поэтому я предполагаю, что здесь нет необходимости в функции запуска. Также, где я должен вводить этот запрос в Apex? Будет ли это динамическим действием в отношении учителей, подающих жалобу? И как мне отобразить этот счетчик? Могу ли я указать текущее неизменяющееся количество голосов и изменит ли приведенный выше скрипт автоматически отображаемое значение?
2. Обновления будут представлять собой процессы (выполняемые при нажатии соответствующих кнопок, то есть при отправке страницы). Динамическое действие — еще один вариант. Как только страница отправлена, она обновляется и отображает текущее значение счетчика.
3. Привет, я пытался создать процесс для этого, но у меня возникли проблемы. Кажется, я не могу найти способ убедиться, что это работает при отправке моей формы жалобы, поскольку я не вижу возможности для запуска процесса при отправке другого форума на другом
4. В дополнение, я добился некоторого прогресса в уменьшении счетчика на 1 теперь всякий раз, когда учитель подает жалобу. Однако условие >0 не работает. Когда учитель подает жалобу на ученика с 0 токенами, жалоба все равно проходит, и количество токенов учащихся остается равным 0, когда вместо этого на экране учителей должно появиться сообщение об ошибке, в котором говорится, что они больше не могут подать жалобу