Способ вызова (триггер, функция, хранимая процедура или событие), если утверждение / представление истинно - PullRequest
0 голосов
/ 20 октября 2018

Мне нужен способ обновить таблицу, если утверждение или представление верны.Проблема с триггерами и хранимыми процедурами заключается в том, что они зависят от действий пользователя, т. Е. Редактирования, удаления или обновления.Что мне нужно, так это то, что таблица обновляется всякий раз, когда данное утверждение становится истинным на основе системной даты.Реализация выглядит следующим образом:

Просмотр

    CREATE VIEW `vw_dueusers` AS
    select UserID,Penalty from indextbl
        where duedate>now() and balance>0;

Процедура

    DELIMITER $$
    CREATE PROCEDURE sp_PenaltyInsert(
      in vUserID int,
      in vPenalty text
    )
    -- Wonder how to get the variables from the View above for my INs
    begin
    INSERT INTO `penaltytbl`
    -- The idea is to keep updating this table whenever when user doesnt pay on agreed date
    (
    UserID,
    Penalty
    )
    select UserID,Penalty from indextbl
        where  duedate>now() and balance>0;
        -- or
    --select * from vw_dueusers;
    -- How to avoid duplicate entries?
    end

TRIGGER ????Интересно, если бы я даже создал это хорошо

    DELIMITER $$
    CREATE TRIGGER Tr_PenaltyInsert BEFORE INSERT ON indextbl
    -- the idea is automation and not relying on the Insert Action. Once the view above becomes true
    -- the balance doesnt become due, due to an insert but when user doesnt pay on agreed date
      FOR EACH ROW
      BEGIN
      Declare vUserID int;
      Declare vPenalty int;
        set new.vUserID =(select UserID from indextbl where duedate>now() and balance>0);
        set new.vPenalty =(select Penalty from indextbl where  duedate>now() and balance>0);
            INSERT INTO `penaltytbl`
            (
            UserID,
            Penalty
            )
            values
            (
            vUserID,
            vPenalty
            );
        /*values
        (
        New.vUserID,
        New.vPenalty
        );*/
    -- How to avoid duplicate entries?
      END;

Событие ???

...