programing

SQL에서 매일 트리거를 동시에 실행하는 방법

minecode 2022. 10. 21. 21:38
반응형

SQL에서 매일 트리거를 동시에 실행하는 방법

우리는 마이크로뱅킹 프로젝트를 진행 중인데 데이터베이스 차원에서 금리를 계산해야 합니다.따라서 절차와 트리거를 사용했지만 아래 절차를 수행하려면 트리거를 매일 한 번에 실행해야 합니다.트리거를 생성할 수 있는 솔루션을 제공할 수 있습니까?잘 부탁드립니다

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);

당신의 요구 사항을 이해한 이상 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;

트리거는 삽입, 업데이트 또는 삭제 스테이트먼트에 응답하여 실행되는 절차로 정의됩니다.이러한 DML 조작 중 하나를 실행할 때마다 실행됩니다.트리거를 하루에 한 번 실행하도록 스케줄링할 수 없습니다.

MySql 문서(트리거를 구현하는 모든 데이터베이스에 적용 가능):

트리거는 스테이트먼트가 관련 테이블의 행을 삽입, 갱신 또는 삭제할 때 활성화되도록 정의되어 있습니다.이러한 행 연산은 트리거 이벤트입니다.

대신 태스크 스케줄러를 찾아야 합니다.각 OS에 독자적인 스케줄러 소프트웨어가 있거나 서드파티 스케줄러 소프트웨어를 찾을 수 있습니다.

언급URL : https://stackoverflow.com/questions/53511399/how-to-execute-a-trigger-everyday-at-once-in-sql

반응형