Как использовать триггер для уменьшения количества и вычисления на APEX, чтобы гарантировать, что количество не опускается ниже 0 - PullRequest
0 голосов
/ 26 марта 2019

Я хочу создать триггерную функцию, которая уменьшает число токенов ученика каждый раз, когда учитель жалуется на ученика.В настоящее время у меня нет таблицы, которая отслеживает изменения количества студентов, у меня есть только таблица, которая показывает их начальный счет.Могу ли я сделать отображение на вершине, которое показывает этот начальный счет и уменьшается ли этот счет всякий раз, когда учитель отправляет форму на вершине, которая является жалобой на этого ученика?(Учителя также должны иметь возможность добавлять токены в учетную запись учащихся за хорошее поведение).

Также это число токенов не может быть ниже 0, поэтому я предполагаю, что это будет просто вычисление количества токенов, которое гарантирует, что значение токена не может быть меньше 0 (или, по крайней мере, я думаю, что это может быть сделано).

Я новичок в триггерах, и все, что я знаю о них до сих пор, это как создать последовательность и триггер, который вставляет новое значение первичного ключа, когда в базе данных должна быть создана новая строка.Я не привык к триггерам, которые уменьшают количество, поэтому я не уверен, как это будет работать.

Как уже упоминалось, у меня также нет таблицы, которая отслеживает изменение количества токенов студентов, и я не уверен, нужна ли мне таблица в моей базе данных для этого или если apex может как-то просто отобразить значение для меня.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 26 марта 2019

Для меня это выглядит как переполнение стека вверх и вниз .

Поскольку есть таблица, содержащая данные ученика, а один из столбцов - 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

Это должно сделать это, я думаю.

...