как выполнить триггер каждый день сразу в sql - PullRequest
0 голосов
/ 28 ноября 2018

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

DELIMITER //

create procedure addFDInterestToAccount(in account_number bigint(20))
BEGIN
declare interest float default 0;
declare account_type varchar(10);
declare rate float;
declare savings_account bigint(20);

start transaction;
select balance from fd_account where account_no = account_number into interest;
SELECT plan_id from fd_account where account_no = account_number into account_type;
SELECT saving_account_no from fd_account where account_no = account_number into savings_account;
select interest_rate from fd_plan where plan_id = account_type into rate;
set interest = interest*rate/1200;

insert into transaction (transaction_id, account_no, credit_debit, date_time, amount, type_, agent_id, is_fee)  values (null, savings_account, 'debit', now(), interest, 'not_special', null, false);
update account set balance = balance + interest where account_no = savings_account;
commit;
END //
DELIMITER ;

call addFDInterestToAccount(90842311);

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Насколько я понял ваше требование, я думаю, что вы можете использовать SQL Events для этого.Общий синтаксис выглядит так:

 CREATE [OR REPLACE]
    [DEFINER = { user | CURRENT_USER | role | CURRENT_ROLE }]
    EVENT 
    [IF NOT EXISTS]
    event_name    
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'comment']
    DO sql_statement;

schedule:
    AT timestamp [+ INTERVAL interval] ...
  | EVERY interval 
    [STARTS timestamp [+ INTERVAL interval] ...] 
    [ENDS timestamp [+ INTERVAL interval] ...]

interval:
    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
              WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
              DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

Вы можете изменить / использовать следующий код для достижения этой цели,

 CREATE EVENT example
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP
DO call addFDInterestToAccount(90842311);

Для получения дополнительной информации вы можете посетить ссылку здесь

Также убедитесь, что вы выполняете этот запрос перед запуском события

SET GLOBAL event_scheduler = ON;
0 голосов
/ 28 ноября 2018

Триггер определяется как процедура, запускаемая в ответ на оператор вставки, обновления или удаления.Он будет запускаться каждый раз, когда вы выполняете одну из этих операций DML.Вы не можете запланировать запуск триггера один раз в день.

Из документации MySql (но применимо ко всем базам данных, которые реализуют триггеры):

Триггеропределен для активации, когда оператор вставляет, обновляет или удаляет строки в связанной таблице.Эти операции со строками являются событиями запуска.

Вместо этого вам нужно искать планировщик задач.Каждая ОС будет иметь свою собственную или вы можете найти стороннее программное обеспечение планировщика.

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